空域”指的是图像的像素矩阵本身,空域图像增强是直接
对像素进行处理的。
空域技术是直接对像素的灰度值进行修改。空域图像处理可由表
达式
为像素坐标,T 表示对图像 f 进行增强的操作符。其中T 的定义域可 以是单个像素,也可扩展至像素邻域、整幅图像、甚至多幅图像。
图像增强操作符T 的最简单操作形式是对单个像素进行处理,此
时(x,y)处的输出只与当前位置像素的灰度有关,T 简化为亮度分量
(彩色图像)或灰度值(灰度图像)*的变换函数,其形式相应写成 s =T(r)
r 为输入图像的灰度, s 为相应的输出图像中灰度。
MATLAB 图像处理工具箱使用 imadjust 函数来实现图像的灰度变
换,语法格式如下:
J = imadjust(I,[low_in; high_in],[low_out; high_out],gamma) newmap = imadjust(map,[low_in; high_in],[low_out; high_out],
gamma)
RGB2 = imadjust(RGB1,___)
gpuarrayB = imadjust(gpuarrayA,___)
读入一个低对比度图像,对其采用灰度变换的方式增强 对比度。
I=imread('pout.tif');
imshow(I);
K=imadjust(I,[0.3 0.7],[]);
figure,imshow(K);
直方图均衡化
直方图均衡化是一种最常用的直方图修正方法,它把给定的直方 图修改为均匀分布。用信息论解释,直方图均衡化是使修改后的图像 具有最大熵,即含有最多的信息量。 直觉上,直方图均衡化表现为图
像的对比度增加。采用直方图均衡化对一幅图像进行操作的具体方法
1)列出原始图像的灰度级Sk, k=0,1,L,L-1; 其中L为灰
度级个数。
2) 统计原图像中各灰度级所包含像素数目nk 。
3) 计算原图像各灰度级的频率数 tk = k / N 。
4) 计算原始图像灰度级频率数的累计直方图Tk = 5)确实映射关系Sk ®int[(N-1)´Tk]。
5)确实映射关系Sk ®int[(N-1)´Tk]。
直方图均衡化的 MATLAB 函数为 histeq 具体语法格式如下:
J = histeq(I,hgram)
J = histeq(I,n)
[J, T] = histeq(I)
newmap = histeq(X, map, hgram)
newmap = histeq(X, map)
[newmap, T] = histeq(X,___)
[gpuarrayJ, gpuarrayT] = histeq(gpuarrayI,___)
这幅图像的直方图为上图,经过均衡化为
这幅图像的直方图为上图,经过均衡化为
空域滤波
如前文所述,空域图像处理的自变量即可以是单个像素,也可以 是单个像素的邻域。空域滤波就是在图像空间中借助模板对图像进行 邻域操作。
图像的邻域通常不止一个像素,也就是说一个像素的邻域除该像素本身外,往往还包括其他像素。图像的空域滤波通常通过模板与图 像的卷积(互运算)来实现,每个模板是一个二维数组,其中元素的 值确定了模板的功能。主要步聚如下:
1)将模板在图像上滑动,并将模板中心与图像的待处理像素位
置重合。
2)将模板上的系数与模板下对应的像素相乘。
3)将所有乘积相加。
4)将上步之和作为待处理像素的灰度值。
例 6‐4 如下图 6‐4,用模板 B 对图像 A 进行模板运算。
(a)图像矩阵 A
(b)模板 B 图 6‐4 图像及模板示例
图像矩阵 A 中阴影标记的灰度值为 8 的像素,其滤波结果为: 3´1+4´1+1´1+6´1+8´5+9´1+1´1+3´1+1´1=68
由此例可以看出,这种采用模板滑动来实现空域滤波的算法是相 当耗时的。
为了减少运算复杂度,很多专用图像处理系统选取模板并 不太大,多为3´3、5´5、7´7等,并且常用硬件来完成模板运算。
根据空域滤波器的输出结果,可把空域滤波器分为平滑滤波器和 锐化滤波器两种。
平滑滤波
平滑滤波器可通过低通滤波实现,目的在于模糊图像或消除图像噪声。根据模板特点,平滑滤波器又可分为线性平滑滤波器和非线性 平滑滤波器。
线性平滑滤波器和非线性平滑滤波器都属于平滑滤波,不要把非线性滤波器当做锐化滤波器。
模板对图像进行滤波。 fspecial 的常用语法格式为
h = fspecial(type)
h = fspecial(type,parameters)
表格 6‐1 fspecial 函数的滤波器模板定义
type |
parmeters |
说明 |
average |
hsize |
矩形均值滤波器。hsize 为两元素向量,用于指定矩形 的大小。当为正方形区域时 hsize 也可用标量表示。 |
disk |
radius |
生成半径为 radius 的圆形滤波器 |
gaussian |
hsize,sigma |
标准偏差为 sigma,大小为 hsize 的高斯低通滤波器 |
laplacian |
alpha |
系数为 alpha 的二维拉普拉斯操作 |
log |
hsize,sigma |
标准偏差为sigma,大小为hsize的高斯滤波旋转对称 拉氏算子。 |
motion |
len,theta |
按角度 theta 移动 len 个像素的运动滤波器 |
prewitt |
无 |
近似计算梯度算子 |
sobel |
无 |
考虑了像素点间空间位置的近似计算梯度算子, |
I=imread('eight.tif');
K1=filter2(fspecial('average',3),I);subplot(1,2,1),imshow(K1,[]);title('3*3 均值滤波');
K2=medfilt2(I,[33]);
subplot(1,2,2),imshow(K2,[]);
title('3*3 中值滤波');
第一张图是均值滤波,第二张图是中值滤波。
中值滤波器在细节保持方面较均值滤波器有所
提高。
1)线性锐化滤波器
线性锐化滤波器由于其速度较快,经常用于图像锐化。这种滤波 器的一个经典的 3 ´ 3 模板如下图:
事实上图 6‐10 所示模板为拉普拉斯算子,中心系为大于零,其 余系数小于零,所有系数之和为零。当这样的模板在图像中游走时, 对灰度变化较小或没有变化的区域,其滤波输出较小或为 0。
非线性锐化滤波器
均值滤波器可以模糊图像,而均值滤波器在计算过程中要进行求 和,在数学上对应积分。
故非线性锐化滤波器可在数学上通过微分来实现。其中梯度算子是最常用的微分算子,其刻画了图像沿某个方 向上的灰度变化率。
常用的空域非线性锐化滤波算子有sobel算子、prewitt算子、log
算子(拉普拉斯高斯算子)等。这些算子的定义主要是基于梯度及梯 度模的基本概念。
分别用不同非线性锐化滤波器对图像进行滤波。
I=imread('blobs.png');
h1=fspecial('sobel');
J1=filter2(h1,I);
h2=fspecial('prewitt');
J2=filter2(h2,I);
h3=fspecial('log');
J3=filter2(h3,I); subplot(2,2,1);imshow(I);title('原始图像'); subplot(2,2,2);imshow(J1);title('sobel 算子滤波'); subplot(2,2,3);imshow(J2);title('prewitt 算子滤波'); subplot(2,2,4);imshow(J3);title('log 算子滤波');
由上面的实验结果可以看出,默认的 sobel 和 prewitt 算子均为求
解水平细节,即在竖直方向上进行微分计算。可通过将这两个算子的 模板转置来实现解竖直细节的提取。