0

我使用 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 函数以获得更好和更高效的性能!)

4

0 回答 0