• 图像变换算法


    1.1 傅里叶变换 (Fourier Transform)

    介绍

    傅里叶变换是一种数学变换,用于将图像从空间域转换到频率域。它广泛应用于图像去噪和滤波。

    原理

    傅里叶变换将图像表示为频率成分的叠加,使得频率成分可以独立处理。通过对频率成分的分析和处理,可以实现对图像的去噪、增强和其他操作。

    公式

    连续傅里叶变换:

    离散傅里叶变换(DFT):

    案例1

    使用Python和OpenCV进行傅里叶变换。

    代码解析
    1. import cv2
    2. import numpy as np
    3. import matplotlib.pyplot as plt
    4. # 读取图像
    5. image = cv2.imread('image.jpg', 0)
    6. # 进行傅里叶变换
    7. dft = cv2.dft(np.float32(image), flags=cv2.DFT_COMPLEX_OUTPUT)
    8. dft_shift = np.fft.fftshift(dft)
    9. # 计算频谱图
    10. magnitude_spectrum = 20 * np.log(cv2.magnitude(dft_shift[:,:,0], dft_shift[:,:,1]))
    11. # 显示原始图像和频谱图
    12. plt.subplot(121), plt.imshow(image, cmap='gray')
    13. plt.title('Input Image'), plt.xticks([]), plt.yticks([])
    14. plt.subplot(122), plt.imshow(magnitude_spectrum, cmap='gray')
    15. plt.title('Magnitude Spectrum'), plt.xticks([]), plt.yticks([])
    16. plt.show()

    案例2:低通滤波器应用

    在医学图像处理中,经常使用傅里叶变换进行低通滤波,以去除图像中的噪声。

    代码解析
    1. import cv2
    2. import numpy as np
    3. import matplotlib.pyplot as plt
    4. # 读取图像
    5. image = cv2.imread('image.jpg', 0)
    6. # 进行傅里叶变换
    7. dft = cv2.dft(np.float32(image), flags=cv2.DFT_COMPLEX_OUTPUT)
    8. dft_shift = np.fft.fftshift(dft)
    9. # 创建一个低通滤波器
    10. rows, cols = image.shape
    11. crow, ccol = rows // 2 , cols // 2
    12. mask = np.zeros((rows, cols, 2), np.uint8)
    13. mask[crow-30:crow+30, ccol-30:ccol+30] = 1
    14. # 应用滤波器并逆变换
    15. fshift = dft_shift * mask
    16. f_ishift = np.fft.ifftshift(fshift)
    17. img_back = cv2.idft(f_ishift)
    18. img_back = cv2.magnitude(img_back[:,:,0], img_back[:,:,1])
    19. # 显示结果
    20. plt.subplot(131), plt.imshow(image, cmap='gray')
    21. plt.title('Input Image'), plt.xticks([]), plt.yticks([])
    22. plt.subplot(132), plt.imshow(mask[:,:,0], cmap='gray')
    23. plt.title('Mask'), plt.xticks([]), plt.yticks([])
    24. plt.subplot(133), plt.imshow(img_back, cmap='gray')
    25. plt.title('After LPF'), plt.xticks([]), plt.yticks([])
    26. plt.show()

    生活场景案例

    傅里叶变换在图像压缩、去噪和医学成像中应用广泛。

    总结

    傅里叶变换将图像从空间域转换到频率域,便于频率分析和处理。

    1.2 离散余弦变换 (Discrete Cosine Transform, DCT)

    介绍

    离散余弦变换(DCT)用于将图像分解为不同频率的余弦分量,广泛应用于图像压缩,如JPEG。

    原理

    DCT将图像表示为余弦函数的线性组合,有效地集中能量,使得大部分能量集中在较少的DCT系数中,便于压缩。

    公式

    一维离散余弦变换:

    案例:JPEG图像压缩

    在JPEG图像压缩中,DCT用于将图像块分解为频率成分,然后仅保留低频分量进行压缩。

    代码解析
    1. import cv2
    2. import numpy as np
    3. import matplotlib.pyplot as plt
    4. # 读取图像
    5. image = cv2.imread('image.jpg', 0)
    6. # 进行离散余弦变换
    7. dct = cv2.dct(np.float32(image))
    8. # 显示原始图像和DCT结果
    9. plt.subplot(121), plt.imshow(image, cmap='gray')
    10. plt.title('Input Image'), plt.xticks([]), plt.yticks([])
    11. plt.subplot(122), plt.imshow(dct, cmap='gray')
    12. plt.title('DCT Image'), plt.xticks([]), plt.yticks([])
    13. plt.show()

    生活场景案例

    DCT在JPEG图像压缩中广泛应用,通过压缩高频成分减少数据量。

    总结

    DCT将图像分解为余弦分量,实现能量集中和数据压缩。

    1.3 小波变换 (Wavelet Transform)

    介绍

    小波变换用于多分辨率分析,可以在不同尺度上分析图像特征,广泛应用于图像压缩和去噪。

    原理

    小波变换通过小波函数将图像分解为不同尺度和位置的子带,可以有效地表示图像中的局部特征。

    公式

    连续小波变换:

    案例

    使用Python和PyWavelets进行小波变换。

    代码解析
    1. import pywt
    2. import cv2
    3. import matplotlib.pyplot as plt
    4. # 读取图像
    5. image = cv2.imread('image.jpg', 0)
    6. # 进行小波变换
    7. coeffs2 = pywt.dwt2(image, 'bior1.3')
    8. LL, (LH, HL, HH) = coeffs2
    9. # 显示结果
    10. plt.figure(figsize=(12, 3))
    11. titles = ['Approximation', ' Horizontal detail', 'Vertical detail', 'Diagonal detail']
    12. for i, a in enumerate([LL, LH, HL, HH]):
    13. plt.subplot(1, 4, i + 1)
    14. plt.imshow(a, cmap='gray')
    15. plt.title(titles[i])
    16. plt.xticks([]), plt.yticks([])
    17. plt.show()

    案例2:图像去噪

    小波变换可以用于图像去噪,通过分解图像,滤除高频噪声并重构图像。

    代码解析
    1. import pywt
    2. import cv2
    3. import matplotlib.pyplot as plt
    4. # 读取图像
    5. image = cv2.imread('image.jpg', 0)
    6. # 进行小波变换
    7. coeffs2 = pywt.dwt2(image, 'bior1.3')
    8. LL, (LH, HL, HH) = coeffs2
    9. # 进行去噪处理
    10. coeffs2_filtered = LL, (LH * 0.5, HL * 0.5, HH * 0.5)
    11. # 重构图像
    12. image_reconstructed = pywt.idwt2(coeffs2_filtered, 'bior1.3')
    13. # 显示结果
    14. plt.subplot(131), plt.imshow(image, cmap='gray')
    15. plt.title('Original Image'), plt.xticks([]), plt.yticks([])
    16. plt.subplot(132), plt.imshow(LL, cmap='gray')
    17. plt.title('Approximation'), plt.xticks([]), plt.yticks([])
    18. plt.subplot(133), plt.imshow(image_reconstructed, cmap='gray')
    19. plt.title('Denoised Image'), plt.xticks([]), plt.yticks([])
    20. plt.show()

    生活场景案例

    小波变换在医学图像处理、数据压缩和去噪等领域有重要应用。

    总结

    小波变换通过多分辨率分析,有效处理图像中的细节和特征,实现压缩和去噪。

  • 相关阅读:
    ChatGPT 的 Text Completion
    Android Jetpack系列(一)起始篇:Jetpack 的前世今生
    网工自述:在誉天学习的一年里,我的工资从3800涨到15k,而且收获了爱情。
    Jmeter做接口测试
    前端面试话术集锦第 12 篇:高频考点(Vue常考基础知识点)
    Java笔记七(封装,继承与多态)
    07架构管理之架构评审方法
    [二分查找]
    干货丨如何开启TiDB集群中的节点通信加密?
    研究人员发现 OpenAI ChatGPT、Google Gemini 的漏洞
  • 原文地址:https://blog.csdn.net/LS_Ai/article/details/141070302