图像处理作业分享:频域处理

图像处理作业分享:频域处理,第1张

该题程序:


clear all
img=imread("E:\BaiduNetdiskWorkspace\算法汇总\DIPUM2E_Original_Book_Images\DIPUM2E_Original_Book_Images\DIPUM2E_International_Ed_CH03_Images\Fig0313(a).tif");
%img=rgb2gray(I);
%幅值图和相位谱
%进行傅立叶变换
f2=fft2(img);        %傅里叶变换
f=fftshift(f2);      %使图像对称,中心化
r=real(f);          %图像频域实部
i=imag(f);          %图像频域虚部
margin=log(sqrt(r.^2+i.^2));     %图像幅度谱,加log便于显示
%phase=real(angle(f)*180/pi);     %图像相位谱
[ys,xs]=size(img);


%生成距离矩阵
%这个距离矩阵是用来判断距离和在点乘的时候方便计算距离
u = 0:(xs - 1);
v = 0:(ys - 1);
ind_u = find(u > xs/2);
u(ind_u) = u(ind_u) - xs;
ind_v = find(v > ys/2);
v(ind_v) = v(ind_v) - ys;
[V, U] = meshgrid(v, u);
%calculate distance matrix
y = sqrt((U .^ 2) + (V .^ 2));
kkn=[5,15,30,80,230];
figure
for ev=1:5
    %理想低通滤波器
    D0=kkn(1,ev);
    for i=1:xs
        for j=1:ys
            if y(j,i)>D0
                mask(j,i)=0;
            else
                mask(j,i)=1;
            end
        end
    end
    mask2=fftshift(mask);
    G1=mask2.*margin;
    img3=mask.*f2;
    img3=ifft2(img3);
    subplot(3,4,(ev-1)*2+3),imshow(img3,[]),title(kkn(1,ev));
    subplot(3,4,(ev-1)*2+4),imshow(G1,[]),title(kkn(1,ev));
end
subplot(3,4,1),imshow(img,[]),title('源图像');
subplot(3,4,2),imshow(margin,[]),title('图像频谱');;


题一输出:

题二:

题二程序:

clear all
img=imread("D:\同步空间\算法汇总\DIPUM2E_Original_Book_Images\DIPUM2E_Original_Book_Images\DIPUM2E_International_Ed_CH03_Images\Fig0313(a).tif");
%img=rgb2gray(I);
%幅值图和相位谱
%进行傅立叶变换
margin=fft2(img);        %傅里叶变换
     %使图像对称,中心化
f=fftshift(margin);      %使图像对称,中心化
r=real(f);          %图像频域实部
i=imag(f);          %图像频域虚部
margin2=log(sqrt(r.^2+i.^2)); %log化,容易显示  
[ys,xs]=size(img);

%生成距离矩阵
u = 0:(xs - 1);
v = 0:(ys - 1);
ind_u = find(u > xs/2);
u(ind_u) = u(ind_u) - xs;
ind_v = find(v > ys/2);
v(ind_v) = v(ind_v) - ys;
[V, U] = meshgrid(v, u);
%calculate distance matrix
y = sqrt((U .^ 2) + (V .^ 2));
k=-100;
dis=[5,15,30,80,230];
for i=1:5
%巴特滤波器
D0=dis(i);%滤波半径
B=zeros(xs,ys);
sigema=10;%设置巴特沃斯参数
h=1./(1+(y./D0).^(2*sigema));
h0=fftshift(h); 
G2=h.*margin;
Ge2=h0.*margin2;
%高斯低通滤波器
h2=exp(-((y.^2)/(2*(D0^2))));
h02=fftshift(h2); 
G3=h2.*margin;
Ge3=h02.*margin2;
img1=ifft2(G2);
img2=ifft2(G3);

subplot(10,2,2*(i-1)+1),imshow(Ge2,[]),title(dis(i));
text(10*k,k,'巴特沃斯低通波器');
subplot(10,2,2*(i-1)+2),imshow(img1,[]),title(dis(i));
subplot(10,2,2*(i-1)+11),imshow(Ge3,[]),title(dis(i));
text(10*k,k,'高斯低通滤波器');
subplot(10,2,2*(i-1)+12),imshow(img2,[]),title(dis(i));
end

题二输出

 题三

题三程序

