【问题标题】:2D Fourier Transform of RGB Image Showing up as a White Image显示为白色图像的 RGB 图像的二维傅里叶变换
【发布时间】:2017-06-01 20:22:56
【问题描述】:

我正在尝试通过 Matlab 中的imread 函数读取两个“bmp”格式的图像。

对于第一张图片,它返回一个 512*512 uint8 的矩阵,对于第二张图片,它返回一个 512*512*3 uint8 的矩阵。

img2 进行傅里叶变换后,显示为白色图像。任何想法?

img1 = imread('I1.bmp');
img2 = imread('I2.bmp');

mag1 = abs(img1);
mag2 = abs(img2);

phase1 = angle(double(img1));
phase2 = angle(double(img2));

subplot(2, 2, 1);
subimage(img1);

subplot(2, 2, 2);
subimage(img2);

FFT1 = fft2(double(img1));
FFT2 = fft2(double(img2));

subplot(2, 2, 3);
imshow(log(abs(fftshift(FFT1))), [0 10]);
colormap(gray); 
colorbar;

subplot(2, 2, 4);
imshow(log(abs(fftshift(FFT2))), [0 10]);
colormap(gray); 
colorbar;

【问题讨论】:

    标签: matlab image-processing fft


    【解决方案1】:

    问题在于第二张图像是 RGB 并且fft2每个通道上分别执行 2D FFT 并返回与输入大小相同的矩阵。当您尝试显示生成的 RGB 图像(其中每个通道是每个通道的 FFT)时,它将显示为全白。

    如果您实际上想要每个通道的 FFT,那么您需要分别显示每个通道的 FFT

    % Display red FFT
    imshow(log(abs(fftshift(FFT2(:,:,1)))), [0 10]);
    

    您的另一个选择是将图像转换为灰度图像进行 FFT

    img2 = rgb2gray(img2);
    FF2 = ff2(img2);
    imshow(log(abs(fftshift(FFT2(:,:,1)))), [0 10]);
    

    【讨论】:

      猜你喜欢
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      • 2021-07-12
      • 1970-01-01
      • 2020-01-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多