Transcript 2 - 数字图像处理
第4章
图像增强
4.1 图像增强概述
4.1.1
图像增强的定义
对图像的某些特征,如
边缘
轮廓
对比度等
进行强调或锐化,以便于显示、观察或进一
步分析与处理。
首要目标:
处理图像,使其比原始图像更适合于特
定应用。
增强的方法是因应用不同而不同的。
图像增强方法只能有选择地使用。
增强的结果
只是靠人的主观感觉加以评价。
4.1.2 图像增强研究的内容
灰度变换
点运算
空间域
直方图修正法
平滑
区域运算
锐化
高通滤波
频率域
图像增强
低通滤波
同态滤波增强
假彩色增强
彩色增强
伪彩色增强
彩色变换增强
代数运算
图4.1 图像增强的内容
4.2 空间域单点增强
点运算
像素值通过运算改变之后,可以改善图
像的显示效果。
这是一种像素的逐点运算。
点运算与相邻的像素之间无运算关系
是旧图像与新图像之间的映射关系。
对于一幅输入图像,经过点运算将产生
一幅输出图像。
输出图像上每个像素的灰度值仅由相应输入
像素的灰度值决定,而与像素点所在的位置
无关。
典型的点运算:
对比度增强、对比度拉伸或灰度变换。
4.2.1
灰度级校正
在成像过程中,如
光照的强弱、感光部件的灵敏度、光学系统的不
均匀性、元器件特性的不稳定
等均可引起图像亮度分布的不均匀。
灰度级校正
在图像采集系统中对图像像素进行逐点修正,使
得整幅图像能够均匀成像。
设理想真实的图像为 f (i, j ) ,实际获得的含噪
声的图像为g (i, j ) ,则有
g (i, j ) e(i, j ) f (i, j )
(4.1)
e(i, j ) 是使理想图像发生畸变的比例因子。
知道了 e(i, j ) , 就可以求出不失真图像。
标定系统失真系数的方法
采用一幅灰度级为常数C的图像成像,若经成像
系统的实际输出为 g c (i, j) ,则有
g c (i, j ) e(i, j )C
(4.2)
可得比例因子:
e i, j gc i, j C 1
(4.3)
可得实际图像g(i,j)经校正后所恢复的原始图像
g i, j
f i, j C
g c i, j
乘了一个系数C/ gc(i,j) ,校正后可能出现“溢出”现
(4.4)
象
灰度级值可能超过某些记录器件或显示设备输入信号的动态
可范围
需再作适当的灰度变换,最后对变换后的图像进行量化。
4.2.2 灰度变换
灰度变换
可使图像动态范围增大,图像对比度扩展
从而使图像变得清晰以及图像上的特征变得明
显。
1.线性变换
令原图像f (i, j)的灰度范围为[a,b]
线性变换后图像g(i, j)的范围为[a’, b’]。
g(i,j)
b
a
f(i,j)
a
b
图4.2 线性变换
g(i, j)与f(i, j)之间的关系为:
g i, j a '
b ' a '
[ f i, j a ]
ba
(4.5)
分段线性变换的目的
突出感兴趣的目标或灰度区间,相对抑
制那些不感兴趣的灰度区间。
常用的是三段线性变换。
Mg
g
d
c
f
a
a
b
b
Mf
图4.3 三段线性
c / a f i, j
0 f i, j a
g i, j d c / b a f i, j a c
a f i, j b
M g d / M f b f i, j b d
b f i, j M f
对灰度区间[a,b]进行了线性拉伸,而灰度区
间[0,a]和[b,Mf]则被压缩。
仔细调整折线拐点的位置及控制分段直线的
斜率,可以对图像的任一灰度区间进行拉伸
或压缩 。
【例4.1 】在MATLAB环境中,采用图像线性变
换进行图像增强。应用MATLAB的函数
imadjust将图像0.3×255~0.7×255灰度之间的
值通过线性变换映射到0~255之间。
解:分别取:a=0.3×255,b=0.7×255,
a’=0,b’=255。
实现的程序:
•
•
•
•
•
A=imread('pout.tif');
%读入图像
imshow(A);
%显示图像
figure,imhist(A);
%显示图像的直方图
J1=imadjust(A,[0.3 0.7],[]);
%函数将图像在0.3*255~0.7*255灰度之间的值
通过线性变换映射到0~255之间
• figure,imshow(J1);
%输出图像效果图
• figure,imhist(J1)
%输出图像的直方图
(a)原图
(b)原图的直方图
(c)输出图像
(d)输出图像的直方图
图4.4 图像线性变换
2.非线性灰度变换
当用某些非线性函数如对数、指数函数等
作为映射函数时,可实现灰度的非线性变换。
对数变换的一般表达式为:
g(i, j) c log(1 f (i, j) )
(4.7)
对数变换可以增强低灰度级的像素,压制高
灰度级的像素,使灰度分布与视觉特性相匹配。
4.2.3 灰度直方图变换
直方图(图4.5 ):指图像中各种不同
灰度级像素出现的相对频率 。
相
对
频
率
灰度级
灰度直方图描述了图像的概貌。
直方图变换后可使图像的灰度间距拉开或使
灰度分布均匀,从而增大对比度,使图像细
节清晰,达到增强的目的。
直方图变换有
直方图均衡化及直方图规定化两类。
直方图均衡化
通过对原图像进行某种变换,使得图像的直方
图变为均匀分布的直方图。
灰度级连续的灰度图像:当变换函数是原图
像直方图累积分布函数时,能达到直方图均
衡化的目的。
对于离散的图像,用频率来代替概率 。
【例4.2】假定有一幅总像素为n=64×64的图
像,灰度级数为8,各灰度级分布列于表4.1
中。试对其进行直方图均衡化。
表4.1 一幅图像的灰度级分布
k
0
1
2
3
4
5
6
7
rk
0
1/7
2/7
3/7
4/7
5/7
6/7
1
nk
790
1023
850
656
329
245
122
81
pr(rk)
0.19
0.25
0.21
0.16
0.08
0.06
0.03
0.02
0.19
0.44
0.65
0.81
0.89
0.95
0.98
1
1/7
3/7
5/7
6/7
6/7
1
1
1
sk
1/7
3/7
5/7
6/7
1
n sk
790
1023
850
985
448
pr(sk)
0.19
0.25
0.21
0.24
0.11
sk
sk
解:(1)求变换函数 s k
s0 T (r0 ) pr (rj ) 0.19
0
j 0
类似地计算出
1
s1 T (r1 ) pr (rj ) 0.19 0.25 0.44
j 0
s2 0.65, s3 0.81, s4 0.89, s5 0.95, s6 0.98, s7 1
(2)计算 s k
输出图像灰度是等间隔的,且与原图像灰度
范围一样取8个等级,即要求最终的值sk=k/7,
k=1,2,…,7。
需要对 s k 进行重新量化后加以修正:
s0 1 7, s1 3 7 , s2 5 7 , s3 6 7 , s4 6 / 7, s5 1, s6 1, s7 1
(3) sk 的确定
s
由 k 可知,输出灰度级仅为5个级别:
s0 1/ 7, s1 3 / 7, s2 5 / 7, s4 6 / 7, s7 1
(4)计算对应每个
sk 的
n sk
因为 r0 0 映射到 s0 1/ 7 ,所以有790个像
素在输出输出图像上变成 s0 1/ 7
s 3 / 7 ,所以有1023个像素取
r=
1 1/ 7 映射到 1
值 s1 3 / 7 。r=
映射到 s2 5 / 7 ,因此有
2 2/ 7
850个像素取值 s2 5 / 7。
因为 r4 和 r3 都映射到 s4 6 / 7 ,因此有
7
656+329=985个像素取值 s4 6 /。同理有
245+122+81=488个像素变换 s7 1 。
(5)计算 ps sk nsk / n
【例4.3】在MATLAB环境中,采用直方
图均衡的方法进行图像增强 。
解:程序如下
A=imread('p1.jpg');
I=histeq(A);
%调用函数完成直方图均衡化
subplot(1,2,1),imshow(A);
%直方图均衡化前的图像效
果
subplot(1,2,2),imshow(I);
%直方图均衡化后的图像效果
figure,subplot(1,2,1),imhist(A);
%均衡化前的直方图
subplot(1,2,2),imhist(I);
%均衡化后的直方图
4.3 平滑
一种区域增强的算法 ,平滑算法有:
邻域平均法,中值滤波和边界保持类滤波等。
4.3.1
邻域平均法
大部分的噪声都可以看作是随机信号,对图
像的影响可以看作是孤立的。
某一像素,如果它与周围像素点相比,有明
显的不同,则该点被噪声感染了。
设当前待处理像素为f (m,n) ,给出一个大
小为3×3的处理模板。
图4.7 模板示意图
处理后的图像设为 g (m, n) ,则处理过程
可描述为
1
f ( m i, n j )
g (m, n) 9
iZ jZ
f (m, n)
当 f (m, n)
1
f ( m i, n j )
9 iZ jZ
其他
其中Z={-1,0,1}, 为门限,它可以根据
对误差容许的程度,选为图像灰度均方
差的 f 若干倍,或者通过实验得到。
也可以把平均处理看作是图像通过一个低
通空间滤波器后的结果
设该滤波器的冲激响应为H(r,s) ,于是滤
波器输出的结果g(m,n)表示成卷积的形式,
即
fˆ (m, n)
k
l
f (m r, n s) H (r, s),
m, n 0,1,2, N 1 (4.8)
r k s l
k,l决定了所选邻域的大小 ,为加权函数,
又被称为掩模(Mask)或模板
常用的模板:
1 1 1
H 1 101 1 2 1
1 1 1
1 1 1
H 3 18 1 0 1
1 1 1
1 2 1
H 2 161 2 4 2
1 2 1
0 14 0
H 4 12 14 1 14
0 14 0
【例4.4】分别采用4种模板对图像进行处理。
I1 = imread('blood1.tif');
I=imnoise(I1,'salt & pepper');
%对图像加椒盐噪声
imshow(I);
h1= [0.1 0.1 0.1; 0.1 0.2 0.1; 0.1 0.1 0.1];
%定义4种模板
h2=1/16.*[1 2 1;2 4 2;1 2 1];
h3=1/8.*[1 1 1;1 0 1;1 1 1];
h4=1/2.*[0 1/4 0;1/4 1 1/4;0 1/4 0];
I2=filter2(h1,I);
%用4种模板进行滤波处理
I3=filter2(h2,I);
I4=filter2(h3,I);
I5=filter2(h4,I);
figure,imshow(I2,[])
%显示处理结果
figure,imshow(I3,[])
figure,imshow(I4,[])
figure,imshow(I5,[])
(a)有噪声的图像
(b)模板1处理的结果图
(c)模板2处理的结果图
(d)模板3处理的结果图
(e)模板4处理的结果图
图4.8 平滑处理的例子
4.3.2
中值滤波
邻域平均法:在去噪的同时也使边界变得
模糊了。
中值滤波:非线性的处理方法,在去噪的
同时可以兼顾到边界信息的保留。
选一个含有奇数点的窗口W,将这个窗口在图
像上扫描,把该窗口中所含的像素点按灰度级
的升(或降)序排列,取位于中间的灰度值,
来代替该点的灰度值。
g (m, n) Median f (m k , n l ), (k , l ) W (4.9)
例:选择滤波用的窗口W如图,是一个一维的
窗口,待处理像素的灰度取这个模板中灰度的
中值,滤波过程为:
图4.9 一维窗口
常用的窗口还有方形、十字形、圆
形和环形等。
图4.10 中值滤波的常用窗口
中值滤波对于消除孤立点和线段的干扰十
分有用。
特别是对于二进噪声尤为有效,对于消除高斯
噪声的影响效果不佳。
对于一些细节较多的复杂图像,还可以多次使
用不同的中值滤波,然后通过适当的方式综合
所得的结果作为输出,这样可以获得更好的平
滑和保护边缘的效果。
【例4.5】选用3×3的窗口进行中值滤波。
I1 = imread('blood1.tif');
I=imnoise(I1,'salt & pepper',0.02);
imshow(I);
K = medfilt2(I);
%中值滤波
figure,imshow(K);
(a) 原图
(b)结果图
图4.11 中值滤波
4.3.3
边界保持类滤波
1. K近旁均值滤波器(KNNF)
在m×m的窗口中,属于同一集合类的像素,它们的
灰度值将高度相关。
被处理的像素(对应于窗口中心的像素)可以用窗口
内与中心像素灰度最接近的k个邻近像素的平均灰度
来代替。
(1)作一个m×m的作用模板。
(2)在其中选择K个与待处理像素的灰度差为最小的像
素。
(3)用这K个像素的灰度均值替换掉原来的值。
模板为3×3,k=3的K近旁均值滤波器。
图4.12 K近旁均值滤波器
2. K近旁中值滤波器(KNNMF)
在K近旁均值滤波器中,不选k个邻近像素的
平均灰度来代替,而选k个邻近像素的中值灰度
来代替。
图4.13 K近旁中值滤波器
3. 最小均方差滤波器
对图像上待处理的像素(m,n)选它
的5×5邻域。
在此邻域中采用图4.14所示的模板。
计算各个模板的均值和方差,按方差
排序,最小方差所对应的模板的灰度
均值就是像素(m,n)的输出值。
图4.14 最小均方差滤波器模板
计算步骤如下:
(1)按图做出9个模板,计算出各自的方差。
(2)选出方差为最小的模板。
(3)用该模板的灰度均值代替原像素的灰度值。
均值和方差公式:
1
f
N
f
i
1
N
2
i
2
(
f
f
)
i
(4.9)
其中 是指对应的模板,N是模板中像素的数量。
以方差作为各个邻域灰度均匀性的测度。
若邻域含有尖锐的边缘,灰度方差必定很大,
而不含边缘或灰度均匀的邻域,方差就很小,那
么最小方差所对应的邻域就是灰度最均匀邻域。
通过这样的平滑既可以消除噪声,又能够不破
坏邻域边界的细节。
4.4
锐化
基本思想:
有时还需要加强图像中景物的边缘和轮廓。
边缘和轮廓常常位于图像中灰度突变的地方,
因而可以直观的想到用灰度的差分对边缘和
轮廓进行提取。
4.4.1
梯度锐化法
二元函数f (x,y)在坐标点(x,y)处的梯度定义为
f
G x x
f f
G y
y
(4.10)
梯度向量的幅度:
1
2 2
y
f mag(f ) [G G ]
2
x
f
f
[( ) 2 ( ) 2 ] 2
x
y
1
(4.11)
为了降低运算量,常用绝对值或最大值运
算代替平方与平方根运算近似求梯度的幅度:
f | Gx | | G y |
(4.12)
f max(|Gx |, | Gy |)
(4.13)
数字微分将用差分代替:
Gx f (i 1, j ) f (i, j )
Gy f (i, j 1) f (i, j)
(4.14)
(4.15)
图4.15 沿x和y方向的一阶差分
图4.16 罗伯茨差分
所有梯度值都和相邻像素之间的灰度差分成
比例。
利用它来增强图像中景物的边界。
采用梯度进行图像增强的方法有:
• 第一种方法:使其输出图像的各点等于该点
处的梯度。即
g (i, j ) f (i, j )
(4.16)
缺点:输出的图像在灰度变化比较小的区域,g(i,j)
很小,显示的是一片黑色。
• 第二种方法: 对梯度值超过某阈值T的像素选用梯
度值,而小于T时选用原像素点值。
f (i, j ), f (i, j ) T
(4.17)
g (i, j )
f (i, j ), 其他
适当的选取T,可以有效地增强边界而不影响比
较平滑的背景。
第三种方法:对梯度值超过T的像素选用固定
灰度LG 代替,而小于T时仍选用原像素点值
LG , f (i, j ) T
g (i, j )
f (i, j ), 其他
(4.18)
这种方法可以使边界清晰,同时又不损害灰
度变化比较平缓区域的图像特性。
• 第四种方法:将梯度值超过T的像素选用梯度
值,而小于T时选用固定的灰度LB 。即
f (i, j ), f (i, j ) T
g (i, j )
LB , 其他
(4.19)
这种方法将背景用一个固定的灰度级LB来表
示,便于研究边缘灰度的变化。
• 第五种方法:是将梯度值超过某阈值T的像素选用固
定灰度LG ,而小于该阈值T时选用固定的灰度LB 。
LG , f (i, j ) T
g (i, j )
LB , 其他
(4.20)
该法生成的是二值图,根据阈值将图像分成边缘和
背景,便于研究边缘所在的位置。
【例4.5】利用罗伯茨梯度对图像进行锐化处理。
解: 程序如下:
I = imread('rice.tif');
imshow(I);
BW1 = edge(I,'roberts',0.1);
figure, imshow(BW1);
(a)原图像
(b)结果图
图4.17 罗伯茨梯度的锐化
4.4.2
拉普拉斯算子(Laplacian)
除一阶微分外,还可以选用二阶微分算子。
一个连续的二元函数f (x,y),其拉普拉斯运算
定义为
2
2
f
f
(4.21)
2 f 2 2
x
y
对于数字图像,拉普拉斯算子可以简化为
g (i, j) 4 f (i, j) f (i 1, j) f (i 1, j) f (i, j 1) f (i, j 1)(4.22)
• 也可以表示为卷积的形式,即
g (i, j )
k
l
f (i r, j s) H (r, s),
i, j 0,1,2, N 1
r k s l
其中,k=1,l=1,H (r, s) 取下式
0 1 0
H 1 1 4 1
0 1 0
(4.23)
拉普拉斯的增强算子:
g (i, j ) 5 f (i, j ) f (i 1, j ) f (i 1, j ) f (i, j 1) f (i, j 1)
其对应的模板为:
0 1 0
H 1 1 5 1
0 1 0
(4.24)
【例4.6】应用拉普拉斯算子进行图像锐化处
理。
解: 程序如下
I = imread('2.gif');
imshow(I);
h=[0 -1 0;-1 4 -1;0 -1 0];
I2=imfilter(I,h);
figure,imshow(I2);
(a)原图像
(b)结果图
图4.18 拉普拉斯算子的锐化
4.4.3
高通滤波
常用的高通模板有:
1 2 1
H 3 2 4 2
1 2 1
1 1 1
H 2 1 8 1
1 1 1
4.4.4
0 1 0
H 4 1 5 1
0 1 0
其他锐化算子
1. Sobel算子
S dx d y
2
1
2 2
(4.25)
d x [ f (i 1, j 1) 2 f (i 1, j) f (i 1, j 1)] [ f (i 1, j 1) 2 f (i 1, j) f (i 1, j 1)]
d y [ f (i 1, j 1) 2 f (i, j 1) f (i 1, j 1)] [ f (i 1, j 1) 2 f (i, j 1) f (i 1, j 1)]
用模板来表示:
1 0 1
d x 2 0 2
1 0 1
1 2 1
d y 0 0 0
1 2 1
2. Prewitt算子
S p dx dy
2
1
2 2
用模板表示 d x , d y :
1 0 1
d x 1 0 1
1 0 1
1 1 1
d y 0 0 0
1 1 1
3. Isotropic算子
SI d x d y
2
用模板表示 d x , d y
1
d x 2
1
1
0 2
0 1
0
1
2 2
:
1 2 1
dy 0
0
0
1
2
1
【例4.7】利用Sobel算子和Prewitt算子对图像进
行锐化处理。
I = imread('ric.tif');
imshow(I);
hs=fspecial('sobel');
S=imfilter(I,hs);
hp=fspecial('prewitt')
P=imfilter(I,hp);
figure,imshow(S,[]);
figure,imshow(P,[]);
(a)Sobel算子
(b)Prewitt算子
图4.19 锐化结果