图像增强

一.介绍

图像增强是一类基本的图像处理技术,其目的是对输入图像进行加工,突出图像中的某些信息,削弱或消除某些不需要的信息,以得到对于具体应用来说视觉效果更好、更有用的图像,或转换成一种更适合人或机器进行分析和处理的视觉形式。

图像增强主要有两个作用:第一点是改善图像的视觉效果,提高图像的清晰度;第二点是将图像转换成一种更适合于人或机器分析和处理的数据形式。

但是需要注意,在图像增强的过程中,并没有增加新的信息,只是通过压制一部分信息来突出另一部分信息而已。

图像增强方法从增强的作用域出发,可分为空间域增强和频率域增强两大类。

二.直接灰度映射

图像是由像素组成的,其视觉效果与每个像素的灰度取值直接相关。如果能改变所有或部分像素的灰度值,我们就可以改变图像的视觉效果。

直接灰度映射的关键是根据具体的增强需求来设计所需的映射规则(或者称为变换函数)

灰度映射分为线性变换和非线性变换两种类型。

1.线性变换

常见的线性变换方法包括:统一线性变换与分段线性变换。

统一线性变换包括:拓展动态范围、改变取值区间、缩小动态范围、取反(反转);

分段线性变换包括:拓展感兴趣的部分,牺牲其他部分;拓展感兴趣的部分,压缩其他部分(有扩有压)。

这里选取统一线性变化中的取反和分段线性变换中的有扩有压进行演示。

参考代码:

clear;                                     
image_input = imread('lena.bmp');
fh_input = figure('NumberTitle','off','Name','杈撳叆鍥惧儚','MenuBar','none');
ah_input = axes( 'Parent',fh_input);
imshow(image_input, 'Parent',ah_input,'Border','tight');
[row, co1,~] = size(image_input);
a = 20;b = 40;c = 10; d = 70;M = 255;N = 255;
reverse_image = imsubtract(uint8(255 * ones([row, co1])), image_input);
fh_reverse = figure('NumberTitle','off','Name','鍥惧儚鍙栧弽','MenuBar','none');
ah_reverse = axes('Parent', fh_reverse);
imshow(reverse_image, [], 'Border', 'tight');
expansion_compression_image = zeros([row, co1]);
temp_index_1 = (image_input <a);
expansion_compression_image(temp_index_1)= (c / a) * image_input(temp_index_1);
temp_index_2 = (image_input >= a & image_input <= b);
expansion_compression_image(temp_index_2) = c +((d - c) / (b - a))* (image_input(temp_index_2)- a);
temp_index_3 = (image_input >= b & image_input <= M);
expansion_compression_image(temp_index_3) = d + ((N - d) / (M - b))* (image_input(temp_index_3)-b);
fh_expansion_compression = figure('NumberTitle','off','Name','鏈夋墿鏈夊帇','MenuBar','none');
ah_expansion_compression = axes('Parent', fh_expansion_compression);
imshow(expansion_compression_image, 'DisplayRange', [],'Border','tight', 'Parent', ah_expansion_compression);

图像如下:

image-rvkb.png2.非线性变换

常用的非线性变换方法包括:指数变换与对数变换。

对数变换:

对数变换的一般表达式为:

image-vddg.png其中λ为一个调节常数,用它来调节变换后的灰度值,使其符合实际要求。 对数变换的作用是扩展图像的低灰度范围, 同时压缩高灰度范围,使得图像的灰度分布均匀,这与人的视觉特性是相匹配的。

参考代码:

clear all:
image =imread('lena.bmp');
figure('NumberTitle','off','Name','鍘熷鍥惧儚','MenuBar','none');
imshow(image, 'Border', 'tight');
fft_image = abs(fftshift(fft2(image)));
figure('NumberTitle','off','Name','鍥惧儚鐨勫倕閲屽彾璋�','MenuBar','none');
imshow(fft_image, [], 'Border', 'tight' );
lambda = 1;
fft_image_log = lambda * log(1 + fft_image);
figure('NumberTitle','off','Name','瀵规暟鍙樻崲鍚庣殑鍌呴噷鍙惰氨','MenuBar','none');
imshow(fft_image_log, [], 'Border','tight');

图像如下:

image-cnli.png指数变换:

与对数变换的效果相反,指数变换的作用在于扩展高灰度范 围的同时压缩低灰度范围,其一般表达形式为:

image-eiyd.png其中,λ和γ为常数,为了避免出现底数等于0的情形,引入了偏移量,γ的取值对于变换函数特性的影响较大,当γ<1时,变换过程将图像的灰度向高亮度部分映射,当γ>1时,向低亮度部分映射,当γ=1时,相当于正比变换。

