clc;clear all
S0 = imread('flower256.png');
h = ones(5)./25;
Q1=filter2(h,S0); %注意这里是double型,如果直接imshow就会一片白>1
Q1=uint8(Q1); %imshow(Q1);
Q2=conv2(double(S0),h); %256+5-1,要取最前面的
Q2=uint8(Q2(1:256,1:256));
FS0=fftshift(fft2(S0));
mFS0=log(abs(FS0)+1); %要做对数,不然很黑%figure;imshow(mFS0./max(max(mFS0)));
h1=zeros(256,256);
h1(1:5,1:5)=h;
FH1=fftshift(fft2(h1));
mFH1=log(abs(FH1)+1); %figure;imshow(mFH1./max(max(mFH1)));
FQ3=FS0.*FH1;
Q3=uint8(real(ifft2(fftshift(FQ3))));%可能有复数
S0e=zeros(256+5-1,260);
S0e(1:256,1:256)=S0;%扩大到了
he=zeros(260,260);
he(1:5,1:5)=h;
hes=circshift(he,[-2,-2]);%用模板中心位置与左上角对齐,不然结果就会有移动,模板下一个周期移进来了
Q3e=uint8(real(ifft2((fft2(S0e).*fft2(he)))));
Q3e=Q3e(1:256,1:256);
Qe3=uint8(real(ifft2((fft2(S0e).*fft2(hes)))));
Qe3=Qe3(1:256,1:256);
subplot(2,2,1); imshow(S0);
subplot(2,2,2); imshow(Q1);
subplot(2,2,3); imshow(Q2);
subplot(2,2,4); imshow(Q3e);
%边界效应,周期延拓
%fft->ifft等效于周期延拓的卷积,数据的折叠效应,需要把原始图像右侧加零--长度恰好等于卷积核列数少一
%卷积核翻到外面,如果有数据累加的值会变大,如果是0累加的值很小,直到卷积核全进来值才差不多
2021-10-27数字图像处理上机
最新推荐文章于 2024-04-03 09:29:14 发布