数字图像处理(3)——频域图像增强

2024-01-02 12:41:48

🔥博客主页:是dream

🚀系列专栏:深度学习环境搭建环境配置问题解决自然语言处理语音信号处理项目开发

💘每日语录:贤才,难进易出;庸才,易进易初出;奴才,易进难出。

🎉感谢大家点赞👍收藏?指正??

?

?

一、实验内容

(1)傅里叶变换

????????实验内容:分别使用OpenCV和Numpy工具包中的函数进行傅里叶变换,要求显示图像移中后的幅值谱和相位谱,以及重构后的图像。结果展示部分应包含原图、幅值谱、相位谱、重构图像。

(2)图像加噪和频域滤波

????????实验内容:先给图像添加高斯噪声(0均值,0.1方差),再使用理想低通滤波器对图像进行低通平滑滤波,分析不同截止频率的滤波性能。结果展示部分应包括原图、噪声图、频域噪声图幅值谱、滤波后幅值谱、滤波后相位谱、重构图像等。

二、实验环境

? ? ? ? PaddlePaddle 2.3.2,Python==3.7,Numpy,Cv2,Matplotlib,RAM 8GB

三、实验过程

(1)傅里叶变换思路

????????首先添加高斯噪声到原始图像。可以使用均值为0和方差为0.1的高斯噪声。进行傅里叶变换,然后计算频域幅值谱和相位谱。设计不同截止频率的理想低通滤波器。可以尝试不同的截止频率值,如r1、r2、r3等。对频域图像进行滤波,将低频部分保留,高频部分丢弃,以实现低通滤波。计算滤波后的频域幅值谱。进行傅里叶逆变换,以重构滤波后的图像。显示一组图像,包括原始图像、噪声图像、频域噪声图幅值谱、不同截止频率下的滤波后幅值谱、滤波后相位谱、重构图像。

????????代码实现如下:

import numpy as np
import cv2 as cv
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties

# 1. 读取图像
img = cv.imread('./work/img/paopao.jpg', 0)

# 2. 傅里叶变换
# 2.1 正变换
f_transform = np.fft.fft2(img)

# 2.2 频谱中心化
f_transform_shifted = np.fft.fftshift(f_transform)

# 2.3 计算频谱和相位谱
# 直角坐标转换为极坐标: cv.cartToPolar()函数
magnitude_spectrum, phase_spectrum = cv.cartToPolar(f_transform_shifted.real, f_transform_shifted.imag)

# 3. 傅里叶逆变换
# 3.1 反变换
f_transform_unshifted = np.fft.ifftshift(f_transform_shifted)
reconstructed_image = np.fft.ifft2(f_transform_unshifted)

# 3.2 计算灰度值
reconstructed_image = np.abs(reconstructed_image).astype(np.uint8)

# 4. 图像显示
font = FontProperties(fname="SimHei.ttf")  # 使用系统中的SimHei字体

plt.subplot(2, 3, 1), plt.imshow(img, cmap='gray')
plt.title('原始图像', fontproperties=font)

plt.subplot(2, 3, 2), plt.imshow(np.log(magnitude_spectrum), cmap='gray')
plt.title('幅值谱', fontproperties=font)

plt.subplot(2, 3, 3), plt.imshow(phase_spectrum, cmap='gray')
plt.title('相位谱', fontproperties=font)

plt.subplot(2, 3, 4), plt.imshow(reconstructed_image, cmap='gray')
plt.title('重构图像', fontproperties=font)

plt.show()

????????实验结果:?

(2)图像加噪和频域滤波思路

????????首先,读取原始图像,然后添加高斯噪声以模拟实际图像的噪声情况。接下来,进行傅里叶变换,将图像转换到频域,分析其幅值谱和相位谱。然后,设计理想低通滤波器,并应用不同截止频率进行滤波,以比较滤波性能。最后,进行傅里叶逆变换以重构图像。实验结果以一组图像形式呈现,包括原始图像、噪声图、频域噪声图幅值谱、不同截止频率下的滤波后幅值谱、滤波后相位谱以及重构图像,以清晰展示频域滤波在去除噪声和恢复图像方面的效果。

