图像处理与分析——实验四-图像恢复和滤波处理

ELecmark VIP

实验目标:

  • 掌握图像恢复基本方法和技术。
  • 使用频域滤波去除图像中的条纹干扰。
  • 应用自适应中值滤波器去除图像随机噪声。

一、

实验要求:

imgs目录下有图像windmill_noise.png,用Python写程序,去除条纹干扰。

实验图片路径为: imgs/windmill_noise.png

输出路径为:outputs/

请按照exp4_1_i的格式,输出每个任务结果

实验方案:

  1. 图像读取与预处理

    • 使用 Image.open 从指定路径读取图像,并使用 convert('L') 转换为灰度图像。
    • 将图像数据转换为numpy数组以便进行进一步处理。
    1
    2
    image = Image.open(image_path).convert('L')
    image = np.array(image)
  2. 傅里叶变换

    • 对图像进行傅里叶变换,将图像从空间域转换到频域,使用 fft2 计算二维傅里叶变换。
    • 使用 fftshift 调整傅里叶变换的结果,使零频率分量移到频谱的中心。
    1
    f_image = fftshift(fft2(image))
  3. 频域过滤

    • 在频域中创建一个遮罩,精确地屏蔽掉导致条纹干扰的频率成分。
    • 通过在中心列周围设置宽度的遮罩并保持中心线不变,避免完全阻断中心线。
    1
    2
    3
    4
    width = 20
    for i in range(ccol - width, ccol + width):
    if i != ccol:
    f_image[crow-1:crow+1, i] = 0
  4. 傅里叶逆变换与图像恢复

    • 对修改后的频域数据进行傅里叶逆变换,使用 ifft2ifftshift 恢复图像。
    • 取结果的实部,并转换为图像格式以便保存和显示。
    1
    2
    3
    if_image = ifft2(ifftshift(f_image))
    filtered_image = np.abs(if_image).astype(np.uint8)
    Image.fromarray(filtered_image).save(output_path + 'exp4_1_1.png')

实验结果:

1

原图与处理后的对比

  1. 原图特点
    • 原图显示了一个风车的图像,但整个图像上有明显的垂直条纹,这些条纹覆盖了图像的细节,影响视觉效果。
  2. 处理后的图像
    • 处理后的图像中条纹被显著去除,风车和背景的细节更加清晰可见。
    • 通过在频域内精确地屏蔽干扰的频率,有效地恢复了图像的原始外观。

分析

  • 使用傅里叶变换将图像转到频域后,条纹干扰在频域中表现为明显的峰值。通过屏蔽这些峰值,并进行傅里叶逆变换,条纹被有效地消除,恢复了图像的自然外观。

二、

实验要求:

imgs目录下有图像boardWithNoise.jpg,用Python写程序,采用自适应中值滤波器去除噪声干扰。

实验图片路径为: imgs/boardWithNoise.jpg

输出路径为:outputs/

请按照exp4_2_i的格式,输出每个任务结果

实验方案:

  1. 图像读取与预处理

    • 类似于任务一,读取并转换图像为灰度格式。
    • 转换图像数据为numpy数组。
    1
    2
    img = Image.open(image_path).convert('L')
    img_array = np.array(img, dtype=np.uint8)
  2. 中值滤波

    • 实现中值滤波函数,其中包含使用 reflect 模式填充数据,避免引入边缘噪声。
    • 在定义的窗口大小内,对每个像素点的周围像素进行中值运算。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    def median_filter(data, kernel_size):
    edge = kernel_size // 2
    data_padded = np.pad(data, pad_width=edge, mode='reflect')
    result = np.zeros(data.shape)
    for i in range(data.shape[0]):
    for j in range(data.shape[1]):
    local_pixels = data_padded[i:i + kernel_size, j:j + kernel_size]
    result[i, j] = np.median(local_pixels)
    return result
  3. 滤波应用与图像保存

    • 应用中值滤波器到图像数组上,处理噪声。
    • 将处理后的图像数组转换回图像格式,并保存。
    1
    2
    3
    filtered_img_array = median_filter(img_array, window_size)
    filtered_img = Image.fromarray(filtered_img_array.astype(np.uint8))
    filtered_img.save(output_path + 'exp4_2_1.jpg')

实验结果:

2

  1. 原图特点
    • 原图是一块电路板的照片,图中存在大量随机噪声,这些噪声点扭曲了电路板的细节,使得图像看起来粗糙且细节不清。
  2. 处理后的图像
    • 经过自适应中值滤波处理后,大部分的噪声被清除,电路板上的元件和线路更加清晰。
    • 中值滤波通过考虑像素的局部邻域并选取中值来替换目标像素,有效去除了随机噪声,同时保持了边缘的锐度。

分析

  • 自适应中值滤波不仅去除了噪声,还保留了图像的边缘和细节,这对于电路板等需要精确细节的图像尤其重要。
  • 中值滤波特别适合去除这类“胡椒和盐”类型的噪声,因为它不依赖于邻域的均值或者其他线性操作,避免了过度平滑和细节损失。

实验总结:

​ 本次实验主要探索了两种图像恢复技术:频域滤波和自适应中值滤波。在第一项任务中,我通过傅里叶变换成功地去除了图像中的条纹干扰,这一过程不仅提高了图像的视觉质量,还加深了我对频域分析方法在实际应用中的理解。通过适当的频域遮罩,能够精确地消除特定类型的图像噪声,显示了频域技术在图像处理领域的强大能力。

​ 在第二项任务中,自适应中值滤波器被用于有效去除电路板图像中的随机噪声。与传统的中值滤波不同,自适应中值滤波考虑了像素的局部变异,更好地保留了图像的细节和边缘信息。这一方法对于处理随机噪声尤为有效,尤其是在噪声点随机分布的情况下。

​ 通过这两种方法,我不仅提高了图像的质量,还验证了这些技术在处理不同类型噪声方面的适应性和效果。这次实验的成功展示了现代图像处理技术的多样性和实用性,为我解决更复杂的图像处理问题提供了宝贵的经验和技术支持。

  • Title: 图像处理与分析——实验四-图像恢复和滤波处理
  • Author: ELecmark
  • Created at : 2024-05-11 12:04:58
  • Updated at : 2024-05-11 17:22:42
  • Link: https://elecmark.github.io/2024/05/11/图像处理与分析——实验四-图像恢复和滤波处理/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments