对于图像中的椒盐噪点,通常的滤除算法是【中值滤波】,这个算法的效果很不错。
但是,对每个像素的扫描处理,都需要进行一次排序,通常的滤波窗口是3×3个像素,
这就意味着,对每个像素都要【排序9个数据】,对于一幅图来说,这个运算量不小,
目前,我还没有找到可以满足需求的快速排序算法。
不过,我现在只需要处理二值化位图,和256级灰度位图相比,二值化位图只有0和255,
所以,我只要统计一下5×5窗口内的【255】的个数,只要【255】的像素个数超过12个,
那么,5×5窗口内的中位数一定是【255】,否则,中位数是【0】。
我用C语言编写了测试,处理速度还是无法让我满意,所以我学习了一点MASM编程,
用AVX2指令来提高运行速度,果然,处理速度是C语言的8到9倍,在i7的CPU上面,
处理一幅640×480位图,需要0.22毫秒。
MyDetectDenoise PROC
neg r9d
mov qword ptr [rsp + 08h], r12
mov qword ptr [rsp + 10h], r13
mov qword ptr [rsp + 18h], r14
mov qword ptr [rsp + 20h], r15
mov r12, qword ptr [rsp + 28h] ; currMasks
mov r15, qword ptr [rsp &