????????代码实现:

import cv2
import numpy as np
from matplotlib import pyplot as plt
from matplotlib.font_manager import FontProperties
font = FontProperties(fname="SimHei.ttf")
# 1. 读取图像
img = cv2.imread('./work/img/paopao.jpg',0)

# 2. 添加高斯噪声
def addGaussianNoise(image, mean=0, var=0.1):
    row, col = image.shape
    sigma = var ** 0.5
    gauss = np.random.normal(mean, sigma, (row, col))
    noisy = image + gauss
    noisy = np.clip(noisy, 0, 255)
    noisy = noisy.astype(np.uint8)
    return noisy

img_noisy = addGaussianNoise(img)

# 3. 傅里叶变换
f_transform = np.fft.fft2(img_noisy)
fshift = np.fft.fftshift(f_transform)

# 4. 计算幅值谱
magnitude_spectrum0 = 20 * np.log(1 + np.abs(fshift))

# 5. 理想低通滤波
r = 20  # 截止频率的设置
[m, n] = fshift.shape
H = np.zeros((m, n), dtype=complex)  # 滤波核
for i in range(m):
    for j in range(n):
        d = np.sqrt((i - m/2)**2 + (j - n/2)**2)
        if d < r:
            H[i, j] = 1

G = fshift * H  # 理想低通滤波
magnitude_spectrum1 = 20 * np.log(1 + np.abs(G))

# 6. 傅里叶逆变换
f1 = np.fft.ifftshift(G)
img_reconstructed = np.abs(np.fft.ifft2(f1)).astype(np.uint8)

# 7. 图像显示
plt.subplot(2, 3, 1), plt.imshow(img, cmap='gray')
plt.title('原始图像', fontproperties=font)

plt.subplot(2, 3, 2), plt.imshow(img_noisy, cmap='gray')
plt.title('噪声', fontproperties=font)

plt.subplot(2, 3, 3), plt.imshow(magnitude_spectrum0, cmap='gray')
plt.title('频域噪声图', fontproperties=font)

plt.subplot(2, 3, 4), plt.imshow(magnitude_spectrum1, cmap='gray')
plt.title('滤波后的幅值谱', fontproperties=font)

plt.subplot(2, 3, 5), plt.imshow(np.angle(fshift), cmap='gray')
plt.title('频谱(有噪声)', fontproperties=font)

plt.subplot(2, 3, 6), plt.imshow(img_reconstructed, cmap='gray')
plt.title('最终图像', fontproperties=font)

plt.show()

? ? ? ? 实验结果:?

四、实验心得?

????????在本次实验中,首先读取一张原始图像并添加高斯噪声,以模拟实际噪声情况。然后,进行了傅里叶变换,计算了频域的幅值谱和相位谱。接下来,设计不同截止频率的理想低通滤波器,以控制滤波的效果,并对频域图像进行滤波,保留了低频部分,丢弃高频部分,实现低通滤波。尝试不同的截止频率值以观察滤波性能的变化。然后,计算滤波后的频域幅值谱。最后,进行傅里叶逆变换以重构滤波后的图像,并将一组图像显示出来,包括原始图像、噪声图像、频域噪声图幅值谱、不同截止频率下的滤波后幅值谱、滤波后相位谱、重构图像。

????????然后就是如何给图像添加高斯噪声,这是一个常见的图像处理问题。接着使用傅里叶变换技术将图像从空间域转换到频域,以便进行频域滤波操作。通过理想低通滤波器,能够控制截止频率,从而实现不同程度的频域平滑滤波。这对于去除高频噪声或细节以及实现图像平滑非常有用。通过调整截止频率,可以观察到不同滤波效果,这对于理解滤波器设计的重要性非常有帮助。此外,接着就是进行傅里叶逆变换,将滤波后的频域图像恢复到空间域,得到重构图像。这样可以比较原始图像和滤波后的图像,从而评估滤波的效果。?

?

文章来源:https://blog.csdn.net/qq_63159704/article/details/135335534
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。