不使用sklearn,不需要转换为灰度图 (1)对5张灰度图片进行添加3种噪声,每种噪声3种参数组合 (2)接着(1),采用中值滤波、维纳滤波、自适应中值滤波进行平滑,每种算法3种滤波参数 (3)接着(2),绘制出灰度直方图,并进行均衡化处理
时间: 2024-09-28 21:08:57 浏览: 59
要在Python中完成上述任务,我们将使用OpenCV库来进行图像处理,因为OpenCV提供了丰富的图像操作功能,包括添加噪声、滤波和平滑处理以及直方图均衡化。这里假设我们已经导入了必要的库,如numpy和opencv-python:
```python
import numpy as np
import cv2
# 1. 添加噪声
# 三种噪声:高斯噪声、椒盐噪声和泊松噪声
def add_noises(image, noise_type, params):
if noise_type == 'gaussian':
image += np.random.normal(0, params[0], image.shape)
elif noise_type == 'salt_and_pepper':
salt_mask = np.random.rand(*image.shape) < params[0]
pepper_mask = np.random.rand(*image.shape) > 1 - params[0]
image[salt_mask] = 255
image[pepper_mask] = 0
elif noise_type == 'poisson':
noisy_image = np.random.poisson(image.astype('uint16')) // 1
return noisy_image
# 示例参数:
images = [cv2.imread(f"image_{i}.jpg", cv2.IMREAD_GRAYSCALE) for i in range(1, 6)] # 读取5张灰度图片
noise_combinations = [
('gaussian', [10, 20, 30]),
('salt_and_pepper', [0.05, 0.1, 0.15]),
('poisson', [10, 20, 30]) # 每种噪声3种参数
]
for img in images:
for noise_type, params in noise_combinations:
noisy_img = add_noises(img, noise_type, params)
# 2. 图像平滑
methods = ['median', 'wiener', 'adaptive_median']
filter_params = {
'median': [5, 7, 9],
'wiener': [3, 5, 7],
'adaptive_median': [None, None, cv2.adaptiveMedianFilterparams(cv2.ADAPTIVE_THRESH_MEAN_C, cv2.MEDIAN_C, 5, 3)]
}
for method in methods:
for param in filter_params[method]:
filtered_img = getattr(cv2, method)(noisy_img, param)
cv2.imwrite(f"{method}_{param}_filtered.jpg", filtered_img)
# 3. 直方图均衡化
for img in [filtered_img for _ in methods for _ in filter_params[method]]:
eq_img = cv2.equalizeHist(img)
cv2.imwrite(f"{img_name}_equilibrated.jpg", eq_img)
```
在这个例子中,我们没有直接使用sklearn库,而是通过OpenCV实现了添加噪声、平滑和直方图均衡化的功能。每次处理完一张图片后,都会保存结果以供后续分析。
阅读全文
相关推荐


















