该题程序:
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('处理后的图像');
题三:输出
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)