采用Matlab编程实现 高频强调滤波,[转载]MATLAB图像处理-基于高频强调滤波和直方均衡化图像增强...

摘要:

现代医学非常发达,能通过各种手段来获取人体的各种信息,例如,X光可以拍摄人的骨头等图片。但是,这些图片效果不一定很好,所以在使用着大量的数字成像和数字图片处理设备。那么,现在,我用Matlab这个软件对一幅胸透图片进行处理,获得更好的效果。

本次软件处理实验方法是:利用高通滤波器削弱傅里叶变换的低频而保持高频相对不变点,这样会突出图像的边缘和细节,使得图像边缘更加清晰。但是由于高通滤波器偏离了直流分分量,从而把图像的平均值降低到了0,。一种补偿方法是给高通滤波器加上一个偏移量。若偏移量与滤波器乘以一个大于1的常数结合,则这种方法就称为高频强调滤波,因为该常量乘数突出了高频部分。这个乘数同时增加了低频部分的幅度,但是只要偏移量与被乘数比较小,低频增强的影响就弱于高频增强的影响。

一、数学分析

a4c26d1e5885305701be709a3d33442f.png

其中,a是偏移量,b是乘数,a4c26d1e5885305701be709a3d33442f.png是高通滤波器的传递函数

该常量乘数突出了高频部分。这个乘数同时增加了低频部分的幅度,但是只要偏移量与被乘数比较小,低频增强的影响就弱于高频增强的影响。

二、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;

三、运行结果

a4c26d1e5885305701be709a3d33442f.png

四、结果分析

图1显示了一幅胸部X光图像,图像略显模糊。所以我要对其进行处理。

图2显示的是使用二阶巴特沃兹高通滤波器对图1滤波的结果。滤波结果没有什么特色,模糊的显示了边缘,因为直流分量也被虑掉了。

图3对高通的结果进行补偿,增加了偏移量0.5,此时高低频分量都增加了,由于低频分量成分引起的灰度以及色调得意保持。

图4通过对高频强调滤波后图像进行直方均衡化得到结果图像。

当然,从实际效果来看,效果并不是非常好,毕竟数学方法用matlab处理效果并不好,本人用photoshop处理效果好很多

处理如下:

a4c26d1e5885305701be709a3d33442f.png

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值