• 图像的离散傅里叶变换-python实战


    前言

    图像处理中的一个更高级的主题与傅里叶变换的概念有关。简而言之,一些图像包含用户可能想要去除的系统噪声。如果这种噪声足够规则,使用离散傅里叶变换(DFT/FFT)调整可能有助于图像处理。在本文中,我们将确切地看到如何做到这一点。
    本文参考如下博文:Image Processing with Python — Application of Fourier Transformation

    图像离散傅里叶变换代码

    导入所需要的库

    import numpy as np
    import matplotlib.pyplot as plt
    from skimage.io import imread, imshow
    from skimage.color import rgb2hsv, rgb2gray, rgb2yuv
    from skimage import color, exposure, transform
    from skimage.exposure import equalize_hist
    

    导入图像并转换为灰度图

    dark_image = imread('against_the_light.png')
    

    在这里插入图片描述
    本文试图找到一种方法来消除(或至少大幅减少)后面的电线。首先将图像转换为灰度图。

    dark_image_grey = rgb2gray(dark_image)
    plt.figure(num=None, figsize=(8, 6), dpi=80)
    plt.imshow(dark_image_grey, cmap='gray');
    

    Greyscale Image

    使用FFT对图像进行变换

    使用Skimage中的fft函数对图像进行变换。导入代码:

    dark_image_grey_fourier = np.fft.fftshift(np.fft.fft2(dark_image_grey))
    plt.figure(num=None, figsize=(8, 6), dpi=80)
    plt.imshow(np.log(abs(dark_image_grey_fourier)), cmap='gray');
    

    Fourier Transformation of the Image
    在图像中,可以看到白色的垂直线和水平线,它们是图像中尖锐的水平和垂直元素。

    • 首先,首先掩盖住其中的垂直白线
    def fourier_masker_ver(image, i):
        f_size = 15
        dark_image_grey_fourier =
        np.fft.fftshift(np.fft.fft2(rgb2gray(image)))
        dark_image_grey_fourier[:225, 235:240] = i
        dark_image_grey_fourier[-225:,235:240] = i
        fig, ax = plt.subplots(1,3,figsize=(15,15))
        ax[0].imshow(np.log(abs(dark_image_grey_fourier)), cmap='gray')
        ax[0].set_title('Masked Fourier', fontsize = f_size)
        ax[1].imshow(rgb2gray(image), cmap = 'gray')
        ax[1].set_title('Greyscale Image', fontsize = f_size);
        ax[2].imshow(abs(np.fft.ifft2(dark_image_grey_fourier)), 
                         cmap='gray')
        ax[2].set_title('Transformed Greyscale Image', 
                         fontsize = f_size);
        
    fourier_masker(dark_image, 1)
    

    Fourier Transform Vertical Masked Image
    我们可以看到水平电缆的尺寸明显减小了。

    • 其次掩盖水平线
    def fourier_masker_hor(image, i):
       f_size = 15
       dark_image_grey_fourier =
       np.fft.fftshift(np.fft.fft2(rgb2gray(image)))
       dark_image_grey_fourier[235:240, :230] = i
       dark_image_grey_fourier[235:240,-230:] = i
       fig, ax = plt.subplots(1,3,figsize=(15,15))
       ax[0].imshow(np.log(abs(dark_image_grey_fourier)), cmap='gray')
       ax[0].set_title('Masked Fourier', fontsize = f_size)
       ax[1].imshow(rgb2gray(image), cmap = 'gray')
       ax[1].set_title('Greyscale Image', fontsize = f_size);
       ax[2].imshow(abs(np.fft.ifft2(dark_image_grey_fourier)), 
                        cmap='gray')
       ax[2].set_title('Transformed Greyscale Image', 
                        fontsize = f_size);
    fourier_masker_hor(dark_image, 1)
    

    Fourier Transform Horizontal Masked Image
    可以看到图像的所有垂直方向都被模糊了。这在电线杆上非常明显。虽然在某些情况下有所帮助,但在这里显然没有帮助。

    • 最后,在保留原始图像颜色的同时进行傅里叶变换调整
     def fourier_transform_rgb(image):
        f_size = 25
        transformed_channels = []
        for i in range(3):
            rgb_fft = np.fft.fftshift(np.fft.fft2((image[:, :, i])))
            rgb_fft[:225, 235:237] = 1
            rgb_fft[-225:,235:237] = 1
            transformed_channels.append(abs(np.fft.ifft2(rgb_fft)))
        
        final_image = np.dstack([transformed_channels[0].astype(int), 
                                 transformed_channels[1].astype(int), 
                                 transformed_channels[2].astype(int)])
        
        fig, ax = plt.subplots(1, 2, figsize=(17,12))
        ax[0].imshow(image)
        ax[0].set_title('Original Image', fontsize = f_size)
        ax[0].set_axis_off()
        
        ax[1].imshow(final_image)
        ax[1].set_title('Transformed Image', fontsize = f_size)
        ax[1].set_axis_off()
        
        fig.tight_layout()
    

    Fourier Transformed Colored Image
    可以看到水平电线减弱了,而图像的其余部分基本保持不变。

  • 相关阅读:
    概率论与数理统计学习:随机事件(一)——知识总结与C语言实现案例
    【GIS前言】OGIS如何跨分布式计算平台
    R可视化:给柱状图添加网格
    【JS面试题】如何通过闭包漏洞在外部修改函数中的变量
    USB转单串口、多串口芯片选型UART.TTL.RS-232等
    云计算中的负载均衡技术,确保资源的平衡分配
    设计模式初识
    基于uni-app与图鸟UI打造的各领域移动端模板大赏
    电子学会2023年9月青少年软件编程(图形化)等级考试试卷(一级)真题,含答案解析
    实验室常用滤器分类
  • 原文地址:https://blog.csdn.net/u012762410/article/details/127038071