改进的带噪图像极值中值滤波程序
时间: 2024-01-22 21:20:21 浏览: 172
带噪图像极值中值滤波是一种常见的去噪方法,可以有效地去除图像中的椒盐噪声和胡椒噪声。以下是一个改进的带噪图像极值中值滤波程序的示例。
```python
import numpy as np
import cv2
def median_extreme_filter(img, ksize, threshold):
# 获取图像大小和通道数
h, w = img.shape[:2]
c = 1 if len(img.shape) == 2 else img.shape[2]
# 计算边缘扩展的大小
border = ksize // 2
# 对图像进行边缘扩展
img_ext = cv2.copyMakeBorder(img, border, border, border, border, cv2.BORDER_REPLICATE)
# 初始化输出图像
img_out = np.zeros((h, w, c), dtype=np.uint8)
# 遍历图像
for i in range(border, h + border):
for j in range(border, w + border):
# 获取当前像素邻域
roi = img_ext[i-border:i+border+1, j-border:j+border+1]
# 计算当前像素邻域的中值和极值
median = np.median(roi)
max_val = np.max(roi)
min_val = np.min(roi)
# 判断是否需要进行中值滤波
if max_val - min_val > threshold:
img_out[i-border, j-border] = median
else:
img_out[i-border, j-border] = img[i-border, j-border]
return img_out
```
该函数的输入参数包括:
- `img`:待处理的输入图像,可以是灰度图像或彩色图像。
- `ksize`:滤波器的大小,必须是正奇数。
- `threshold`:极值差阈值,如果当前像素邻域的极值差大于该阈值,则采用中值滤波。
该函数的输出为经过带噪图像极值中值滤波处理后的输出图像。
使用示例:
```python
import cv2
# 读入图像
img = cv2.imread('input.jpg')
# 进行带噪图像极值中值滤波处理
img_filtered = median_extreme_filter(img, ksize=3, threshold=50)
# 显示原始图像和处理后的图像
cv2.imshow('Input', img)
cv2.imshow('Filtered', img_filtered)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在使用时,可以根据实际情况调整滤波器大小和极值差阈值来获得更好的去噪效果。
阅读全文