代码之家  ›  专栏  ›  技术社区  ›  shoosh

图8-没有过度分支的连接性?

  •  0
  • shoosh  · 技术社区  · 14 年前

    我正在写一个低层次的图像处理算法,它需要做很多8个像素连接检查。对于每一个像素,我经常需要检查它上面,下面,它的边和对角线上的像素。

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

    我正在寻找一种避免所有这些检查的方法,因为它们会给算法带来很大的开销。有什么诀窍可以完全避免吗?

    3 回复  |  直到 14 年前
        1
  •  3
  •   Paul R    14 年前

    对于性能关键型代码,可以执行以下操作:

    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
    

    大部分操作都在内部循环中,没有分支。您只需在特殊情况下处理第一行/最后一行以及每行的第一个/最后一个像素。它使代码更庞大,但这是优化的本质。

        2
  •  2
  •   Roger Pate    14 年前

    如果有适合算法的值,请添加1像素边框并仅检查原始像素数据。

        3
  •  2
  •   High Performance Mark    14 年前

    或者,要改变@roger的建议,忽略每个边界最外面的像素,如果这对您有用的话。换句话说,只处理图像的内部像素。