经典图像自适应滤波python代码怎么写?
时间: 2024-01-31 21:02:11 浏览: 78
自适应滤波原理第四版答案与代码(高清)
经典图像自适应滤波是指根据图像局部区域的统计信息,对该区域内的像素进行滤波。常用的经典图像自适应滤波算法有均值滤波、中值滤波、高斯滤波等。下面是一个基于Python实现的经典图像自适应中值滤波的代码:
```python
import cv2
import numpy as np
def adaptive_median_filter(img, max_window_size):
# 获取图像的行数和列数
rows, cols = img.shape
# 初始化输出图像
out = np.zeros((rows, cols), dtype=np.uint8)
# 遍历每个像素
for i in range(rows):
for j in range(cols):
# 初始化窗口大小为3
window_size = 3
while window_size <= max_window_size:
# 计算滑动窗口的上下左右边界
top = i - (window_size // 2)
bottom = i + (window_size // 2)
left = j - (window_size // 2)
right = j + (window_size // 2)
# 处理边界情况
if top < 0:
top = 0
if bottom >= rows:
bottom = rows - 1
if left < 0:
left = 0
if right >= cols:
right = cols - 1
# 获取当前窗口内的像素值
window = img[top:bottom+1, left:right+1].flatten()
# 计算窗口内像素的中值和均值
median = np.median(window)
mean = np.mean(window)
# 如果当前像素值位于中值和均值之间,则输出中值
if median < img[i, j] < mean:
out[i, j] = median
break
# 如果当前窗口大小超过最大窗口大小,则输出中值
if window_size == max_window_size:
out[i, j] = median
break
# 增大窗口大小
window_size += 2
return out
# 载入图像
img = cv2.imread('test.jpg', 0)
# 调用自适应中值滤波函数
out = adaptive_median_filter(img, 7)
# 显示原图和处理后的图像
cv2.imshow('Input', img)
cv2.imshow('Output', out)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的代码中,我们定义了一个`adaptive_median_filter`函数来实现自适应中值滤波。该函数接受两个参数,分别是输入图像和最大窗口大小。在函数中,我们首先初始化输出图像,然后遍历每个像素。对于每个像素,我们从窗口大小为3开始,逐渐增大窗口大小,直到达到最大窗口大小为止。在每个窗口内,我们计算窗口内像素的中值和均值,并根据中值和均值的大小关系来判断是否需要输出中值。如果当前窗口大小已经达到最大窗口大小,或者当前像素值位于中值和均值之间,则输出中值。最后,我们将处理后的图像返回给调用者。
阅读全文