clear all
img=imread("E:\BaiduNetdiskWorkspace\算法汇总\DIPUM2E_Original_Book_Images\DIPUM2E_Original_Book_Images\DIPUM2E_International_Ed_CH03_Images\Fig0321(a).tif");
%img=rgb2gray(I);
%幅值图和相位谱
%进行傅立叶变换
img=im2double(img);
margin=fft2(img);        %傅里叶变换
%使图像对称,中心化
margin=fftshift(margin);      %使图像对称,中心化
r=real(margin);          %图像频域实部
i=imag(margin);  %图像频域虚部
margin2=margin;
margins2=margin;
margin=log(1+abs(margin)); %log化,容易显示
[ys,xs]=size(img);
margins=margin;
%生成距离矩阵
u = 0:(xs - 1);
v = 0:(ys - 1);
ind_u = find(u > xs/2);
u(ind_u) = u(ind_u) - xs;
ind_v = find(v > ys/2);
v(ind_v) = v(ind_v) - ys;
[V, U] = meshgrid(v, u);
%calculate distance matrix
y = sqrt((U .^ 2) + (V .^ 2));
y2=fftshift(y);
r=5;
k=1.09;
m=30;
M=100;
for i=1:ys
    for j=1:xs
        if im && y2(xs+1-j,ys+1-i)r && abs(i-ys/2)>r
            if mean(mean(margins(i:i+r,j:j+r)))>k*mean(mean(margins(i:i+2*r,j:j+2*r)))
                margin2(i:i+r,j:j+r)=median(median(margins2(i:i+2*r,j:j+2*r)))/2;%找中位数
                margin(i:i+r,j:j+r)=mean(mean(margins(i:i+2*r,j:j+2*r)))/2;
                margin2(i:i+r,j:j+r)=0;
            end
        end
        if ixs/2 && y2(xs+1-j,ys+1-i)>m && y2(xs+1-j,ys+1-i)r && abs(i-ys/2)>r
            if mean(mean(margins(i:i+r,j-r:j)))>k*mean(mean(margins(i:i+2*r,j-2*r:j)))
                margin2(i:i+r,j-r:j)=median(median(margins2(i:i+2*r,j-2*r:j)))/2;
                margin(i:i+r,j-r:j)=mean(mean(margins(i:i+2*r,j-2*r:j)))/2;
                margin2(i:i+r,j-r:j)=0;
            end
        end
        if i>ys/2 && jm && y2(xs+1-j,ys+1-i)r && abs(i-ys/2)>r
            if mean(mean(margins(i-r:i,j:j+r)))>k*mean(mean(margins(i-2*r:i,j:j+2*r)))
                margin2(i-r:i,j:j+r)=median(median(margins2(i-2*r:i,j:j+2*r)))/2;
                margin(i-r:i,j:j+r)=mean(mean(margins(i-2*r:i,j:j+2*r)))/2;
                margin2(i-r:i,j:j+r)=0;
            end
        end
        
        if i>ys/2 && j>xs/2 && y2(xs+1-j,ys+1-i)>m && y2(xs+1-j,ys+1-i)r && abs(i-ys/2)>r
            if mean(mean(margins(i-r:i,j-r:j)))>k*mean(mean(margins(i-2*r:i,j-2*r:j)))
                margin2(i-r:i,j-r:j)=median(median(margins2(i-2*r:i,j-2*r:j)))/2;
                margin(i-r:i,j-r:j)=mean(mean(margins(i-2*r:i,j-2*r:j)))/2;
                margin2(i-r:i,j-r:j)=0;
            end
        end
        
        %靠近中心
        if ir && abs(j-xs/2)>2*r && abs(i-ys/2)>2*r
            if mean(mean(margins(i:i+r,j:j+r)))>mean(mean(margins(i:i+2*r,j:j+2*r)))
                margin2(i:i+r,j:j+r)=median(median(margins2(i:i+2*r,j:j+2*r)))/2;
                margin(i:i+r,j:j+r)=mean(mean(margins(i:i+2*r,j:j+2*r)))/2;
                margin2(i:i+r,j:j+r)=0;
            end
        end
        if ixs/2 && y2(xs+1-j,ys+1-i)r && abs(j-xs/2)>2*r && abs(i-ys/2)>2*r
            if mean(mean(margins(i:i+r,j-r:j)))>mean(mean(margins(i:i+2*r,j-2*r:j)))
                margin2(i:i+r,j-r:j)=median(median(margins2(i:i+2*r,j-2*r:j)))/2;
                margin(i:i+r,j-r:j)=mean(mean(margins(i:i+2*r,j-2*r:j)))/2;
                margin2(i:i+r,j-r:j)=0;
            end
        end
        if i>ys/2 && jr && abs(j-xs/2)>2*r && abs(i-ys/2)>2*r
            if mean(mean(margins(i-r:i,j:j+r)))>mean(mean(margins(i-2*r:i,j:j+2*r)))
                margin2(i-r:i,j:j+r)=median(median(margins2(i-2*r:i,j:j+2*r)))/2;
                margin(i-r:i,j:j+r)=mean(mean(margins(i-2*r:i,j:j+2*r)))/2;
                margin2(i-r:i,j:j+r)=0;
            end
        end
        
        if i>ys/2 && j>xs/2 && y2(xs+1-j,ys+1-i)r && abs(j-xs/2)>2*r && abs(i-ys/2)>2*r
            if mean(mean(margins(i-r:i,j-r:j)))>mean(mean(margins(i-2*r:i,j-2*r:j)))
                margin2(i-r:i,j-r:j)=median(median(margins2(i-2*r:i,j-2*r:j)))/2;
                margin(i-r:i,j-r:j)=mean(mean(margins(i-2*r:i,j-2*r:j)))/2;
                margin2(i-r:i,j-r:j)=0;
            end
        end
        
    end
end
f2=fftshift(margin2);
img2=ifft2(f2);

%h=

%img2=exp(img2);
subplot(2,2,1),imshow(img,[]),title('原始图像');
subplot(2,2,2),imshow(margins,[]),title('处理前的频域');
subplot(2,2,3),imshow(margin,[]),title('处理后的频域');
subplot(2,2,4),imshow(img2,[]),title('处理后的图像');

 题三:输出

 

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/876419.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-13
下一篇 2022-05-13

发表评论

登录后才能评论

评论列表(0条)

保存