Hi,
I discovered that a lot of the time in the HoughLineTransformation is spent in
Math.Round to calculate the radius variable as an integer. In my use case the
patch below doubles overall performance of the HoughLineTransformation.
Robin
Index: HoughLineTransformation.cs
===================================================================
--- HoughLineTransformation.cs (revision 1729)
+++ HoughLineTransformation.cs (working copy)
@@ -500,7 +500,8 @@
// for each Theta value
for ( int theta = 0; theta < houghHeight; theta++ )
{
- int radius = (int) Math.Round( cosMap[theta] *
x - sinMap[theta] * y ) + halfHoughWidth;
+ double dRadius = (cosMap[theta] * x -
sinMap[theta] * y);
+ int radius = Round(dRadius) + halfHoughWidth;
if ( ( radius < 0 ) || ( radius >= houghWidth ) )
continue;
@@ -700,5 +701,13 @@
lines.Sort( );
}
+
+ // Faster simple alternative to Math.Round for finding nearest
integer.
+ // May give different results for values very close to integer+0.5 or
very large values
+ // Neither of which should be important in this context
+ private int Round(double value)
+ {
+ return (int)(value + (value > 0 ? 0.5 : -0.5));
+ }
}
}
Original issue reported on code.google.com by robin.w....@gmail.com on 14 Mar 2014 at 9:06
Original issue reported on code.google.com by
robin.w....@gmail.com
on 14 Mar 2014 at 9:06