我使用 Opencvsharp (opencv) 实现了 Hough-Transform,并在控制台应用程序/windows-from-application 中获取在我的图像上检测到的行:
lines = edgeImg.HoughLines2(storage, HoughLinesMethod.Probabilistic, 1, Math.PI / 180, 60, 100, 100);
for (int i = 0; i < lines.Total; i++)
{
CvLineSegmentPoint segP= lines.GetSeqElem<CvLineSegmentPoint>(i).Value;
double angle = Math.Atan2((segP.P2.Y) - (segP.P1.Y), (segP.P2.X) - (segP.P1.X)) * 180 / Math.PI;
if (Math.Abs(angle) <= 60)
continue;
if (segP.P1.Y > segP.P2.Y + 20 || segP.P1.Y < segP.P2.Y - 20)
src.Line(segP.P1, segP.P2, CvColor.blue, 2, LineType.AntiAlias, 0);
}
我尝试了不同的方法来可视化 rho-theta 空间。由于“HoughLinesMethod”在内部进行所有转换,我试图以相反的方式从 x,y 获取这些值:
double angle = Math.Atan2(dy, dx) * 180 / Math.PI;
double theta = 90 - angle;
var thetaRad = theta*Math.PI/180;
double rho = (x1 * Math.Cos(thetaRad) + y1 * Math.Sin(thetaRad));
我的第一个问题是我是否需要为 x1,y1 和 x2,y2 获取 rho/theta 的两个值;还是只计算一个“rho/theta”是正确的相交?谢谢!
其次,我怎样才能以正确的格式将它们可视化?(我目前在输出图像上看到的是输出左上角的一些随机白点)
第三,以这种方式取回 rho,theta 值是否合理,或者您建议自己执行霍夫变换并降低复杂性?(我使用 opencvsharp 函数以获得更好和更高效的性能!)