图像处理与分析——实验四-图像恢复和滤波处理
实验目标:
- 掌握图像恢复基本方法和技术。
- 使用频域滤波去除图像中的条纹干扰。
- 应用自适应中值滤波器去除图像随机噪声。
一、
实验要求:
imgs目录下有图像windmill_noise.png,用Python写程序,去除条纹干扰。
实验图片路径为: imgs/windmill_noise.png
输出路径为:outputs/
请按照exp4_1_i的格式,输出每个任务结果
实验方案:
图像读取与预处理:
- 使用
Image.open
从指定路径读取图像,并使用convert('L')
转换为灰度图像。 - 将图像数据转换为numpy数组以便进行进一步处理。
1
2image = Image.open(image_path).convert('L')
image = np.array(image)- 使用
傅里叶变换:
- 对图像进行傅里叶变换,将图像从空间域转换到频域,使用
fft2
计算二维傅里叶变换。 - 使用
fftshift
调整傅里叶变换的结果,使零频率分量移到频谱的中心。
1
f_image = fftshift(fft2(image))
- 对图像进行傅里叶变换,将图像从空间域转换到频域,使用
频域过滤:
- 在频域中创建一个遮罩,精确地屏蔽掉导致条纹干扰的频率成分。
- 通过在中心列周围设置宽度的遮罩并保持中心线不变,避免完全阻断中心线。
1
2
3
4width = 20
for i in range(ccol - width, ccol + width):
if i != ccol:
f_image[crow-1:crow+1, i] = 0傅里叶逆变换与图像恢复:
- 对修改后的频域数据进行傅里叶逆变换,使用
ifft2
和ifftshift
恢复图像。 - 取结果的实部,并转换为图像格式以便保存和显示。
1
2
3if_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')- 对修改后的频域数据进行傅里叶逆变换,使用
实验结果:
原图与处理后的对比:
- 原图特点:
- 原图显示了一个风车的图像,但整个图像上有明显的垂直条纹,这些条纹覆盖了图像的细节,影响视觉效果。
- 处理后的图像:
- 处理后的图像中条纹被显著去除,风车和背景的细节更加清晰可见。
- 通过在频域内精确地屏蔽干扰的频率,有效地恢复了图像的原始外观。
分析:
- 使用傅里叶变换将图像转到频域后,条纹干扰在频域中表现为明显的峰值。通过屏蔽这些峰值,并进行傅里叶逆变换,条纹被有效地消除,恢复了图像的自然外观。
二、
实验要求:
imgs目录下有图像boardWithNoise.jpg,用Python写程序,采用自适应中值滤波器去除噪声干扰。
实验图片路径为: imgs/boardWithNoise.jpg
输出路径为:outputs/
请按照exp4_2_i的格式,输出每个任务结果
实验方案:
图像读取与预处理:
- 类似于任务一,读取并转换图像为灰度格式。
- 转换图像数据为numpy数组。
1
2img = Image.open(image_path).convert('L')
img_array = np.array(img, dtype=np.uint8)中值滤波:
- 实现中值滤波函数,其中包含使用
reflect
模式填充数据,避免引入边缘噪声。 - 在定义的窗口大小内,对每个像素点的周围像素进行中值运算。
1
2
3
4
5
6
7
8
9def 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- 实现中值滤波函数,其中包含使用
滤波应用与图像保存:
- 应用中值滤波器到图像数组上,处理噪声。
- 将处理后的图像数组转换回图像格式,并保存。
1
2
3filtered_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')
实验结果:
- 原图特点:
- 原图是一块电路板的照片,图中存在大量随机噪声,这些噪声点扭曲了电路板的细节,使得图像看起来粗糙且细节不清。
- 处理后的图像:
- 经过自适应中值滤波处理后,大部分的噪声被清除,电路板上的元件和线路更加清晰。
- 中值滤波通过考虑像素的局部邻域并选取中值来替换目标像素,有效去除了随机噪声,同时保持了边缘的锐度。
分析:
- 自适应中值滤波不仅去除了噪声,还保留了图像的边缘和细节,这对于电路板等需要精确细节的图像尤其重要。
- 中值滤波特别适合去除这类“胡椒和盐”类型的噪声,因为它不依赖于邻域的均值或者其他线性操作,避免了过度平滑和细节损失。
实验总结:
本次实验主要探索了两种图像恢复技术:频域滤波和自适应中值滤波。在第一项任务中,我通过傅里叶变换成功地去除了图像中的条纹干扰,这一过程不仅提高了图像的视觉质量,还加深了我对频域分析方法在实际应用中的理解。通过适当的频域遮罩,能够精确地消除特定类型的图像噪声,显示了频域技术在图像处理领域的强大能力。
在第二项任务中,自适应中值滤波器被用于有效去除电路板图像中的随机噪声。与传统的中值滤波不同,自适应中值滤波考虑了像素的局部变异,更好地保留了图像的细节和边缘信息。这一方法对于处理随机噪声尤为有效,尤其是在噪声点随机分布的情况下。
通过这两种方法,我不仅提高了图像的质量,还验证了这些技术在处理不同类型噪声方面的适应性和效果。这次实验的成功展示了现代图像处理技术的多样性和实用性,为我解决更复杂的图像处理问题提供了宝贵的经验和技术支持。
- 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