《数字图像处理 第3章.ppt》由会员分享,可在线阅读,更多相关《数字图像处理 第3章.ppt(48页珍藏版)》请在三一办公上搜索。
1、3.1 背景知识,第三章 亮度变换与空间滤波,空间域技术直接对图像像素进行操作:g(x,y)=Tf(x,y),3.2 亮度变换函数,s=T(r),3.2.1 imadjust函数,g=imadjust(f,low_in high_in,low_out high_out,gamma),3.2.1 imadjust函数,g=imadjust(f,low_in high_in,low_out high_out,gamma),例3.1:使用函数imadjust,%使用函数 imadjust 目的:突出我们感兴趣的亮度带压缩灰度级的低端并扩展灰度级的高端clcclearf=imread(Fig0303(
2、a)(breast).tif);figureimshow(f)g1=imadjust(f,0,1,1,0);%=imcomplement(f)灰度反转 灰度负片figureimshow(g1)g2=imadjust(f,0.5,0.75,0,1);%突出我们感兴趣的亮度带figureimshow(g2)g3=imadjust(f,2);%压缩灰度级的低端并扩展灰度级的高端figureimshow(g3),3.2.2 对数和对比度拉伸变换,对数变换:gc*log(1+double(f),对比度拉伸:,对比度拉伸的matlab实现:,g1./(1+(m./(double(f)+eps).E),例3
3、.2:使用对数变换减少动态范围,%例3.2 使用对数变换 减小动态范围 经典的阈值函数clcclearf=imread(Fig0305(a)(spectrum).tif);figuresubplot(121),imshow(f),subplot(122),imhist(f),axis tightg=im2uint8(mat2gray(log(1+double(f);figuresubplot(121),imshow(g),title(使用对数变换减小动态范围)subplot(122),imhist(g),axis tight%对比度拉伸变换m=5;E=10;h=im2uint8(mat2gra
4、y(1./(1+(m./(double(f)+eps).E);figuresubplot(121),imshow(h),title(对比度拉伸)subplot(122),imhist(h),axis tight,3.2.3 亮度变换的一些使用M函数,处理可变数量的输入和输出:输入:n=nargin输出:n=nargout亮度变换的第二个M函数:g=changeclass(newclass,f),编写intrans格式化函数:intrans.m,程序略。,例3.3:函数intrans.m的应用,%例3.3 P51 intrans 灰度变换的十项全能函数clcclearf=imread(Fig03
5、06(a)(bone-scan-GE).tif);figureimshow(f)g=intrans(f,stretch,mean2(im2double(f),0.9);figureimshow(g),3.3 直方图处理与函数绘图,:生成并绘制函数的直方图,直方图定义:图像中各灰度级的统计值,,归一化直方图:,Matlab核心函数:h=inhist(f,b),例3.4 计算并绘制图像直方图,f=imread(Fig0303(a)(breast).tif);%读取原图像h=imhist(f);%直方图函数h1=h(1:10:256);horz=1:10:256;,figuresubplot(121
6、),imshow(f),subplot(122),imhist(f)%绘制原图和默认直方图,figure%用bar函数绘制直方图并调整bar(horz,h1)axis(0 255 0 15000)set(gca,xtick,0:50:255)set(gca,ytick,0:2000:15000),figure%用bar函数绘制直方图bar(horz,h1),figurestem(horz,h1,fill)%用stem函数绘制直方图axis(0 255 0 15000)set(gca,xtick,0:50:255)set(gca,ytick,0:2000:15000),figureplot(h)
7、%用plot函数绘制直方图axis(0 255 0 15000)set(gca,xtick,0:50:255)set(gca,ytick,0:2000:15000),:直方图均衡化,对输入图像执行如下变换,得到输出后的灰度级s:,所以输出灰度级的概率密度是均匀的:,使用直方图并调用直方图均衡化技术来处理离散灰度级时,因为变量的离散属性,处理后的图像直方图不再均匀,对应离散的灰度级,均衡变换采用求和方式变为:,直方图均衡化的matlab函数为histeq:g=histeq(f,nlev),例3.5 直方图均衡化,%例3.5 直方图均衡化 默认为64clcclearf=imread(Fig0308
8、(a)(pollen).tif);figure,subplot(121),imshow(f),subplot(122),imhist(f)ylim(auto)g=histeq(f,256);figure,subplot(121),imshow(g),subplot(122),imhist(g)ylim(auto)g=histeq(f,128);figure,subplot(121),imshow(g),subplot(122),imhist(g)ylim(auto)g=histeq(f);%默认为64figure,subplot(121),imshow(g),subplot(122),imhi
9、st(g)ylim(auto)g=histeq(f,8);figure,subplot(121),imshow(g),subplot(122),imhist(g)ylim(auto),:直方图归定化(匹配),已知输入图像灰度级的概率密度函数P(r),输出灰度级的概率密度函数p(z)(给定),则:,得到均衡化后的概率密度函数p(s),定义一个变量z,满足:,综合后得到:,由输入图像得到T(r),只要找到,就可以使用上式得到变换后的灰度级z。Matlab工具箱中可用如下函数实现直方图归定化:g=histeq(f,hspec),例3.6:直方图归定化(匹配),对一幅火星卫星图像,直方图均衡化得不到好
10、的处理效果:,%例3.6 直方图均衡化的缺陷 默认为64clcclearf=imread(Fig0310(a)(Moon Phobos).tif);subplot(121),imshow(f),subplot(122),imhist(f)ylim(auto)g T=histeq(f,256);figure,subplot(121),imshow(g),subplot(122),imhist(g)ylim(auto)g=histeq(f);%默认为64figure,subplot(121),imshow(g),subplot(122),imhist(g)ylim(auto)g=histeq(f,
11、8);figure,subplot(121),imshow(g),subplot(122),imhist(g)ylim(auto)%对应变换x=linspace(0,1,256);figure,plot(x,T)axis(0 1 0 1),采用交互式直方图匹配,首先计算一个已归一化到单位区域的双峰值高斯函数:,function p=twomodegauss(m1,sig1,m2,sig2,A1,A2,k)%TWOMODEGAUSS Generates a two-mode Gaussian function.%P=TWOMODEGAUSS(M1,SIG1,M2,SIG2,A1,A2,K)gen
12、erates a two-mode,%Gaussian-like function in the interval 0,1.P is a 256-element vector normalized%so that SUM(P)equals 1.The mean and standard deviation of the modes are%(M1,SIG1)and(M2,SIG2),respectively.A1 and A2 are the amplitude values of%the two modes.Since the output is normalized,only the re
13、lative%values of A1 and A2 are important.K is an offset value that raises the floor of%the function.A good set of values to try is M1=0.15,S1=0.05,M2=0.75,S2=0.05,%A1=1,A2=0.07,and K=0.002.c1=A1*(1/(2*pi)0.5)*sig1);k1=2*(sig1 2);c2=A2*(1/(2*pi)0.5)*sig2);k2=2*(sig2 2);z=linspace(0,1,256);p=k+c1*exp(
14、-(z-m1).2)./k1)+c2*exp(-(z-m2).2)./k2);p=p./sum(p(:);,从键盘输入交互式信息,绘制高斯函数:,function p=manualhist%A good set of starting values is:(0.15,0.05,0.75,0.05,1,0.07,0.002).%Initialize.repeats=true;quitnow=x;%Compute a default histogram in case the user quits before estimating at least one histogram.p=twomode
15、gauss(0.15,0.05,0.75,0.05,1,0.07,0.002);%Cycle until an x is input.while repeats s=input(Enter m1,sig1,m2,sig2,A1,A2,k OR x to quit:,s);if s=quitnow break end,%Convert the input string to a vector of numerical values and%verify the number of inputs.v=str2num(s);if numel(v)=7 disp(Incorrect number of
16、 inputs)continue end p=twomodegauss(v(1),v(2),v(3),v(4),v(5),v(6),v(7);%Start a new figure and scale the axes.Specifying only xlim%leaves ylim on auto.figure,plot(p)xlim(0 255)end,调用函数,实现直方图归定化(匹配),%例3.6 直方图匹配(交互方式)clcclearf=imread(Fig0310(a)(Moon Phobos).tif);p=manualhist;plot(p)figure,subplot(121)
17、,imshow(f),subplot(122),imhist(f),ylim(auto)g=histeq(f,p);figure,subplot(121),imshow(g),subplot(122),imhist(g),ylim(auto),输入交互参数:0.15,0.05,0.75,0.05,1,0.07,0.002(此处为默认,直接输入x同),得到双峰归定化直方图:,运行后的归定化均衡效果:,3.4 空间滤波,3.4.1 线性空间滤波,线性空间滤波也称为空间卷积运算,选取一适当的滤波模板MN,对图像中的每个像素依次进行卷积运算,其滤波原理如右图所示。,Matlab工具箱采用imfilte
18、r函数来实现线性空间滤波:g=imfilter(f,w,filtering_mode,boundary_options,size_options),在使用预先旋转的滤波器或者对称滤波器时,可以用两种方法实现卷积运算:,第一是采用如下语法实现:G=imfilter(f,w,conv,replicate)第二是采用函数rot90(w,2)将w旋转180度,然后使用函数:imfilter(f,w,replicate)来实现。,例3.7 使用函数imfilter,%imfilter 线性空间滤波(空间卷积)clcclearf=imread(Fig0315(a)(original_test_patter
19、n).tif);f=im2double(f);figureimshow(f),title(原图象)w=ones(31);%设置滤波器,gd=imfilter(f,w);figuresubplot(221),imshow(gd,),title(使用默认零填充的结果)%figure%imshow(gd)gr=imfilter(f,w,replicate);%figuresubplot(222),imshow(gr,),title(选用replicate的结果)gc=imfilter(f,w,symmetric);subplot(223),imshow(gc,),title(选用symmetric的
20、结果)gc=imfilter(f,w,circular);subplot(224),imshow(gc,),title(选用circular的结果)f8=im2uint8(f);%将原图转换为unit8类型gr8=imfilter(f8,w,replicate);%转换为unit8类型后的replicate结果figure,imshow(gr8,),title(转换为unit8类型后的replicate结果),Matlab工具箱中有两个非线性空间滤波函数nlfilter和colfilt。Nlfilter直接执行二维操作,colfilt以列的形式组织数据,且速度较快,在一般的非线性滤波中常用co
21、lfilt函数。语法:g=colfilt(f,m,n,sliding,fun,parameters),3.4.2 非线性空间滤波,Matlab工具箱中有两个非线性空间滤波函数nlfilter和colfilt。Nlfilter直接执行二维操作,colfilt以列的形式组织数据,且速度较快,在一般的非线性滤波中常用colfilt函数。语法:g=colfilt(f,m,n,sliding,fun,parameters),在使用colfilt函数前,必须先用padarray函数执行边界填充:Fp=padarray(f,r c,method,direction),%padarrayclcclearf=1
22、 2 3 4frp=padarray(f,3 2,replicate,post)frb=padarray(f,3 2,replicate,both)%默认bothfrpre=padarray(f,3 2,replicate,pre)fsp=padarray(f,3 2,symmetric,post)fsb=padarray(f,5 6,symmetric,both)%默认bothfspre=padarray(f,3 2,symmetric,pre)fcp=padarray(f,3 2,circular,post)fcb=padarray(f,5 6,circular,both)%默认bothf
23、cpre=padarray(f,3 2,circular,pre),3.5 图像工具箱的标准空间滤波器,3.5.1 线性空间滤波器,生成滤波掩模函数fspecial:w=fspecial(type,parameters),例3.9 使用函数imfilter对月球图像进行滤波,%3.9 fspecial P75 产生各种线性空间滤波器(fspecial+imfilter)clcclearf=imread(Fig0316(a)(moon).tif);figuresubplot(221),imshow(f),title(原图)w=fspecial(laplacian,0);g1=imfilter(f
24、,w,replicate);subplot(222),imshow(g1,),title(拉普拉斯滤波后的unit8图像)f2=im2double(f);%imfinfoMy(f2)g2=imfilter(f2,w,replicate);subplot(223),imshow(g2,),title(拉普拉斯滤波后的double图像)g=f2-g2;subplot(224),imshow(g,),title(增强后的图像,即原图中减去double滤波后的图像)%figure,imshow(g),title(非参数定位滤波后的图像),例3.10 手工指定滤波器和增强技术的比较,%3.10 lapl
25、acianf=imread(Fig0316(a)(moon).tif);figure,imshow(f),title(原图)w4=fspecial(laplacian,0);w8=1 1 1;1-8 1;1 1 1;f=im2double(f);g4=f-imfilter(f,w4,replicate);g8=f-imfilter(f,w8,replicate);figuresubplot(211),imshow(imfilter(f,w4,replicate)title(使用中心为-4的拉普拉斯滤波器增强后的图像)subplot(212),imshow(imfilter(f,w8,repli
26、cate)title(使用中心为-8的拉普拉斯滤波器增强后的图像)figuresubplot(211),imshow(g4),title(使用中心为-4的拉普拉斯滤波器增强后的图像)subplot(212),imshow(g8),title(使用中心为-8的拉普拉斯滤波器增强后的图像),3.5.2 非线性空间滤波器,Matlab工具箱中可以利用函数ordfilt2来生成非线性空间滤波器,其响应基于对图像领域中所包含的像素进行排序,然后使用排序结果确定的值来替代领域中的中心像素值。ordfilt2的语法:g=ordfilt2(f,order,domain)实现大小为mn的最小滤波器,语法为:g=
27、ordfilt2(f,1,ones(m,n)实现大小为mn的最大滤波器,语法为:g=ordfilt2(f,m*n,ones(m,n),数字图像处理中最著名的统计排序滤波器是中值滤波器,使用ordfilt2来创建一个中值滤波器:g=ordfilt2(f,median(1:m*n),ones(m,n),函数median的通用语法:v=median(A,dim)二维中值滤波函数:g=mmedfilt2(f,m,n,padopt),例3.11 使用函数medfilt2进行中值滤波,clcclearf=imread(Fig0318(a)(ckt-board-orig).tif);figuresubplot(221),imshow(f)fn=imnoise(f,salt subplot(224),imshow(gms),