3

ハフ変換を使用してオプティカル フロー アルゴリズムの線間の交点を計算しようとしています。ただし、交差点を計算するためにアルゴリズムを使用すると、必要なポイントが得られません。

Lines を、私が作成した というクラスのインスタンスとして保存しますImageLine。これが私の交差点メソッドのコードです。

Point ImageLine::intersectionWith(ImageLine other)
{
    float A2 = other.Y2() - other.Y1();
    float B2 = other.X2() - other.X1();
    float C2 = A2*other.X1() + B2*other.Y1();

    float A1 = y2 - y1;
    float B1 = x2 - x1;
    float C1 = A1 * x1 + B1 * y1;

   float det = A1*B2 - A2*B1;
   if (det == 0)
   {
        return Point(-1,-1);
   }
   Point d = Point((B2 * C1 - B1 * C2) / det, -(A1 * C2 - A2 * C1) / det);
   return d;
}

この方法は正しいですか、それとも何か間違ったことをしましたか? 私が知る限り、ハードコーディングした単一のポイントの場合と同様に機能するはずですが、実際のデータを使用すると、適切な交差点を取得できませんでした。

4

4 に答える 4

2

(det == 0)浮動小数点演算を使用している場合は、正確ではないため、true になる可能性は低くなります。

(fabs(det) < epsilon)イプシロンの適切な値 (たとえば) には、次のようなものが一般的に使用され1e-6ます。

それでも解決しない場合は、予想される結果と実際の結果とともに、実際の数値を示してください。

于 2013-05-13T14:12:20.763 に答える
0

式が正しいと仮定して、すべての中間引数を「double」として宣言してみてください。ほぼ平行な線の差を取ると、積が互いに非常に近くなる可能性があるため、'float' では十分な精度が維持されない可能性があります。

于 2013-09-25T10:06:08.960 に答える