实验总体思路:
原图像是人体骨骼核扫描图像,我们的目的是通过图像锐化突出骨骼的更多细节来增强图像。由于图像灰度的动态范围很窄并且有很高的噪声内容,所以很难对其进行增强。对此我们采取的策略是,首先用拉普拉斯法突出图像中的小细节,然后用梯度法突出其边。平滑过的梯度图像将用于掩蔽拉普拉斯图像。最后,我们将试图试用灰度变换来增强图像的灰度动态范围。
即:
具体的实现代码如下(博主辛苦之作哦):
% 骨骼图像增强
clear all;clc;
im=imread('D:\image\Body.jpg');
im = im2double(im);
im=rgb2gray(im);
%---原始图像
subplot(2,4,1);
imshow(im);
title('1:原始图像');
%---为图2,使用模板为[-1,-1,-1;-1,8,-1;-1,-1,-1]的滤波器对原图像进行拉普拉斯操作,为了便于显示,对图像进行了标定,这一步先对图像进行初步的锐化滤波。
subplot(2,4,2);
h =[-1,-1,-1;-1,8,-1;-1,-1,-1];
im1 =imfilter(im,h);
imshow(im1);
title('2:拉普拉斯操作后图像');
%---图3,由于使用的模板如上,让常数c=1,简单的将原图和图2相加就可以得到一幅经过锐化过的图像。
subplot(2,4,3);
im2=im+im1;
imshow(im2)
title('3:1图和2图相加后图像');
%---图4,对原图像试用Sobel梯度操作,分量gx为[-1,-2,-1;0,0,0;1,2,1],而分量gy为[-1,0,1;-2,0,2;-1,0,1]的模板。
subplot(2,4,4);
hx=[-1,-2,-1;0,0,0;1,2,1]; %生产sobel垂直梯度模板
hy=[-1,0,1;-2,0,2;-1,0,1]; %生产sobel水平梯度模板
gradx=filter2(hx,im,'same');
gradx=abs(gradx); %计算图像的sobel垂直梯度
grady=filter2(hy,im,'same');
grady=abs(grady); %计算图像的sobel水平梯度
im3=gradx+grady; %得到图像的sobel梯度
imshow(im3,[]);
title('4:1图sobel梯度处理后图像');
% ---图5,使用大小为5*5的一个均值滤波器得到平滑后的Sobel梯度图像。
subplot(2,4,5);
h1 = fspecial('average',5) ;
im4 = imfilter(im3,h1);
imshow(im4);
title('5:使用5*5均值滤波器平滑后的sobel图像');
% --图6,将拉普拉斯图像(即图3)与平滑后的梯度图像(即图5)进行点乘。
subplot(2,4,6);
% im5=immultiply(im2,im4);
im5=im2.*im4;
imshow(im5);
title('6:3图和5图相乘相乘的掩蔽图像');
% --图7,将乘积图像(即图6)与原图像相加就产生一幅需要的锐化图像。
subplot(2,4,7);
im6=im+im5;
imshow(im6);
title('7:1图和6图求和得到的锐化图像');
% --图8,我们希望扩展灰度范围,对图7进行幂率变换处理,r=0.5,c=1,然后即可对图像进行幂率变换
subplot(2,4,8);
gamma=0.5;
c=1;
im7=c.*im6.^gamma;
imshow(im7);
title('8:图7进行幂率变换后的最终图像');
1、 此为图2,使用模板为[-1,-1,-1;-1,8,-1;-1,-1,-1]的滤波器对原图像进行拉普拉斯操作,为了便于显示,对图像进行了标定,这一步先对图像进行初步的锐化滤波。
2、 此为图3,由于使用的模板如上,让常数c=1,简单的将原图和图2相加就可以得到一幅经过锐化过的图像。
(而这个时候看到图2的噪声水平,将图1和图2相加之后也必然会有很多的噪声。拉普拉斯操作作为一种二阶微分算子,能很好的增强细节,但也产生更多的噪声。
而降低噪声的一种方法就是使用中值滤波器,但属于非线性滤波器的中值滤波器有可能改变图像的性质,所以不可取。所以采取另一种方法,使用原图像梯度操作的平滑形式所形成的一个模板。)
3、 此为图4,对原图像试用Sobel梯度操作,分量gx为[-1,-2,-1;0,0,0;1,2,1],而分量gy为[-1,0,1;-2,0,2;-1,0,1]的模板。
(梯度变换在灰度斜坡或台阶的平均相应要比拉普拉斯操作的更强烈,而对噪声和小细节的响应要比拉普拉斯操作的相应弱,而且可以通过均值滤波器对其进行平滑处理可以进一步降低, 此时看图像中的边缘要比拉普拉斯图像(即图3)中的边缘要突出许多)
4、 此为图5,使用大小为5*5的一个均值滤波器得到平滑后的Sobel梯度图像。
(图4,5要比图2亮表明具有重要边缘内容的梯度图像的值一般要比拉普拉斯图像的值高)
5、 此为图6,将拉普拉斯图像(即图3)与平滑后的梯度图像(即图5)进行点乘。
(此时看到强边缘的优势和可见噪声的相对减少,用平滑后的梯度图像来掩蔽拉普拉斯图像的目的达到了)
6、 此为图7,将乘积图像(即图6)与原图像相加就产生一幅需要的锐化图像。
(与原图像相比,该图像中大部分细节的清晰度的增加都很明显,所以我们才需要综合多种的方法对图像进行处理,单独使用一种方法根本不可能达到这么好的效果,只需要看相对应的图像进行对比即可知道)
7、 此为图8,我们希望扩展灰度范围,对图7进行幂率变换处理,r=0.5,c=1,然后即可对图像进行幂率变换
(此时需要增大锐化后图像的动态范围,即使有很多种这样效果的灰度变换函数,但是用幂率变换处理更好,直方图均衡和规定化的效果都不太好)
(此时人体的轮廓的清晰度虽然还是不高,因为扩大的灰度动态范围的同时也增大了噪声,但是相比原图还是有相当大幅度的提高的,看下图原图与最终图像对比)