摘要:
现代医学非常发达,能通过各种手段来获取人体的各种信息,例如,X光可以拍摄人的骨头等图片。但是,这些图片效果不一定很好,所以在使用着大量的数字成像和数字图片处理设备。那么,现在,我用Matlab这个软件对一幅胸透图片进行处理,获得更好的效果。
本次软件处理实验方法是:利用高通滤波器削弱傅里叶变换的低频而保持高频相对不变点,这样会突出图像的边缘和细节,使得图像边缘更加清晰。但是由于高通滤波器偏离了直流分分量,从而把图像的平均值降低到了0,。一种补偿方法是给高通滤波器加上一个偏移量。若偏移量与滤波器乘以一个大于1的常数结合,则这种方法就称为高频强调滤波,因为该常量乘数突出了高频部分。这个乘数同时增加了低频部分的幅度,但是只要偏移量与被乘数比较小,低频增强的影响就弱于高频增强的影响。
一、数学分析
其中,a是偏移量,b是乘数,是高通滤波器的传递函数
该常量乘数突出了高频部分。这个乘数同时增加了低频部分的幅度,但是只要偏移量与被乘数比较小,低频增强的影响就弱于高频增强的影响。
二、Matlab代码编写
主函数代码:
%%%%%%
clc
clear
f=imread('Xray1.png');%%%读入图像
subplot(2,2,1);
imshow(f)
title('原始图像')
%%%对图像进行填充
PQ=paddedsize(size(f));
%%%高通滤波器
D0=0.05*PQ(1);
HBW=hpfilter('btw',PQ(1),PQ(2),D0,2);
gbw=dftfilt(f,HBW);
gbw=uint8(gbw);
subplot(2,2,2);
imshow(gbw)
title('巴特沃兹滤波后的图像')
%%%高通强调滤波
H=0.5+2*HBW;
ghf=dftfilt(f,H);
ghf=uint8(ghf);
subplot(2,2,3)
imshow(ghf)
title('强调高通滤波后的图像')
%%%对高频强调滤波后图像进行直方图均衡化
ghe=histeq(ghf,256);
ghe=uint8(ghe);
subplot(2,2,4);
imshow(ghe)
title('直方均衡化图像')
各函数代码:
1.PQ=paddedsize(AB,CD,PARAM)对图像进行补充,以便形成的方形大小等于最小接近的2的整数次幂。
functionPQ=paddedsize(AB,CD,PARAM)
ifnargin==1
PQ=2*AB;
elseifnargin==2&~ischar(CD)
PQ=AB+CD-1;
PQ=2*ceil(PQ/2);
elseifnargin==2
m=max(AB);
P=z^nextpower(2*m);
PQ=[P,P];
elseifnargin==3
m=max([AB,CD]);
P=2^nextpower(2*m);
PQ=[P,P];
else
error('Wrong number inputs.')
end
2.g=dftfilt(f,H)接受输入图像f和一个滤波器函数,可以处理所有滤波器细节并输出经过滤波和剪切后的图像g。
functiong=dftfilt(f,H)
H1=zeros(size(H,1),size(H,2),3);
H1(:,:,1)=H;
H1(:,:,2)=H;
H1(:,:,3)=H;
F=fft2(f,size(H,1),size(H,2));
g=real(ifft2(F.*H1));
g=g(1:size(f,1),1: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]=lpfilter(type,M,N,D0,n)实现低通滤波波。
function[H,D]=lpfilter(type,M,N,D0,n)
[U,V]=dftuv(M,N);
D=sqrt(U.^2+V.^2);
switchtype
case'ideal'
H=double(D<=D0);
case'btw'
ifnargin==4
n=1
end
H=1./(1+(D./D0).^(2*n));
case'gaussian'
H=exp(-(D.^2)./(2*(D0^2)));
otherwise
error('UNknown filter type.')
end
5.实现高通滤波。
functionH=hpfilter(type,M,N,D0,n)
ifnargin==4
n=1;
end
Hlp=lpfilter(type,M,N,D0,n);
H=1-Hlp;
三、运行结果
四、结果分析
图1显示了一幅胸部X光图像,图像略显模糊。所以我要对其进行处理。
图2显示的是使用二阶巴特沃兹高通滤波器对图1滤波的结果。滤波结果没有什么特色,模糊的显示了边缘,因为直流分量也被虑掉了。
图3对高通的结果进行补偿,增加了偏移量0.5,此时高低频分量都增加了,由于低频分量成分引起的灰度以及色调得意保持。
图4通过对高频强调滤波后图像进行直方均衡化得到结果图像。
当然,从实际效果来看,效果并不是非常好,毕竟数学方法用matlab处理效果并不好,本人用photoshop处理效果好很多
处理如下: