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);
}
ローシータ空間を視覚化するためのさまざまな方法を試しました。「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 の 2 つの値を取得する必要があるかどうかです。または、「ロー/シータ」を1つだけ計算すると、正しい交点になりますか? ありがとう!
第二に、それらを適切な形式で視覚化するにはどうすればよいですか? (出力画像に現在表示されているのは、出力の左上隅にあるランダムな白い点です)
第三に、この方法で rho,theta の値を戻すことは合理的ですか、それとも自分でハフ変換を実行して複雑さを軽減することをお勧めしますか? (より効率的なパフォーマンスのために opencvsharp 関数を使用しました!)