数字图像处理实验报告灰度变换与空间滤波附带程序不看后悔.docx
《数字图像处理实验报告灰度变换与空间滤波附带程序不看后悔.docx》由会员分享,可在线阅读,更多相关《数字图像处理实验报告灰度变换与空间滤波附带程序不看后悔.docx(20页珍藏版)》请在冰豆网上搜索。
数字图像处理实验报告灰度变换与空间滤波附带程序不看后悔
1.灰度变换与空间滤波
一种成熟的医学技术被用于检测电子显微镜生成的某类图像。
为简化检测任务,技术决定采用数字图像处理技术。
发现了如下问题:
(1)明亮且孤立的点是不感兴趣的点;
(2)清晰度不够,特别是边缘区域不明显;(3)一些图像的对比度不够;(4)技术人员发现某些关键的信息只在灰度值为I1-I2的范围,因此,技术人员想保留I1-I2区间范围的图像,将其余灰度值显示为黑色。
(5)将处理后的I1-I2范围内的图像,线性扩展到0-255灰度,以适应于液晶显示器的显示。
请结合本章的数字图像处理处理,帮助技术人员解决这些问题。
1.1问题分析及多种方法提出
(1)明亮且孤立的点是不够感兴趣的点
对于明亮且孤立的点,其应为脉冲且灰度值为255(uint8)噪声,即盐噪声,为此,首先对下载的细胞图像增加盐噪声,再选择不同滤波方式进行滤除。
均值滤波:
均值滤波是典型的线性滤波算法,它是指在图像上对目标像素给一个模板,该模板包括了其周围的临近像素(以目标像素为中心的周围8个像素,构成一个滤波模板,即去掉目标像素本身),再用模板中的全体像素的平均值来代替原来像素值。
优点:
速度快,实现简单;
缺点:
均值滤波本身存在着固有的缺陷,即它不能很好地保护图像细节,在图像去噪的同时也破坏了图像的细节部分,从而使图像变得模糊,不能很好地去除噪声点。
其公式如下:
使用矩阵表示该滤波器则为:
中值滤波:
滤除盐噪声首选的方法应为中值滤波,中值滤波法是一种非线性平滑技术,它将每一像素点的灰度值设置为该点某邻域窗口内的所有像素点灰度值的中值。
其过程为:
a、存储像素1,像素2像素9的值;
b、对像素值进行排序操作;
c、像素5的值即为数组排序后的中值。
优点:
由于中值滤波本身为一种利用统计排序方法进行的非线性滤波方法,故可以滤除在排列矩阵两边分布的脉冲噪声,并较好的保留图像的细节信息。
缺点:
当噪声密度较大时,使用中值滤波后,仍然会有较多的噪声点出现。
自适应中值滤波:
自适应的中值滤波器也需要一个矩形的窗口Sxy,和常规中值滤波器不同的是这个窗口的大小会在滤波处理的过程中进行改变(增大)。
需要注意的是,滤波器的输出是一个像素值,该值用来替换点(x,y)处的像素值,点(x,y)是滤波窗口的中心位置。
其涉及到以下几个参数:
其计算过程如下:
常规的中值滤波器,在噪声的密度不是很大的情况下(根据经验,噪声的出现的概率小于0.2),效果不错。
但是当概率出现的概率较高时,常规的中值滤波处理后,仍然具有噪声点,并丢失了细节和边缘,效果不是很好。
优点:
自适应滤波器不但能够滤除概率较大的椒盐噪声,而且能够更好的保护图像的细节,这是常规的中值滤波器做不到的。
缺点:
实现复杂,运行时间长。
2)图像本身清晰度不够,特别是边缘区域不够明显
对于图像清晰度不够,边缘区域不够明显的情况,应考虑使用图像锐化算法对图像边缘区域进行增强,以强调图像的边缘与细节。
为验证强调图像边缘与细节的最佳算法,我主要运用了拉普拉斯算子,sobel算子,prewitt算子,roberts算子对图像边缘进行了增强。
3)一些图像的对比度不够
当图片自身对比对不够时,应使用对比度增强的方法对图像进行对比度增
直方图均衡化:
直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。
直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。
直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
优点:
对于背景和前景都太亮或者太暗的图像非常有用,且计算量不大。
缺点:
变换后图像的灰度级减少,某些细节消失;某些图像,如直方图有高
峰,经处理后对比度不自然的过分增强。
灰度分段线性变换:
分段线性变换函数可以增强原图各部分的反差,即增强输入图像中感兴趣的灰度区域,相对抑制那些不感兴趣的灰度区域。
优点:
形式可以任意合成,增强输入图像中感兴趣的灰度区域,相对抑制那些不感兴趣的灰度区域。
缺点:
是需要更多的用户输入。
技术人员想保留I1-I2区间范围的图像,将其余灰度值显示为黑色。
应提取目标区域的灰度值特性,将图像进行二值化,即可保留范围在I1-I2区间范围的图像,将其余灰度值显示为黑色。
(5)将处理后的I1-I2范围内的图像,线性扩展到0-255灰度,以适
应于液晶显示器的显示
使用灰度线性拉伸的方法,将图像由I1-I2范围内线性扩展到0-255灰度。
1.2处理结果
图1增加盐噪声的原始细胞图像
在网上下载了一张细胞图像,并对其加了盐噪声,模拟题目中所要求的明亮且孤立的点。
为了验证可滤除明亮且孤立的点的最佳方法,我选取了高斯滤波、均值滤波、中值滤波、自适应中值滤波,并使用MATLAB编写了函数代码(非直接使用MATLAB自带函数程序),对原始图像进行了处理,处理结果如上图所示。
高斯滤波几乎对噪声没有作用,故高斯滤波并不适合去除明亮且孤立的点;使用均值滤波可以使原有噪声变得不那么“明亮”(求了平均值,故白色噪声灰度值减小),但也牺牲了图片本身的清晰度,故均值滤波效果一般;使用中值滤波可以使用矩阵内中值代替灰度值极大或极小的点,大部分孤立且明亮的点均被滤除,故中值滤波处理效果较优,但中值滤波模板大小固定并不利于取得最佳结果(模板太小,不能有效滤除全部噪声;模板太大,运算时间变慢,图像细节信息减少);使用自适应中值滤波可以很好的弥补中值滤波自身的缺点,自适应中值滤波使用噪声敏感度判断所需模板大小,由处理结果可以看出,与中值滤波相比,自适应中值滤波所得结果边界更清晰,图像细节信息更丰富,故自适应中值滤波法对明亮且孤立的点处理效果最优。
图2采用不同滤波方法滤除明亮孤立的点
图3原图与直方图均衡化后的直方图
上图为原图像与使用直方图均衡化(64)后的结果,可以看出,直方图均衡化后图像的灰度信息更丰富。
图4对原图进行对比度增强的结果
上图为采用直方图均衡化与灰度线性拉伸进行对比度增强的结果。
其中,灰
度线性拉伸算法是自己编写的。
采用直方图均衡化后,细菌与背景可以很好的分离开,但是背景也因此变得杂乱,不符合人眼的观察习惯,故直方图均衡化对于对比度增强效果一般;采用灰度线性拉伸法时,由于背景灰度值约为230上下,细菌灰度值约为150上下,因此选择以170,230为拐点对原图进行灰度线性拉
伸,如图整幅图像的对比度得到了有效提升,且背景干净均匀,与原图像除对比度外无较大差异,故使用灰度线性拉伸法进行对比度增强最优。
图5使用不同算子对边缘进行增强
图5为使用不同算子对边缘进行增强的结果,由图可以看出,prewitt算子对边缘增强的效果最优。
图6图7分别是二值化的结果与灰度线性扩展的结果。
图6二值化的结果
图7线性扩展
clear;clc;closeall;
%读入一副白细胞图像并将其转为灰度图像
path1='白细胞.jpg';img=imread(path1);img=rgb2gray(img);
%为图像加上盐噪声,模拟孤立且明亮的点img=imnoise(img,'salt&pepper',0.1);
[M,N]=size(img);
fori=1:
M
forj=1:
N
if(img(i,j)==0)img(i,j)=255;
end
end
end
imshow(img),title('原始细胞图像');
%对图像进行高斯滤波g_img=guass_filter(img,[33],0.2);
figure
(2),
imshow(g_img,[]),title('使用高斯滤波进行处理后的结果');
%并未有效滤除图像中孤立明亮的点,说明该算法对盐噪声去除效果差%对图像进行均值滤波
a_img=average_filter(img,5);
figure(3),
imshow(a_img),title('使用均值滤波进行处理后的结果');
%虽然有效去除了孤立明亮的点,但图像的清晰度明显下降,不利于后续的图像分割或者边缘提取等操作
%对图像进行中值滤波
m_img=median_filter(img,5);
figure(4),
imshow(m_img),title('使用中值滤波进行处理后的结果');%对图像进行自适应中值滤波
ad_img=adp_median(img,19);
figure(5),
imshow(ad_img),title('使用自适应中值滤波进行处理后的结果');
average_filter.m
function[img]=average_filter(image,m)
%
%作者:
%日期:
2018.5.29
%均值滤波
%输入:
%image:
原图
%m:
模板的大小3*3的模板,m=3
%输出:
%img:
均值滤波处理后的图像
%Allrightsreserved~
%
if(rem(m,2)==0)
error('parameter2mustbeanoddnumber!
')endn=m;
[height,width]=size(image);
x1=
double(image);
x2=
x1;
fori
=1:
height-n+1
forj
=1:
width-n+1
mb
x1(i:
(i+n-1),j:
(j+n-1));
mb
mb(:
);
mm
=mean(mb);
x2(i+(n-1)/2,j+(n-1)/2)=mm;end
end
imgend
=uint8(x2);
=========================================================gray_linner.m
function[img_gl]=gray_linner(image,fa,fb,ga,gb)
%作者:
%日期:
2018.5.29
%fa;横坐标,即目标灰度区间
%fb;
%
%ga;纵坐标,即拉伸后目标灰度区间
%gb;
%Allrightsreserved~
k1=ga/fa;
k2=(gb-ga)/(fb-fa);
k3=(255-gb)/(255-fb);
%3,求拉伸后灰度值
[row,col]=size(image);
img_gl=zeros(row,col);%默认g为double。
g=f;g为uint8fori=1:
row
forj=1:
colif(0<=image(i,j)&&image(i,j)<=fa)img_gl(i,j)=k1*image(i,j);
elseif(fa<=image(i,j)&&image(i,j)<=fb)img_gl(i,j)=k2*(image(i,j)-fa)+ga;
else
img_gl(i,j)=k3*(image(i,j)-fb)+gb;
end
end
end
img_gl=uint8(img_gl);
end
%
function[img]=guass_filter(image,m,sigma)%
%作者:
%日期:
2018.5.29
%高斯滤波
%输入:
%image:
原图%m:
高斯滤波器尺寸
%输出:
%img:
均值滤波处理后的图像
%sigma:
滤波器的标准差%Allrightsreserved!
%
siz=(m-1)/2;
[x,y]=meshgrid(-siz
(2):
siz
(2),-siz
(1):
siz
(1));
arg=-(x.*x+y.*y)/(2*sigma*sigma);h=exp(arg);
h(h)))=0;
sumh=sum(h(:
));
ifsumh~=0
h=h/sumh;
end;
img=uint8(conv2(double(image),double(h),'same'));end%
siz=(m-1)/2;
[x,y]=meshgrid(-siz
(2):
siz
(2),-siz
(1):
siz
(1));
arg=-(x.*x+y.*y)/(2*sigma*sigma);h=exp(arg);
h(h)))=0;
sumh=sum(h(:
));
ifsumh~=0
h=h/sumh;
end;
img=uint8(conv2(double(image),double(h),'same'));end
functionimg_bw=im_bw(img,min,max)
%IM_BW:
对输入阈值的图像进行二值化处理
%作者:
%日期:
2018.5.28
%img:
输入图像
%min:
灰度值最小值
%max:
灰度值最大值
%Allrightsreserved~img=double(img);if(min>max||max>255||min<0)error('Parameter3(<255)mustbebiggerthanparameter2(>0)!
');end
if(ndims(img)>2)error('Pleaeinputthe2-Dimage!
');
end
[M,N]=size(img);
fori=1:
M
forj=1:
Nif(img(i,j)max)
img(i,j)=0;
end
end
end
img_bw=uint8(img);
end
function[out_img]=sharp_roberts(img)%SHARP_ROBERTS:
使用roberts算子对图像进行锐化处理
%作者:
%日期:
2018.5.29%Roberts斜45°方向模板1:
%010
%00-1
%Roberts斜45°方向模板2:
%000
%00-1
%010
%delta(x,y)的计算:
%delta(x,y)=(dx^2+dy^2)^1/2
%Allrightsreserved~
[M,N]=size(img);img=double(img);
b=zeros(M,N);
c=zeros(M,N);
out_img=img;
fori=1:
M-2
forj=1:
N-2
b(i+1,j+1)=img(i,j)-img(i+1,j+1);c(i+1,j+1)=img(i,j+1)-img(i+1,j);out_img(i+1,j+1)=sqrt(b(i+1,j+1)^2+c(i+1,j+1)^2)+img(i+1,j+1);end
end
out_img=uint8(out_img);
end
function[out_img]=sharp_sobel(img)
%SHARP_SOBEL:
使用sobel算子对图像进行锐化处理
%作者:
%日期:
2018.5.29%Sobel水平方向模板:
%-101%-202
%-101
%Sobel竖直方向模板:
%-1-2-1
%000
%121
%delta(x,y)的计算:
%delta(x,y)=(dx^2+dy^2)^1/2
%Allrightsreserved~img=double(img);[M,N]=size(img);delta=zeros(M,N);
fori=2:
M-1
forj=2:
N-1
dx=-img(i-1,j-1)-2*img(i-1,j)-img(i-1,j+1)+img(i+1,j-
1)+2*img(i+1,j)+img(i+1,j+1);
dy=-img(i-1,j-1)-2*img(i,j-1)-img(i+1,j-1)+img(i-
1,j+1)+2*img(i,j+1)+img(i+1,j+1);
delta(i,j)=sqrt(dx.^2+dy.^2);
end
end
out_img=uint8(img-delta);
end
function[out_img,delta]=sharp_laplace(img,mode)
%SHARP_LAPLACE:
使用拉普拉斯算子对图像进行锐化%mode表示选择4连通域模式,或8连通域模式
%四连通域模板:
%0-10
%-10-1
%0-10
%八连通域模板:
%-1-1-1
%-18-1
%-1-1-1
%时间:
2018.05.29
%作者:
%Allrightsreserved~
if(mode~=4)&&(mode~=8)
error('Parameter2shouldbe4or8!
');
end
img=double(img);
[M,N]=size(img);
delta=zeros(M,N);
fori=2:
M-1
forj=2:
N-1
%4连通域模式
if(mode==4)
delta(i,j)=4*img(i,j)-img(i,j-1)-img(i,j+1)-img(i-1,j)-img(i+1,j);end
%8连通域模式
if(mode==8)delta(i,j)=8*img(i,j)-img(i-1,j-1)-img(i,j-1)-img(i+1,j-1)-img(i,j+1)-img(i-1,j)-img(i+1,j)-img(i-1,j+1)-img(i+1,j+1);
endendendout_img=img+delta;out_img=uint8(out_img);end