FunnyWeb

据说这里有很多神奇的东西...

matlab频域滤波

2017-03-28 12:39:05857 views

a) 横条纹:0_N_Girl_horiz_lines.bmp

该图像为512*512像素的8位灰度图。

观察图像特点,该图像包含周期性的白色条纹。

从第1像素行开始,每间隔9行像素点会有1行白色条纹。

因此构建两个临时的数组,其中一个为干扰条纹的灰度值,另一个为干扰条纹下侧正常点的灰度值。分别做傅里叶变换,对原图像进行滤波。

clear
input=imread('0_N_Girl_horiz_lines.bmp');
figure,imshow(input);
fft_old=fft2(input);
fft_log=log(fftshift(abs(fft_old)));
figure,imshow(fft_log,[])
horiz_lines_map=zeros(512,512);
for n = 1:10:512
    for m=1:512
        horiz_lines_map(n,m)=double(input(n+1,m));
    end
end
fft_hl_map=fft2(horiz_lines_map);
horiz_lines=zeros(512,512);
for n = 1:10:512
    for m=1:512
        horiz_lines(n,m)=double(input(n,m));
    end
end
fft_hl=fft2(horiz_lines);
fft_new=fft_old-fft_hl+fft_hl_map;
fft_new_log=log(fftshift(abs(fft_new)));
figure,imshow(fft_new_log,[]);
ifft_new=ifft2(fft_new);
figure,imshow(ifft_new,[]);

blob.png

b) 特殊叠加条纹:1_N_Girl_Grad_lines.bmp

该图像为512*512像素的8位灰度图。

观察图像特点,该图像包含有规律的干扰条纹。

从第20像素行开始,每间隔i行像素点会有干扰条纹,且i逐渐增加1。

因此构建两个临时的数组,其中一个为干扰条纹的灰度值,另一个为干扰条纹周边正常点的灰度值。分别做傅里叶变换,对原图像进行滤波。

clear;
input=imread('1_N_Girl_Grad_lines.bmp');
figure,imshow(input);
fft_old=fft2(input);
fft_log=log(fftshift(abs(fft_old)));
figure,imshow(fft_log,[])
horiz_lines_map=zeros(512,512);
a=-1;
for i = 20:36
    a=a+i;
    for j = 1:512
        if rem(j-1,2)==0
            horiz_lines_map(a+1,j)=(double(input(a+2,j))+double(input(a-1,j)))/2;
            horiz_lines_map(a,j)=(double(input(a+2,j))+double(input(a-1,j)))/2;
        else
            horiz_lines_map(a+1,j)=(double(input(a+3,j))+double(input(a,j)))/2;
            horiz_lines_map(a+2,j)=(double(input(a+3,j))+double(input(a,j)))/2;
        end
    end
end
fft_hl_map=fft2(horiz_lines_map);
horiz_lines=zeros(512,512);
a=-1;
for i = 20:36
    a=a+i;
    for j = 1:512
        if rem(j-1,2)==0
            horiz_lines(a+1,j)=double(input(a+1,j));
            horiz_lines(a,j)=double(input(a,j));
        else
            horiz_lines(a+1,j)=double(input(a+1,j));
            horiz_lines(a+2,j)=double(input(a+2,j));
        end
    end
end
fft_hl=fft2(horiz_lines);
fft_new=fft_old-fft_hl+fft_hl_map;
fft_rr_log=log(fftshift(abs(fft_new)));
ifft_re=ifft2(fft_new);
figure,imshow(fft_rr_log,[]);
figure,imshow(ifft_re,[]);

blob.png

c)干扰信号:2_lena_corrupt.bmp

该图像为512*512像素的8位灰度图。观察频域图可以发现,噪声集中于几个点中,可直接构建滤波器。

clear;
I=imread('2_lena_corrupt.bmp');
figure,imshow(I)
J = fft2(I);
J = fftshift(J);
figure,imshow(log(abs(J)),[])
for i=1:512
    for j = 1:512
        if(abs(J(i,j))>1200000)&(abs(J(i,j))<2500000)&~(((i>200)&(i<300))&((j>200)&j<300))
            J(i,j)=0;
        end
    end
end
figure,imshow(log(abs(J)),[])
J = ifftshift(J);
K = ifft2(J);
figure,imshow(K,[0 255])

blob.png