我正在编写一个低级图像处理算法,需要对像素进行大量8次连接检查。对于每个像素,我经常需要检查它上面,它下面以及它的两侧和对角线上的像素。
在图像的边缘有一些特殊情况,其中像素只有5或3个邻居而不是8个邻居。天真的方法是每次访问都检查坐标是否在正确的范围内,如果没有,则返回一些默认值。
我正在寻找避免所有这些检查的方法,因为它们会给算法带来很大的开销。是否有任何技巧可以完全避免它?
答案 0 :(得分:3)
对于性能关键代码,您可以执行以下操作:
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
大部分操作都在内部循环中,并且是无分支的。您只需处理第一行/最后一行,以及每行的第一个/最后一个像素,作为特殊情况。它使代码变得更加庞大,但在优化方面,这就是野兽的本质。
答案 1 :(得分:2)
如果您的算法有合适的值,请添加1像素边框并仅检查原始像素数据。
答案 2 :(得分:2)
或者,要转换@Roger的建议,忽略每个边框的最外面的像素,如果这适合你。换句话说,只处理图像的内部像素。