图像空域增强
图像直接灰度变换
图像直接灰度变换是将原图像的灰度经过一个变换函数转换为一个新的灰度,即 g ( x , y ) = T [ f ( x , y ) ] g(x,y)=T[f(x,y)] g(x,y)=T[f(x,y)]。根据变换函数的形式,直接灰度变换又可分为线性变换和非线性变换。
线性变换
截取式线性变换
函数图像:
分段式线性变换
函数图像如下:
J=imadjust(I);
J=imadjust(I,[low,high],[bottom,top]);
J=imadjust(I,[low,high],[bottom,top]);
函数各参数含义:
I:该参数表示待转换的图像;
J:该参数表示转换后的图像;
[low,high]:该参数表示图像指定的输入灰度范围
[bottom,top]:该参数表示图像指定的输出灰度范围;
gamma:描述图像I和J之间变换函数的性质,gamma=1表示线性变换,gamma<1或gamma>1表示非线性转换。
例题:
%example3_1.m%
clc;clear all;close all;
I = imread('pout.tif'); %读入图像pout.tif
%对图像指定输入灰度范围为[0.3 0.6],也可以用stretchlim()函数获取最佳的输入区间。
%其中第三个参数[0 1]可以省略,即默认为映射到0~255
J = imadjust(I,[0.3 0.6],[0 1]);
imshow(I) %显示原图像pout.tif
figure, imshow(J);%显示调整灰度范围后的图像
figure
imhist(I);
解析:用imhist()函数可以看出,图像的灰度值主要集中在75-150之间,因此该图像比较模糊,如果将位于75-150之间的灰度值均匀地分布在0-255之间,图像将更加清晰。同时将小于75的灰度值赋值为0,将大于150的灰度值赋值为255。可以看出,调整后的图像对原图像灰度范围[75/255,150/255]即[0.3,0.6]的灰度进行了拉伸,所以更加清晰。另外还可以加入参数gamma,如果gamma大于1,将加强暗色值的输出;如果gamma小于1,将加强亮色值的输出。
图像反转
图像反转是典型的灰度线性变换,这种处理对增强嵌入在暗背景中的白色或灰色细节特别有效,尤其当图像中黑色为主要部分时效果明显。
函数 g ( x , y ) = ( L − 1 ) − f ( x , y ) g(x,y)=(L-1)-f(x,y) g(x,y)=(L−1)−f(x,y)能够进行图像的反转,可以通过函数imcomplement()实现,它将灰度值为0的像素值转换为255,将灰度值为255的像素值转换为0,将灰度值为x的像素值转换为255-x,此函数能够增强暗色背景下的白色或灰色细节信息。
J=imcomplement(I);
当然用255-I也可以实现图像对的反转。
非线性变换
常见的非线性变换如下:
对数(log),反对数(Inverse log),n次幂(nth power),n次方根(nth root)函数等。
其中,对数形式为
g
(
x
,
y
)
=
C
∗
l
o
g
(
1
+
∣
f
(
x
,
y
)
∣
)
g(x,y)=C*log(1+|f(x,y)|)
g(x,y)=C∗log(1+∣f(x,y)∣),可以实现动态范围压缩,即实现低灰度范围得到扩展,高灰度范围得到压缩。
图像直方图均衡
图像灰度直方图均衡化可以使得图像的对比度增大,加大图像动态范围,扩展图像对比度,使得图像清晰,特征明显。
直方图规定化的含义:变换直方图使之成为某个特定的形状,即有选择的增强某个灰度值范围内的对比度。规定化只是增强了整幅图像的对比度,不一定适合人的视觉。
直方图规定化采用灵活的规定化的方法,正确选择规定化的函数,就可获得比直方图均衡化更好的结果。
数字图像均衡化算法
1、统计原始灰度级k;
2、统计
n
k
n_k
nk;
3、计算
n
k
/
N
n_k/N
nk/N;
4、累计直方图
s
k
s_k
sk;
5、
k
′
=
i
n
t
[
(
L
−
1
)
s
k
+
0.5
]
k'=int[(L-1)s_k+0.5]
k′=int[(L−1)sk+0.5]
6、映射关系
k
−
>
k
′
k->k'
k−>k′;
7、均衡化后的图像;
8、均衡后的
n
k
/
N
n_k/N
nk/N
function myHisteq()
I = imread('Lena01.bmp');
figure(1)
subplot(2,2,1)
imshow(I)
title('原始图像')
subplot(2,2,2)
imhist(I)
title('原始图像直方图') %显示原始图像
%进行像素灰度统计;
[height,width] = size(I); %确定矩阵I的大小即原图像的行和列
nk = zeros(1,256); %统计各灰度数目,共256
for i = 1:height
for j = 1: width
nk(I(i,j)+1)=nk(I(i,j)+1)+1; %对应灰度值像素点数量增加一
end
end
%计算灰度分布密度
% pk = zeros(1,256);
pk=nk./(height*width);
%计算累计直方图分布
sk = zeros(1,256);
sk(1) = pk(1);
for i = 2:256
sk(i) = sk(i - 1) + pk(i);
end
%累计分布取整,将其数值归一化为0~255
% kt=zeros(1,256);
%kt = uint8(floor(255 .* sk + 0.5);
kt = uint8(255 .* sk);
%对图像进行均衡化
F=zeros(size(I));
for i = 1:height
for j = 1: width
% I(i,j) = c(I(i,j)+1);
F(i,j) = kt(I(i,j)+1);
end
end
F=uint8(F);
subplot(2,2,3)
imshow(F)
title('均衡后的图像')
subplot(2,2,4)
imhist(F)
title('均衡后图像直方图') %显示均衡后的图像及其均衡后图像直方图
% histeq();
end
也可以使用matlab自带的函数实现直方图均衡化histeq()。
参考文献
陈刚等. MATLAB在数字图像处理中的应用. 清华大学出版社,2016.