matlab中的real(ifft2(ifftshift(g)))是什么意思
时间: 2024-02-26 10:52:01 浏览: 132
这段代码涉及到傅里叶变换(FFT)和图像处理。具体解释如下:
1. ifftshift(g):将图像 g 进行零频移到中心,以便进行 FFT 变换。
2. ifft2(...):对 g 进行二维傅里叶逆变换,得到时域图像。
3. real(...):取时域图像的实部。
因此,real(ifft2(ifftshift(g))) 的含义是,将图像 g 进行零频移到中心,然后进行二维傅里叶逆变换,最后取得到的时域图像的实部。这个过程常用于图像恢复和滤波。
相关问题
请帮我更改一下代码让图片显示与原图片大小一致,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');
function butterworth_low_Callback(hObject, eventdata, handles)%巴特沃斯低通滤波 % hObject handle to butterworth_low (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); I=im2double(im); A=imnoise(I,'salt & pepper',0.06); %椒盐噪声 J=fftshift(fft2(A)); [x, y]=meshgrid(-128:127, -128:127); %产生离散数据 z=sqrt(x.^2+y.^2); %幅度值 D1=40; %滤波器的截止频率 n=4; %滤波器的阶数 H1=1./(1+( z/D1).^(2*n)); %滤波器1 K1=J.*H1; %滤波 L1=ifft2(ifftshift(K1)); %傅里叶反变换 axes(handles.axes2); imshow(real(L1));给我修改一下
function butterworth_low_Callback(hObject, eventdata, handles)%巴特沃斯低通滤波
% hObject handle to butterworth_low (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);
I = im2double(im);
A = imnoise(I,'salt & pepper',0.06); %椒盐噪声
J = fftshift(fft2(A));
[x, y] = meshgrid(-128:127, -128:127); %产生离散数据
z = sqrt(x.^2 + y.^2); %幅度值
D1 = 40; %滤波器的截止频率
n = 4; %滤波器的阶数
H1 = 1./(1 + (z/D1).^(2*n)); %滤波器1
K1 = J.*H1; %滤波
L1 = real(ifft2(ifftshift(K1))); %傅里叶反变换并取实部
axes(handles.axes2);
imshow(L1); %显示滤波后的图像
阅读全文