aurora_3128 2021-01-27 16:24 采纳率: 0%
浏览 16

求问怎么将长度为N/2的窗函数放到长度为N的零数组中间

MATLAB程序

defocus_aa=imread('defocus_aa.tif');

fft_aa=double(fft2(defocus_aa));

%% 加窗
defocus_aa=double(defocus_aa);
Windows_1=hanning(length(defocus_aa)/2);
% figure;
% plot(abs(Windows_1))
%改变窗函数形状

Windows_fft=fft(Windows_1,length(defocus_aa));
% Windows_fft=fft(Windows_1);
% Windows_fft1=fftshift(Windows_fft);
Windows=fftshift(Windows_fft);

Windows=ifft2(Windows);

figure;
plot(abs(Windows))

时域的窗函数图是前面是汉宁窗的形状,后面是零,现在想改成中心为汉宁窗,两边为零  qing'q

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-07-24 14:02
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    这是一个简单的MATLAB脚本,它使用Hann窗户和FFT来创建一个窗口。然后,通过将结果重新平移,我们可以将其转换成所需的形状。

    % 读取图像
    defocus_aa = imread('defocus_aa.tif');
    
    % 计算傅里叶变换
    fft_aa = fft2(defocus_aa);
    
    % 创建汉宁窗户
    hann_window = hann(length(defocus_aa)/2);
    
    % 将图像乘以汉宁窗户
    fft_aa_hann = fft2(fft_aa .* hann_window);
    
    % 取实部并平移窗口
    fft_aa_hann_abs = abs(fft_aa_hann);
    fft_aa_hann_shifted = fftshift(fft_aa_hann_abs);
    
    % 恢复图像
    defocus_aa_hann = ifft2(fft_aa_hann_shifted);
    
    % 显示结果
    imshow(defocus_aa_hann)
    

    这个脚本首先计算了输入图像的傅里叶变换,然后创建了一个汉宁窗户,这被用来对图像进行加权处理。接着,我们使用fft2函数在傅里叶空间中乘以汉宁窗口,这样就得到了带有汉宁窗口的图像。然后,我们通过fftshift函数将结果从频率空间恢复到时间空间,并通过abs函数获取实部。最后,我们使用ifft2函数从傅里叶空间中恢复图像,并显示结果。

    注意:这个脚本只适用于二维图像。如果你有一个三维图像(例如,如果它是3D扫描),你需要相应地调整代码。此外,这个脚本并没有实现完全的平移,因为它只是简单地复制了图像。如果你想实现真正的平移,你可能需要使用更复杂的算法。

    评论

报告相同问题?