0

我想使用霍夫圆检测加速图像处理。

   // For all rows in image:
   for y:=0 to AnalysisBitmap.Height-1 do
   begin
   // For all pixel in one row :
   for x:=0 to AnalysisBitmap.Width-1 do
   begin
      // Is there a point  ?
      if IsPixel(x,y, AnalysisBitmap, 128 ) then
      begin
           for theta:=0 to max_theta do
           begin
                TestPoint.x := round ( x -  r  *  cos(theta*PI/max_theta) );
                TestPoint.y := round ( y -  r  *  sin(theta*PI/max_theta));

               if ((testPoint.x < ImageWidth) and  (testPoint.x > 0 )  and
                  (testPoint.y < ImageHeight ) and  (testPoint.y > 0 ) )   then Inc(aHoughResult[TestPoint.x,TestPoint.y]);
           end;
      end;
   end;
  end;

由于 VCL 位图不是线程安全的,我想我只能对内部 Theta Loop 进行并行处理?加速此代码的最佳方法是什么。

4

1 回答 1

0

是的,仅并行化内部循环就足够了。不要忘记组织正确的共享aHoughResult,例如 - 与关键部分。

在最新的 Delphi 版本中,您可以同时使用 OTL 和内置System.Threading.TParallel可能性。

最重要的加速(我认为) - 用round(r*cos(theta*PI/max_theta))值填充表格并在循环中使用它。

于 2015-11-17T10:42:26.410 回答