使用python代码实现上诉滤波
时间: 2023-07-30 10:07:16 浏览: 44
下面是使用Python代码实现自适应中值滤波的示例:
``` python
import cv2
import numpy as np
def adaptive_median_filter(img, maxWindowSize):
# 定义窗口大小的初始值
windowSize = 3
# 复制原始图像
result = img.copy()
# 获取图像宽度和高度
height, width = img.shape[:2]
# 遍历所有像素点
for i in range(height):
for j in range(width):
# 获取当前像素点的窗口
window = img[max(0, i - windowSize//2):min(height, i + windowSize//2 + 1),
max(0, j - windowSize//2):min(width, j + windowSize//2 + 1)]
# 对窗口内的像素点进行排序
sortedWindow = np.sort(window.flatten())
# 计算中值
median = sortedWindow[len(sortedWindow) // 2]
# 判断中值是否等于当前像素点的灰度值
if median != img[i, j]:
# 增加窗口大小
windowSize += 2
if windowSize > maxWindowSize:
windowSize = maxWindowSize
# 重新获取窗口
window = img[max(0, i - windowSize//2):min(height, i + windowSize//2 + 1),
max(0, j - windowSize//2):min(width, j + windowSize//2 + 1)]
# 重新计算中值
sortedWindow = np.sort(window.flatten())
median = sortedWindow[len(sortedWindow) // 2]
# 将中值赋值给当前像素点
result[i, j] = median
# 返回滤波后的图像
return result
# 读取原始图像
img = cv2.imread('lena.jpg', 0)
# 自适应中值滤波
result = adaptive_median_filter(img, maxWindowSize=11)
# 显示原始图像和滤波后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Adaptive Median Filtered Image', result)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上述代码中,`adaptive_median_filter` 函数实现了自适应中值滤波的过程。该函数接受原始图像和最大窗口大小作为参数,返回滤波后的图像。在函数内部,我们遍历所有像素点,对每个像素点进行中值滤波。如果中值不等于当前像素点的灰度值,就增加窗口大小,重新计算中值。当窗口大小达到最大值时,不再增加窗口大小。最后返回滤波后的图像。
在示例代码中,我们使用 OpenCV 库来读取和显示图像。你可以将代码中的 `lena.jpg` 替换成其他图像文件,测试自适应中值滤波的效果。