【问题标题】:How to draw on a Fourier transform numpy array Opencv如何在傅里叶变换numpy数组Opencv上绘图
【发布时间】:2021-07-26 00:24:03
【问题描述】:

我想在 FFT 幅度图像上绘制黑色矩形并应用 IFFT。我尝试计算 FFT 在编辑幅度图像后得到 2 个数组,一个用于幅度,另一个用于相位(我将其转换为 uint8) 我不知道如何转换为 IFFT 的正确输入格式。 这是我正在使用的 FFT 代码:

dft = np.fft.fft2(img)
dft_shift = np.fft.fftshift(dft)
mag = np.abs(dft_shift)
ang = np.angle(dft_shift)

这是我用来重建图像的代码:

def reconstruct(mag,ang):
    combined = np.multiply(mag, np.exp(1j*ang))
    fftx = np.fft.ifftshift(combined)
    ffty = np.fft.ifft2(fftx)
    imgCombined = np.abs(ffty)
    return imgCombined

【问题讨论】:

    标签: python numpy image-processing fft


    【解决方案1】:
    • 在计算傅里叶变换之前,将图像转换为浮点数据类型。
    • 创建一个蒙版并将其与幅度相乘。
    • 结合幅度和相位,并应用逆变换

    代码:

    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    
    def fourier(img):
        dft = np.fft.fft2(np.float32(img))
        dft_shift = np.fft.fftshift(dft)
        mag = np.abs(dft_shift)
        ang = np.angle(dft_shift)
        return mag, ang
    
    def inverse_fourier(mag, ang):
        combined = np.multiply(mag, np.exp(1j*ang))
        fftx = np.fft.ifftshift(combined)
        ffty = np.fft.ifft2(fftx)
        imgCombined = np.abs(ffty).astype(np.uint8)
        return imgCombined
    
    img = cv2.imread('./cameraman.tif', 0)
    mag, ang = fourier(img)
    mask = np.zeros(img.shape, dtype=img.dtype)
    y,x = mask.shape[0], mask.shape[1]
    cx = x//2
    cy = y//2
    
    mask[cy-50 : cy+50, cx-50 : cx+50] = 1.
    mag = mag * mask
    res = inverse_fourier(mag, ang)
    
    mx = np.amax(np.log(mag+0.001))
    tmp = np.uint8(255*(mag/mx))
    
    _, ax = plt.subplots(2,2)
    ax[0,0].imshow(img, cmap='gray')
    ax[0,1].imshow(tmp, cmap='gray')
    ax[1,0].imshow(mask, cmap='gray')
    ax[1,1].imshow(res, cmap='gray')
    plt.show()
    

    结果

    【讨论】:

    • 这部分代码的作用是什么:mx = np.amax(np.log(mag+0.001)) tmp = np.uint8(255*(mag/mx))
    • 只是为了显示幅度图像,因为它是肉眼看不到的暗图像
    猜你喜欢
    • 2013-01-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-28
    • 1970-01-01
    • 2011-12-24
    • 1970-01-01
    • 1970-01-01
    • 2015-06-16
    相关资源
    最近更新 更多