3.1基本知识
本章所讨论的图像处理技术都是在空间域进行的。
空间域:图像平面本身,这类图像处理方法直接以图像中的像素操作为基础。
空间域处理主要分为灰度变换和空间滤波两类。
- 灰度变换在图像的单个像素上操作,主要以对比度和阈值处理为目的。
- 空间滤波涉及改善性能的操作,如通过图像中每一个像素的邻域处理来锐化图像。
空间域处理可由下式表示:
g
(
x
,
y
)
=
T
[
f
(
x
,
y
)
]
g(x,y)=T[f(x,y)]
g(x,y)=T[f(x,y)]
其中
f
(
x
,
y
)
f(x,y)
f(x,y)是输入图像,
g
(
x
,
y
)
g(x,y)
g(x,y)是处理后的图像,
T
T
T是在点
(
x
,
y
)
(x,y)
(x,y)的邻域上定义的关于
f
f
f的一种算子。
在空间滤波中,邻域与预定义的操作一起称为空间滤波器(也称为空间掩模,核,模板或窗口)
最小邻域的大小为
1
∗
1
1*1
1∗1。这种情况下,g仅取决于点
(
x
,
y
)
(x,y)
(x,y)处的
f
f
f值,形成一个灰度变换函数:
s
=
T
(
r
)
s=T(r)
s=T(r)
可用于对比度拉伸和阈值处理
灰度变换函数可用于图像增强和图像分割。
3.2一些基本的灰度变换函数
下图显示了图像增强常用的三类基本函数:线性函数(反转和恒等变换)、对数函数(对数和反对数变换)和幂律函数(n次幂和n次根变换)
3.2.1图像反转
公式:
s
=
L
−
1
−
r
s=L-1-r
s=L−1−r
适用于增强嵌入在一幅图像的暗区域中的白色或灰色细节,特别是当黑色面积在尺寸上占主导地位时。
3.2.2对数变换
公式:
s
=
c
l
o
g
(
1
+
r
)
s=clog(1+r)
s=clog(1+r)
该变换将输人中范围较窄的低灰度值映射为输出中较宽范围的灰度值,相反地,对高的输人灰度值也是如此。我们使用这种类型的变换来扩展图像中的暗像素的值,同时压缩更高灰度级的值。反对数变换的作用与此相反。
3.2.3幂律变换
公式:
s
=
c
r
γ
s=cr^\gamma
s=crγ
幂律变换在伽马校正和对比度操作中很有用。也可用来扩展和压缩。
3.2.4分段线性变换函数
-
对比度拉伸:扩展图像灰度级动态范围
-
灰度级分层:突出图像中特定灰度范围的亮度
有两种方法:1.将感兴趣范围内所有灰度值显示为一个值,而其他灰度值显示为另一个值。2.将感兴趣范围内的灰度变亮(或者变暗),保持图像中其他灰度级不变。 -
比特平面分层
高阶比特平面包含了视觉上很重要的大多数数据,低阶比特平面在图像中贡献了更精细的灰度细节。每个比特平面都是一幅二值图像。
可用于分析图像中每个比特的相对重要性,对于图像压缩也很有用。
3.3 直方图处理
直方图是多种空间域处理技术的基础。直方图操作可用于图像增强。
归一化后的直方图由
p
(
r
k
)
=
n
k
/
M
N
p(r_k)=n_k/MN
p(rk)=nk/MN给出,其中
k
=
0
,
1
,
.
.
.
,
L
−
1
k=0,1,...,L-1
k=0,1,...,L−1。简单地说,
p
(
r
k
)
p(r_k)
p(rk)是灰度级"在图像中出现的概率的一个估计。归一化直方图的所有分量之和应等于1。
3.3.1直方图均衡
直方图均衡就是把一个已知灰度概率密度分布的图像经过一种变换,使之演变为一幅具有均匀灰度概率密度分布的新图像。
直方图均衡的步骤:
(1)计算累计直方图;
(2)将累计直方图进行区间转换;
(3)在累计直方图中,概率相近的原始值,会被处理为相同的值。
3.3.2直方图匹配
对于某些应用,采用均匀直方图的基本增强并不是最好的方法,有时希望处理后的图像具有规定的直方图形状可能更有用,这种用于产生处理后由特殊直方图的方法称为直方图匹配。
使用步骤如下,可由一幅给定图像得到一副其灰度级具有指定概率密度的图像
- 由输入图像得到 p r ( r ) p_r(r) pr(r),并由式子 s = T ( r ) = ( L − 1 ) ∫ 0 r p r ( w ) d w s=T(r)=(L-1)\int_{0}^{r} p_r(w)dw s=T(r)=(L−1)∫0rpr(w)dw求得s的值。
- 使用式子 G ( z ) = ( L − 1 ) ∫ 0 z p z ( t ) d t G(z)=(L-1)\int_{0}^{z} p_z(t)dt G(z)=(L−1)∫0zpz(t)dt中指定的概率密度函数求得变换函数 G ( z ) G(z) G(z)。
- 求得反变换函数 z = G − 1 ( s ) z=G^{-1}(s) z=G−1(s)。
- 首先用式 s = T ( r ) = ( L − 1 ) ∫ 0 r p r ( w ) d w s=T(r)=(L-1)\int_{0}^{r} p_r(w)dw s=T(r)=(L−1)∫0rpr(w)dw对输入图像进行均衡得到输出图像,该图像的像素值是s。对均衡后的图像中具有s值的每个像素执行反映射 z = G − 1 ( s ) z=G^{-1}(s) z=G−1(s),得到输出图像中的相应像素。当所有的像素都处理完后,输出图像的PDF将等于指定的PDF。
直方图规定化过程如下:
- 计算给定图像的直方图,用它寻找式 s k = ( L − 1 ) M N ∑ j = 0 k n j s_k=\frac{(L-1)}{MN} \sum_{j=0}^{k} n_j sk=MN(L−1)∑j=0knj的直方图均衡变换,把 s k s_k sk四舍五入为范围 [ 0 , L − 1 ] [0,L-1] [0,L−1]内的整数。
- 用式 G ( z q ) = ( L − 1 ) ∑ i = 0 q p z ( z i ) G(z_q)=(L-1) \sum_{i=0}^{q}p_z(z_i) G(zq)=(L−1)∑i=0qpz(zi)计算变换函数G的所有值,其中 p z ( z i ) p_z(z_i) pz(zi)是规定的直方图的值,把 G G G的值四舍五入为范围 [ 0 , L − 1 ] [0,L-1] [0,L−1]内的整数。将G的值存储在一个表中。
- 对每一个值 s k s_k sk,使用步骤2存储的G值寻找相应的 z q z_q zq值,以使 G ( z q ) G(z_q) G(zq)最接近 s k s_k sk,并存储这些从s到z的映射。
- 首先对输入图像进行均衡,然后使用步骤3找到的映射把该图像中每个均衡后的像素值 s k s_k sk映射为直方图规定化后的图像中相应 z q z_q zq值,形成直方图规定化后的图像。
3.3.3局部直方图处理
以图像中每个像素的邻域中的灰度分布为基础设计变换函数
3.3.4在图像增强中使用直方图统计
均值是平均灰度的度量,方差是图像对比度的度量。
在局部增强中,局部均值和方差是根据图像中每一像素的邻域内的图像特征进行改变的基础
判断一个区域
(
x
,
y
)
(x,y)
(x,y)是暗还是亮的方法是把局部平均灰度与全局均值的平均图像灰度作比较。
优势需要一种度量方法来确定一个区域的对比度是否可作为增强的候选点,该方法通过比较局部标准差和全局标准差
3.4空间滤波基础
滤波是指接受或拒绝一定的频率分量,通过低频的滤波器称为低通滤波器,其效果是模糊一幅图像。
3.4.1空间滤波机理
空间滤波器由(1)一个邻域(典型地是一个较小的矩形),(2)对该邻域包围的图像像素执行的预定义操作组成。滤波产生一个新像素,新像素的坐标等于邻域中心的坐标,像素的值是滤波操作的结果。
滤波器根据在图像像素上执行的操作是否为线性操作,分为线性空间滤波器和非线性空间滤波器。
一般来说,使用大小为
m
∗
n
m*n
m∗n的滤波器对大小为
M
∗
N
M*N
M∗N的图像进行线性空间滤波,可由下式表示:
g
(
x
,
y
)
=
∑
s
=
−
a
a
∑
t
=
−
b
b
w
(
s
,
t
)
f
(
x
+
s
,
y
+
t
)
g(x,y)=\sum_{s=-a}^{a} \sum_{t=-b}^{b} w(s,t)f(x+s,y+t)
g(x,y)=∑s=−aa∑t=−bbw(s,t)f(x+s,y+t)
3.4.2空间相关与卷积
执行线性空间滤波时,需区分两个概念:相关和卷积。
- 相关是滤波器模板移过图像并计算每个位置乘积之和的处理。可用于寻找图像中的匹配。不满足交换律。
- 卷积的机理相似,但滤波器首先要旋转180°。满足交换律。
将包含单个1而其余都是0的函数称为离散单位冲激。得出结论:一个函数与离散单位冲激相关,在该冲激位置产生这个函数的一个翻转的版本。
一个函数与一个冲激卷积,在该冲激位置复制了这个函数。
相关公式:
g
(
x
,
y
)
=
∑
s
=
−
a
a
∑
t
=
−
b
b
w
(
s
,
t
)
f
(
x
+
s
,
y
+
t
)
g(x,y)=\sum_{s=-a}^{a} \sum_{t=-b}^{b} w(s,t)f(x+s,y+t)
g(x,y)=∑s=−aa∑t=−bbw(s,t)f(x+s,y+t)
卷积公式:
g
(
x
,
y
)
=
∑
s
=
−
a
a
∑
t
=
−
b
b
w
(
s
,
t
)
f
(
x
−
s
,
y
−
t
)
g(x,y)=\sum_{s=-a}^{a} \sum_{t=-b}^{b} w(s,t)f(x-s,y-t)
g(x,y)=∑s=−aa∑t=−bbw(s,t)f(x−s,y−t)
3.4.3线性滤波的向量表示
R
=
∑
k
=
1
m
n
w
k
z
k
=
w
T
z
R=\sum_{k=1}^{mn} w_kz_k=w^Tz
R=∑k=1mnwkzk=wTz
w是一个大小为
m
∗
n
m*n
m∗n的滤波器的系数,z为由滤波器覆盖的相应图像的灰度值。
3.4.4空间滤波器模板的产生
- 生成一个大小为mxn的线性空间滤波器要求指定m个模板系数,这些系数是根据该滤波器支持什么样的操作来选择的。
- 产生非线性滤波器要求我们确定邻域的大小,以及将对包含在邻域内的图像像素执行的操作。
3.5平滑空间滤波器
用于模糊处理和降低噪声。通过线性滤波和非线性滤波模糊处理,可以降低噪声。
3.5.1平滑线性滤波器
平滑线性空间滤波器的输出(响应)是包含在滤波器模板邻域内的像素的简单平均值。这些滤波器有时也称为均值滤波器。
均值滤波器的主要应用是去除图像中的不相关细节,其中“不相关”是指与滤波器模板尺寸相比较小的像素区域。
所有系数都相等的空间均值滤波器称为盒装滤波器。
一幅
M
∗
N
M*N
M∗N的图像经过一个大小为
m
∗
n
m*n
m∗n的加权均值滤波器滤波的过程可由下式给出:
3.5.2统计排序(非线性)滤波器
统计排序滤波器是一种非线性空间滤波器,这种滤波器的响应以滤波器包围的图像区域中所包含的像素的排序(排队)为基础,然后使用统计排序结果决定的值代替中心像素的值。
中值滤波器(取第50%个值)是其中最知名的滤波器,该滤波器对处理脉冲噪声非常有效。其主要功能是使拥有不同灰度的点看起来更接近于它的相邻点。
最大值滤波器(取第100%个值)对于搜寻一幅图像中的最亮点非常有用。
通常,中值滤波比均值滤波更适合去除脉冲噪声。
3.6锐化空间滤波器
锐化处理的主要目的是突出灰度的过度部分。锐化处理可由空间微分来实现。图像微分增强边缘和其他突变(如噪声),而削弱灰度变化缓慢的区域。
- 对于一阶微分的任何定义都必须保证以下几点:(
1)在恒定灰度区域的微分值为零;
(2)在灰度台阶或斜坡处微分值非零:
(3)沿着斜坡的微分值非零。 - 任何二阶微分的定义必须保证以下几点:
(1)在恒定区域微分值为零;
(2)在灰度台阶或斜坡的起点处微分值非零;
(3)沿着斜坡的微分值非零。
一阶微分的基本定义是差值:
d
d
x
f
=
f
(
x
+
1
)
−
f
(
x
)
\frac{\mathrm{d}}{\mathrm{d}x}f=f(x+1)-f(x)
dxdf=f(x+1)−f(x)
二阶微分定义为如下差分:
d
2
d
x
f
=
f
(
x
+
1
)
+
f
(
x
−
1
)
−
2
f
(
x
)
\frac{\mathrm{d^2}}{\mathrm{d}x}f=f(x+1)+f(x-1)-2f(x)
dxd2f=f(x+1)+f(x−1)−2f(x)
二阶微分在增强细节方面比一阶微分好的多,这是一个适合锐化图像的理想特征。
3.6.2拉普拉斯算子
一个二维图像函数
f
(
x
,
y
)
f(x,y)
f(x,y)的拉普拉斯算子定义为:
▽
2
f
(
x
,
y
)
=
f
(
x
+
1
,
y
)
+
f
(
x
−
1
,
y
)
+
f
(
x
,
y
+
1
)
+
f
(
x
,
y
−
1
)
−
4
f
(
x
,
y
)
\bigtriangledown ^2f(x,y)=f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)-4f(x,y)
▽2f(x,y)=f(x+1,y)+f(x−1,y)+f(x,y+1)+f(x,y−1)−4f(x,y)
使用拉普拉斯对图像增强的基本方法可表示为下式子:
g
(
x
,
y
)
=
f
(
x
,
y
)
+
c
[
▽
2
f
(
x
,
y
)
]
g(x,y)=f(x,y)+c[\bigtriangledown ^2f(x,y)]
g(x,y)=f(x,y)+c[▽2f(x,y)]
其中,
f
(
x
,
y
)
f(x,y)
f(x,y)和
g
(
x
,
y
)
g(x,y)
g(x,y)分别是输入图像和锐化后的图像,如果使用具有负的中心系数的拉普拉斯滤波器,则常数c=-1,如果使用具有正的中心系数的滤波器,则常数c=1。
3.6.3非锐化掩蔽和高提升滤波
非锐化掩蔽是指从原图像中减去一幅非锐化(模糊过的)版本。过程步骤如下:
- 模糊原图像
- 从原图像中减去模糊图像(产生的差值图像称为模板)
- 原图像加上模板
使用
f
√
(
x
,
y
)
f_\surd (x,y)
f√(x,y)表示模糊图像。首先得到模板
g
m
a
s
k
(
x
,
y
)
=
f
(
x
,
y
)
−
f
√
(
x
,
y
)
g_{mask}(x,y)=f(x,y)-f_\surd (x,y)
gmask(x,y)=f(x,y)−f√(x,y)
然后在原图像上加上该模板的一个权重部分
g
(
x
,
y
)
=
k
∗
g
m
a
s
k
(
x
,
y
)
+
f
(
x
,
y
)
g(x,y)=k*g_{mask}(x,y)+f(x,y)
g(x,y)=k∗gmask(x,y)+f(x,y)
当k=1时,我们得到上面定义的非锐化掩蔽。当k>1时该处理称为高提升滤波。选择k<1则不强调非锐化模板的贡献。
3.6.4使用一阶微分对(非线性)图像锐化
一阶微分是用梯度幅值来实现的。对于函数
f
(
x
,
y
)
f(x,y)
f(x,y),f在坐标
(
x
,
y
)
(x,y)
(x,y)处的梯度定义为列向量
g
r
a
d
(
f
)
=
[
g
x
g
y
]
=
[
d
f
d
x
d
f
d
y
]
grad(f)=\begin{bmatrix}g_x\\g_y\end{bmatrix}=\begin{bmatrix}\frac{df}{dx}\\\frac{df}{dy} \end{bmatrix}
grad(f)=[gxgy]=[dxdfdydf]
有罗伯特交叉梯度算子
3.7混合空间增强法
通常,为了得到满意的效果,对给定的任务需要应用多种互补的图像增强技术。需要将以上所说明的多种图像增强方法结合起来。
3.8模糊集合
模糊集合是一个由z值和(赋予z成员等级的)相应隶属度函数组成的序对,即
A
=
[
z
,
μ
A
(
Z
)
∣
z
∈
Z
]
A=[z,\mu _A(Z)|z\in Z]
A=[z,μA(Z)∣z∈Z]
- 使用模糊集合进行灰度变换
考虑对比度增强这样的一般问题,这是灰度变换的主要应用之一。我们可以用如下规则说明灰度级图像对比度增强的过程:
IF 一个像素是暗的,THEN 使它较暗。
IF 一个像素是灰的,THEN 使它仍是灰的。
IF 一个像素是亮的,THEN 使它较亮。 - 使用模糊集合进行空间滤波
当把模糊集合用于空间滤波时,基本方法是定义一个邻域特性,该特性“截获”滤波器支持检测的本质。
实验
原始图片
灰度反转
im1=imread('jimei.jpg'); %读取原始彩色图像
subplot(1,3,1),imshow(im1);
imshow(im1)
im2=rgb2gray(im1); %获得灰度图
subplot(1,3,2),imshow(im1);
imshow(im2)
im3=255-im2; %灰度反转
subplot(1,3,3),imshow(im1);
imshow(im3)
对数变换
clear all
clc
I=imread('jimei.jpg');
I1=im2double(I);%对数运算涉及小数,需将图片转为double ,相当于图片像素值除以255
subplot(1,2,1);
imshow(I1);
title('原图像');
L=log(I1*255+1)/log(256)*255;% I1*255得到图像原始的像素值,再进行对数运算 得到增强后的图像像素值
L1=uint8(L);
subplot(1,2,2);
imshow(L1);
title('经对数变换的图像');
直方图均衡
I = imread('jimei.jpg');
figure, subplot(2,2,1), imshow(I), title('原图')
subplot(2,2,2), imhist(I), title('原图的直方图') % 显示直方图
I_eq = histeq(I, 256);
subplot(2,2,3), imshow(I_eq), title('均衡化的图')
subplot(2,2,4), imhist(I_eq), title('均衡化后的直方图')% 使用histeq进行直方图均衡化
直方图匹配
clc;
I=imread('jimei.jpg');
Imatch=imread('jimei2.jpg');
Jmatch=imhist(Imatch);%获取期望图像的
Iout=histeq(I,Jmatch);%直方图匹配
figure
subplot(1,3,1),imshow(I);
title('原始图像');
subplot(1,3,2),imshow(Imatch);
title('期望图像');
subplot(1,3,3),imshow(Iout);
title('输出图像');
figure
subplot(3,1,1),imhist(I);
title('原始图像直方图');
subplot(3,1,2),imhist(Imatch);
title('期望图像直方图');
subplot(3,1,3),imhist(Iout);
title('输出图像直方图');
均值滤波
clear all;
clc;
I = imread('jimei.jpg'); % 读取图像
I = rgb2gray(I); % 转换为灰度图像
% 定义均值滤波器
h = ones(3,3) / 9; % 3x3的均值滤波器
J = imfilter(I, h); % 应用滤波器
% 显示原始图像和滤波后的图像
subplot(1,2,1), imshow(I), title('初始图像');
subplot(1,2,2), imshow(J), title('均值滤波后的图像');
中值滤波
I = rgb2gray(imread('jimei.jpg')); %medfilt2函数用于二维中值滤波,需先灰度处理
I_1 = imnoise(I,'salt & pepper',0.05); %对图像添加椒盐噪声
J = medfilt2(I_1,[3 3]); %取3×3大小掩模,对噪声图像进行中值滤波
subplot(1,3,1),imshow(I),title('原图像');
subplot(1,3,2),imshow(I_1),title('添加噪声图像');
subplot(1,3,3),imshow(J),title('中值滤波处理后图像');
拉普拉斯算子锐化
f = rgb2gray(imread('jimei.jpg'));
figure;
subplot(1,2,1),imshow(f),title('原始图像');
w = fspecial('laplacian',0);
g = imfilter(f,w,'replicate');
subplot(1,2,2),imshow(g),title('锐化图像');
sobel算子
I=imread('jimei.jpg');
I=rgb2gray(I);
I=im2double(I);
[J,thresh]=edge(I,'sobel',[],'both');%sobel算子
figure;
subplot(1,2,1),imshow(I),title('原始图像');
subplot(1,2,2),imshow(J),title('sobel算子');