我正在写一个低级图像处理算法,它需要对像素进行大量的8连通性检查。对于每个像素,我经常需要检查它上面、下面、边上和对角线上的像素。
在图像的边缘,有一些特殊情况,一个像素只有5到3个邻居,而不是8个邻居。最简单的方法是每次访问都检查坐标是否在正确的范围内,如果不在,则返回一些默认值。
我正在寻找一种方法来避免所有这些检查,因为它们会给算法带来很大的开销。有什么技巧可以完全避免它吗?
发布于 2010-04-13 17:10:52
对于性能关键型代码,您可能会执行类似以下操作:
process row 0
for r = 1 to M - 2
process row r, pixel 0
for c = 1 to N - 2
process row r, pixel c
process row r, pixel N - 1
process row M - 1大部分操作都在内部循环中,并且是无分支的。作为特殊情况,您只需处理第一行/最后一行,以及每行的第一个/最后一个像素。这会使代码变得更笨重,但这就是优化的本质。
发布于 2010-04-13 17:10:31
如果您的算法有合适的值,请添加一个1像素的边框,并仅检查原始像素数据。
发布于 2010-04-13 17:16:05
或者,为了扭转@Roger的建议,忽略每个边框的最外面的像素,如果这对你有效的话。换句话说,只处理图像的内部像素。
https://stackoverflow.com/questions/2628271
复制相似问题