matlab中OTFde=real(fftshift(fft2(ifftshift(ipsfde))));的意思
时间: 2023-09-25 17:08:17 浏览: 110
这行代码的作用是将输入的点扩散函数(ipsfde)通过傅里叶变换转换为光学传递函数(OTFde)。具体步骤如下:
1. ifftshift函数将ipsfde进行逆移位操作,将其中心对齐到数组的中心。
2. fft2函数对移位后的ipsfde进行二维傅里叶变换,得到频域图像。
3. fftshift函数将傅里叶变换后的频域图像进行移位操作,将其中心对齐到数组的中心。
4. real函数取实部,得到光学传递函数OTFde。
总的来说,这行代码实现了将点扩散函数转换为光学传递函数的过程。
相关问题
分析matlab代码NPower=sum(NP(:))/prod(size(noise)); NCORR=fftshift(real(ifft2(NP))); IP=abs(fft2(I).^2); IPower=sum(IP(:))/prod(size(I)); ICORR=fftshift(real(ifft2(IP))); L=deconvwnr(K,PSF,NCORR,ICORR); handles.img=L; axes(handles.g2); cla; imshow(handles.img); guidata(hObject,handles);
这段代码主要是对图像进行去噪和图像复原的操作。具体来说,代码中的变量NP表示噪声功率谱,而NCORR表示噪声的自相关函数。代码中将NP进行求和并除以其大小,得到噪声功率的平均值NPower。然后通过傅里叶变换、逆傅里叶变换以及位移操作,得到噪声的自相关函数NCORR。
接下来,变量I表示输入图像,而IP为其功率谱。代码中将IP进行求和并除以其大小,得到输入图像功率的平均值IPower。然后同样通过傅里叶变换、逆傅里叶变换以及位移操作,得到输入图像的自相关函数ICORR。
最后,通过Wiener滤波器的形式,对图像进行去噪和复原。其中,K表示退化函数,PSF表示点扩散函数,而L为复原后的图像。最后将复原后的图像显示在图像窗口中。
需要注意的是,这段代码中的变量和函数可能需要根据具体的应用场景进行修改和调整。
请帮我更改一下代码让图片显示与原图片大小一致,function Exponential_high_filter_Callback(hObject, eventdata, handles)%指数高通滤波 % hObject handle to Exponential_high_filter (see GCBO) % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) axis off; %%关闭坐标轴显示 global im; %%声明全局变量 global str; im = imread(str); Image=imnoise(im,'gaussian'); FImage=fftshift(fft2(double(Image))); [N,M]=size(FImage); g=zeros(N,M); r1=floor(M/2); r2=floor(N/2); d0=[20 50]; %截断频率 为 D0=50 n=2; for i=1:2 for x=1:M for y=1:N d=sqrt((x-r1)^2+(y-r2)^2); h=exp(-0.5*(d0(i)/d)^n); g(y,x)=h*FImage(y,x); end end g=ifftshift(g); g=real(ifft2(g)); end axes(handles.axes2); imshow(uint8(g));
在imshow函数中添加参数"InitialMagnification", "fit",即可让图片显示与原图片大小一致。更改后的代码如下:
function Exponential_high_filter_Callback(hObject, eventdata, handles)
%指数高通滤波
% hObject handle to Exponential_high_filter (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
axis off; %%关闭坐标轴显示
global im; %%声明全局变量
global str;
im = imread(str);
Image=imnoise(im,'gaussian');
FImage=fftshift(fft2(double(Image)));
[N,M]=size(FImage);
g=zeros(N,M);
r1=floor(M/2);
r2=floor(N/2);
d0=[20 50]; %截断频率 为 D0=50 n=2;
for i=1:2
for x=1:M
for y=1:N
d=sqrt((x-r1)^2+(y-r2)^2);
h=exp(-0.5*(d0(i)/d)^n);
g(y,x)=h*FImage(y,x);
end
end
g=ifftshift(g);
g=real(ifft2(g));
end
axes(handles.axes2);
imshow(uint8(g), 'InitialMagnification', 'fit');
阅读全文