使用低通滤波器
clc,clear,close all;
f=imread('lena.jpg');
f=rgb2gray(f);
figure,imshow(f);
PQ=paddedsize(size(f));
[U,V] = dftuv(PQ(1),PQ(2));
D0 = 0.05*PQ(2);
H = lpfilter('gaussian',PQ(1),PQ(2),D0);
g = dftfilt(f,H);
imshow(uint8(g),[]);
效果:
使用matlab来做线框图
H1=fftshift(H);
mesh(H1(1:10:500,1:10:500))
axis([0 50 0 50 0 1])
colormap([0 0 0 ])
grid off
axis off
view(-25,30);
也可以做表面图
H2=fftshift(H);
surf(H2(1:10:500,1:10:500));
axis([0 50 0 50 0 1])
高通滤波器
H = fftshift(hpfilter_my('ideal',500,500,50));
mesh(H(1:10:500,1:10:500));
axis([0 50 0 50 0 1])
colormap([0 0 0 ])
grid off
axis off
对图像进行高通滤波,结果:
高频强调滤波
高通滤波偏离了直流项,从而把图像平均值降低到了0,一种补偿方法是给高通滤波器加上一个偏移量,若偏移量与滤波器乘以一个大于1的常数结合起来,则这种方法就称为高频强调滤波。
PQ=paddedsize(size(f));
[U,V] = dftuv(PQ(1),PQ(2));
D0 = 0.05*PQ(1);
Hbtw = hpfilter_my('btw',PQ(1),PQ(2),D0,2);
H=0.5+2*Hbtw;
g = dftfilt(f,H);
figure,imshow(uint8(g),[]);