这是K近邻平滑滤波器的另一种方法——k近邻中值滤波器,在K近邻均值滤波器中有详细的介绍K近邻均值滤波器。
原理
在K近邻中值滤波器中,不选k个邻近像素的平均灰度来代替,而选k个邻近像素的中值灰度来代替。
python代码
img= np.array([[1,2,1,4,3],
[1,2,2,3,4],
[5,7,6,8,9],
[5,7,6,8,8],
[5,6,7,8,9]])
def meanKernel(center,matrix,k): #center:要替换点的坐标,matrix:目标所在kernel矩阵,k:近邻数
matrix = matrix.astype('int')
list1 = [[abs(i-center),i] for i in matrix.ravel()] #对目标所在的矩阵平铺展开,然后相减,然后排序,前k个对应的
list1.sort()
print(list1) #打印出排序后的list
print(np.sort(np.array(list1)[:k,1]))
return np.median(np.sort(np.array(list1)[:k,1])) # 取中位数
kernel = 3 #3*3模板
k = 5 #k近邻个数
def KNN(img,kernel,k):
result_img = img.copy()
for i in