图像8连接没有过多的分支?

时间:2010-04-13 09:06:06

标签: performance image-processing

我正在编写一个低级图像处理算法,需要对像素进行大量8次连接检查。对于每个像素,我经常需要检查它上面,它下面以及它的两侧和对角线上的像素。

在图像的边缘有一些特殊情况,其中像素只有5或3个邻居而不是8个邻居。天真的方法是每次访问都检查坐标是否在正确的范围内,如果没有,则返回一些默认值。

我正在寻找避免所有这些检查的方法,因为它们会给算法带来很大的开销。是否有任何技巧可以完全避免它?

3 个答案:

答案 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的建议,忽略每个边框的最外面的像素,如果这适合你。换句话说,只处理图像的内部像素。