本人自己用的简单暴力的去噪思路:
把图片分成众多小矩形,每一个小矩形进行判断白点(图片已经二值化处理),如果该矩形内的白点大于一个值(这个值可以根据你取得矩形的大小进行酌情处理)。小于这个值则这一块的值变成0(黑色)。
过程:
我有如下部分代码
.... # 图片已经打开,保存在img变量里面
pixel = img.load()
print(pixel[x,y]) # 打印出坐标为(x,y)的像素值
利用PIL库的im.load方法(im.load方法算是PIL库里面处理像素问题比较快的),可以得到一个图片每个像素的像素值,实质上是一个二维队列(就像C语言里面的二维数组),注意:如果你将图片二值化(图片convert(‘1’),)或者convert(‘1’),就只会显示一个数字。例如:
img2 = img.convert('L')
pixel2 = img2.load()
print(pixel2[x,y]) # 显示一个数字,该数字位于0~255之间,每个像素用8bit表示
# 如果前面是img2 = img.convert('1')二值化后,结果只可能是0(黑),或者255(白0
在RGB模式或者RGBA模式下,打印一个像素的值,结果会显示一个元祖,形式为(R值,G值,B值)或者(R值,G值,B值,A值)。
以上大概介绍了一下load之后获得了一个二维列表,接下来开始进行去噪处理:
本人的思路是,先图片二值化,利用2个for循环遍历整个图片大小的像素值,将图片切成一个个小矩形,判断每个矩形内白点,然后设定一个值(这个值根据你切的大小以及像素多少自己定义个数字就可以了),矩形是越小越好,越小虽然会增加计算机的计算时间,但可以使图片去噪效率更高。
我这里上了我那次辅助的去噪代码(部分)
图片是480*360分