资源描述:
《基于高频强调滤波和直方图均衡化的医学图像增强》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、基于高频强调滤波和直方图均衡化的医学图像增强现代医学非常发达,能通过各种手段来获取人体的各种信息,例如,X光可以拍摄人的骨头等图片。但是,这些图片效果不一定很好,所以在使用着大量的数字成像和数字图片处理设备。那么,现在,我用Matlab这个软件对一幅胸透图片进行处理,获得更好的效果。本次软件处理实验方法是:利用高通滤波器削弱傅里叶变换的低频而保持高频相对不变点,这样会突出图像的边缘和细节,使得图像边缘更加清晰。但是由于高通滤波器偏离了直流分分量,从而把图像的平均值降低到了0,。一种补偿方法是给高通滤波器加上一个偏移量。若偏移量与滤波器乘以一个大于1的常数结合,则这种方法就称为高频
2、强调滤波,因为该常量乘数突出了高频部分。这个乘数同时增加了低频部分的幅度,但是只要偏移量与被乘数比较小,低频增强的影响就弱于高频增强的影响。一、数学分析Hhfe0/,v)=6f+/?xH/jp(M,v)其中,a是偏移量,b是乘数,是高通滤波器的传递函数该常量乘数突出了高频部分。这个乘数同时增加了低频部分的幅度,但是只要偏移量与被乘数比较小,低频增强的影响就弱于高频增强的影响。二、Matlab代码编写主函数代码:%%%%%%clcclearf=imread('Xrayl.png');subplot(2,2,1);imshow(f)title(1原始图像1)%%%对图像进行填充PQ=
3、paddedsize(size(f));%%%高通滤波器D0=0.05*PQ(l);HBW=hpfilter('btw*,PQ(1),PQ(2),D0,2);gbw=dftfilt(f,HBW);gbw=uint8(gbw);subplot(2,2,2);imshow(gbw)title(1巴特沃兹滤波后的图像1)%%%高通强调滤波H=0.5+2*HBW;ghf=dftfilt(f,H);ghf=uint8(ghf);subplot(2,2,3)imshow(ghf)title(*强调高通滤波后的图像1)%%%对高频强调滤波后罔像进行直方图均衡化ghe=histeq(ghf,25
4、6);ghe=uint8(ghe);subplot(2,2,4);imshow(ghe)title(*白:方均衡化图像•)各函数代码:1.PQ=paddedsize(AB,CD,PARAM)对阁像进行补充,以便形成的方形人小等于最小接近的2的整数次幂。functionPQ=paddedsize(AB,CD,PARAM)ifnargin==lPQ=2*AB;elseifnargin==2&〜ischar(CD)PQ=AB+CD-1;PQ=2*ceil(PQ/2);elseifnargin==2m=max(AB);P=z^nextpower(2*m);PQ=[P,P];elseifn
5、argin==3m=max([AB,CD]);P=2^nextpower(2*m);PQ=[P,P];elseerror(1Wrongnumberinputs.1)end2.g=dftfilt(f,H)接受输入阁像f和一个滤波器函数,川‘以处理所有滤波器细节并输出经过滤波和剪切P的图像g。functiong=dftfilt(f,H)Hl=zeros(size(H,1),size(H,2),3);Hl(:z:Z1)=H;Hl(:z:,2)=H;Hl(:z:Z3)=H;F=fft2(f,size(H,1)zsize(Hz2));g=real(ifft2(F.*H1));g=g(1:s
6、ize(f,1),l:size(f,2));3.function[U,V]=dftuv(M,N)提供距离计算及其他应用所需的网格数。function[U,V]=dftuv(M,N);u=0:M-1;v=0:N-1;idx=find(u〉M/2);u(idx)=u(idx)-M;idy=find(v>N/2);v(idy)=v(idy)-N;[V,U]=meshgrid(v,u);4.function[H,D]=lpfiIter(type,M,N,DO,n)实现低通滤波波。function[H,D]=lpfilter(type,M,N,DO,n)[U,V]=dftuv(MzN);D
7、=sqrt(U,2+V,2);switchtypecase'ideal'H=double(D<=D0);case'btw*ifnargin==4n=lendH=l./(1+(D./DO).人(2*n));case*gaussian'H=exp(-(D.^2)./(2*(D0x2)));otherwiseerror('UNknownfiltertype.1)end5.实现高通滤波。functionH=hpfilter(type,M,N,DO,n)ifnargin==4n=l;end