参考代码:

clear all:
image = double(imread('lena.bmp'));
figure('NumberTitle','off','Name','鍘熷鍥惧儚','MenuBar','none');
imshow(uint8(image), 'Border', 'tight');
new_image = (image + eps) .^0.7;
figure('NumberTitle','off','Name', '纬=0.7鏃剁殑鍙樻崲缁撴灉','MenuBar','none');
imshow(new_image, [], 'Border', 'tight');
new_image = (image + eps) .^1.7;
figure('NumberTitle','off','Name','纬=1.7鏃剁殑鍙樻崲缁撴灉','MenuBar','none');
imshow(new_image, [], 'Border', 'tight');

结果图像如下:

image-wjob.png三.直方图变换

基于直方图变换的增强方法以概率论为基础,常用的方法有直方图均衡化及直方图规定化。

1.直方图均衡化

直方图均衡化主要用于增强动态范围较小的图像的灰度反差,该方法的基本思想是把原始图像的直方图变换为均匀分布的形式,这样就增加了像素灰度值的动态范围,从而达到增强图像整体对比度的目的。

在这里是在网络上找到的直方图均衡化的计算过程:

image-hifc.png例如,设有一幅大小为64×64,所含灰度级为{1,2,3,4,5,6,7} ,要求对其进行直方图均衡化,并给出灰度变换关系和变换后的直方图。

image-fbyi.png在这里直接给出计算过程:

image-arbh.png

在这之后我们在MATLAB里面查看输入图像的直方图:

参考代码:

clear all;
x=(0 :1:7);
y =[0.19,0.25,0.21,0.16,0.08,0.06,0.03,0.02];
fh = figure('Color','w','NumberTitle','off','Name','杈撳叆鍥惧儚鐨勭洿鏂瑰浘');
ah = axes('YLim',[0, max(y) + 0.05]);
hold(ah, 'on');
bar(ah, x, y);
h = findobj(ah, 'Type', 'patch');
set (h, 'FaceColor','b','EdgeColor','b');
box(ah, 'on');
text(x, y + 0.01, {'0.19','0.25','0.21','0.16','0.08','0.06','0.03',...
'0.02'},  'HorizontalAlignment','center','Color','b','FontSize',12,'FontWeight','bold');
m = getframe(fh);
[c, d] = frame2im(m);
imwrite(c,'杈撳叆鍥惧儚鐨勭洿鏂瑰浘.tif' );

演示图像如下:

image-jtur.png

变换后图像灰度级的出现次数并非严格均匀,这是由于数字图像灰度取值的离散性,导致经由四舍五入操作后的灰度值出现了归并现象,因此变换后的直方图并非完全均匀分布,但相比于原直方图要平坦得多。

2.直方图规定化

直方图均衡化的优点是能自动地增强整个图像的对比度,但它的具体增强效果却不易控制,处理的结果总是得到全局优化的直方图。实际中有时需要变换直方图使之成为某个需要的形状,从而有选择地增强某个灰度值范围内的对比度或使图像灰度值的分布满足特定的要求。这时可以采用比较灵活的直方图规定化方法。

在这里给出直方图规定化的计算方法:

image-rvii.png

经直方图规定化变换后的图像的直方图(称为匹配直方图),并非完全与规定直方图相同,但相比于原直方图,匹配直方图要更接近于规定直方图。

四.空域滤波

利用像素本身及其邻域像素的灰度关系进行增强的方法称为空域滤波,空域滤波根据其特点可分成线性滤波和非线性滤波两大类。

1.线性滤波

邻域(局部)平均法:

2.非线性滤波

非线性滤波也是基于邻域操作的,它也是采用模板在图像中漫游的方式来求取模板中心点所对应像素位置的输出响应的,其跟线性滤波的不同之处在于:第一,线性滤波的执行机制为先计算乘积然后求和,而非线性滤波的执行机制为对邻域内的像 素执行非线性操作。例如,令每个中心点处的响应等于其所在邻域的最大像素值的操作即为一种非线性滤波操作;第二,模板的概念在非线性处理中不是那么普遍。滤波的概念仍然存在,但“滤波器”应视为对一个邻域的像素进行操作的非线性函数,其相应即构成非线性响应的结果。

中值滤波:

五.频域滤波

频域增强原理:在频域空间内,图像的信息表现为不同频率分量的组合。如果能让某个范围内的分量或某些频率的分量受到抑制而让其他分量不受影响,就可以改变输出图像的频率分布,进而达到不同的增强目的。