knn平滑滤波算法实现
时间: 2023-07-22 08:05:12 浏览: 115
KNN平滑滤波算法是一种基于邻近点的滤波算法,其思想是用某个点周围的K个邻近点的平均值来代替该点的像素值,以达到平滑图像的目的。下面给出KNN平滑滤波算法的实现过程:
1. 读入原始图像,并设定邻域大小K。
2. 对于每个像素点,计算它周围K个邻近点的平均灰度值。
3. 将该像素点的灰度值替换为计算出的平均灰度值。
4. 将处理后的图像保存。
以下是Python代码实现KNN平滑滤波算法:
```python
import numpy as np
import cv2
# 读入原始图像
img = cv2.imread('input.jpg', cv2.IMREAD_GRAYSCALE)
# 设定邻域大小为3
K = 3
# 定义KNN平滑滤波函数
def knn_smooth(img, K):
# 获取图像的行数和列数
rows, cols = img.shape
# 定义一个空的结果图像
result = np.zeros_like(img)
# 对于每个像素点
for i in range(rows):
for j in range(cols):
# 计算该像素点周围K个邻近点的平均灰度值
top = max(0, i - K//2)
bottom = min(rows, i + K//2 + 1)
left = max(0, j - K//2)
right = min(cols, j + K//2 + 1)
neighbors = img[top:bottom, left:right]
result[i,j] = np.mean(neighbors)
return result
# 调用KNN平滑滤波函数
result = knn_smooth(img, K)
# 保存处理后的图像
cv2.imwrite('result.jpg', result)
```
在上述代码中,我们首先读入原始图像,并设定邻域大小K为3。然后定义了一个名为knn_smooth的函数,用于实现KNN平滑滤波算法。在该函数中,我们首先获取图像的行数和列数,然后对于每个像素点,计算该点周围K个邻近点的平均灰度值,并将该点的像素值替换为计算出的平均灰度值。最后,我们调用该函数,并保存处理后的图像。
阅读全文