gpt4 book ai didi

image - 为什么我得到一个空白图像作为我的输出?

转载 作者:太空宇宙 更新时间:2023-11-03 19:41:40 25 4
gpt4 key购买 nike

这是我编写的一些代码,用于显示图像的幅度谱:

orig_imdata = imread('Original_Image.png'); 
spec_orig = fft2(double(orig_imdata));
spec_orig2 = abs(spec_orig);
spec_img = fftshift(spec_orig2);
imshow(spec_img);

当我注释掉 abs 的使用并且只是 fftshift 图像时,我得到了一个图像,尽管有相位和幅度。如果我在使用 fftshift 后立即应用 abs 函数,我会从 imshow 得到空白结果。我需要一张我的图像光谱分析幅度的图像。

有人知道这里出了什么问题吗?

最佳答案

图像根本不是“空白”的。 imshow被设计成任何double小于 0 的精度值显示为黑色,任何大于 1 的值都显示为白色。在计算图像的幅度分量时,您正在生成 double代码中的精确图像。

因此,我高度怀疑因为您的大部分组件(如果不是全部)都大于 1,这会给您一个全白的可视化图像,因此是“空白”图像。现在我们已经找到了问题,但是你是 not out of the woods yet .简单地缩放你的组件,使它们适合 [0,1] 的范围也无济于事。如果这样做,幅值谱的 DC 分量可能会非常大,以至于压倒图像中的其余幅值分量。因此,您只会在中间看到一个白点,图像的其余部分将为黑色。

通常的做法是应用 log对幅度谱进行操作以进行显示,然后重新调整值以使其适合 [0,1] 的范围:

%// Your code
orig_imdata = imread('Original_Image.png');
spec_orig = fft2(double(orig_imdata));
spec_orig2 = abs(spec_orig);
spec_img = fftshift(spec_orig2);

%// New code
spec_img_log = log(1 + spec_img);
imshow(spec_img_log,[]);

log操作,值的巨大动态范围被压缩到较小的范围,尤其是当值变大时,因此自然缩放到 [0,1]此压缩范围的一部分将为您提供更好的视觉效果。

之所以对每个分量加1然后取log是为了避免 log(0)手术。如果任何幅度分量为零,这将评估为 log(1) ,这将变为 0。一旦你这样做,你可以使用 imshow(...,[])重新缩放显示,使最小幅度分量变为 0,而最大幅度分量变为 log 频谱的 1。请注意,我没有修改原始光谱,因此您可以对其进行处理。此外,由 imshow 完成的重新缩放完全在调用内部完成。它不会以任何方式重新缩放数据 - 它只是为了显示而这样做。


试一试,看看效果如何。

关于image - 为什么我得到一个空白图像作为我的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33985585/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com