極座標グリッドに画像があります。この画像はデカルト グリッドに変換する必要がありますが、私が知っている唯一のアルゴリズムはこれが非常に遅いです。次に、デカルト グリッドを使用します。各点について、r 値と theta 値を見つけます。次に、2 つのベクトルを調べて、次の式で定義される最小の誤差を見つけます。
min{(th_vec - シータ)^2 + (範囲 - r)^2}
これにより、外側の入れ子になった for ループの内側に入れ子になった for ループができるため、O(N^4) の複雑さがあります。512x512 の画像は、完了するのに丸 1 分かかります。もちろん、そのような複雑さは使用できないので、これを行うためのより高速なアルゴリズムを誰かが知っているかどうか疑問に思っていますか?
画像と 2 つのベクトルがあります。画像の X 軸は角度で、画像の Y 軸は中心からの長さです。角度は常に 0 ~ 2pi で、範囲は 0 ~ r_max です。
前もって感謝します。
編集: 範囲は、以前の -r_max から r_max ではなく、0 から r_max までです。いくつかの誤解があったことがわかります。通常の逆変換を使用しました。
r=sqrt(x^2 + y^2);
theta=atan2(y,x);
問題は、最初に x と y の値を x' と y' の値に変換する必要があることです。グリッドは結果の画像では -r_max から r_max までですが、データではピクセル単位であるためです。512x512 の画像がありますが、r_max は 3.512 のようになります。したがって、各ピクセル値をグリッド値に変換してから、r 値と theta 値を見つける必要があります。r と theta の値を見つけたら、一致する元の画像のピクセルを見つけるために、range と th_vec の 2 つのベクトルを実行する必要があります。
min{(範囲 - r)^2 + (th_vec - シータ)^2}
th_vec と範囲ベクトルは画像と同じサイズであるため、これにより O(n^4) の複雑さが得られます。したがって、512x512 要素の正方行列がある場合、68 719 476 736 要素を実行する必要があり、非常に低速です。より高速なアルゴリズムがあるかどうか疑問に思っていますか? 入力データを変更することはできないので、私の知る限り、三角測量などから始めない場合はこれが唯一の方法ですが、これはメモリの時間がかかりすぎます。