对于单像素的噪点来说:当一个像素点与周围一圈像素点颜色不一样,我们认为是一个噪点
如下图(简单二值化图片)所示,红色选中的为噪点,因为周围8个像素点和它颜色都不一样
我们很快就联想到Numpy中数组或者矩阵对象该怎么去应用:
- 对像素点周围一圈的矩阵做一个截取
- 统计截取的矩阵有多少个像素点,如果有一个(即像素点本身),则认为是噪点
处理后的效果应为:
简单代码为例:
__author__ = '老爷'
import numpy as np
def denoise_1px(array):
row, column = array.shape
for y in range(row):
for x in range(column):
if array[x, y] and (np.count_nonzero(array[x-1:x+2, y-1:y+2])-1==0):
array[x, y] = 0
return array
if __name__ == '__main__':
pic_list = [
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 1, 0, 1, 0],
[0, 0, 0, 0, 1, 1],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]
]
a_array = np.array(pic_list)
b_array = denoise_1px(a_array)
print('降噪前:')
print(a_array)
print('降噪后:')
print(b_array)
执行结果:
D:\Python3\python.exe D:/PycharmProjects/DataAnalysis/LearnNumpy/Denoise.py
降噪前:
[[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 1 0 1 0]
[0 0 0 0 1 1]
[0 0 0 0 0 0]
[0 0 0 0 0 0]]
降噪后:
[[0 0 0 0 0 0]
[0 0 0 0 0 0]
[0 0 0 0 1 0]
[0 0 0 0 1 1]
[0 0 0 0 0 0]
[0 0 0 0 0 0]]
Process finished with exit code 0