バイトのマトリックス(ビットマップのようなマトリックス)で表される図があります。例図はPicture 1
。
目標は、与えられたいくつかの最適な回転角度を見つけることです図。図を最適な角度で回転すると、X軸とY軸に平行で図を内接する長方形の面積が最小になります。
図に内接する四角形は、写真では灰色で表示されています。の中に Picture 2
、Figureの理想的な回転は時計回りに約30度であることがわかります。
今、私はこの角度を見つける方法をアルゴリズムを知っていますが、それは私には非常に非効率的です。こんなふうになります:
これは一種のブルートフォースメソッドであり、小さな数字に対しては適切に機能します。ただし、最大1000万点を含む数値を処理する必要があり、アルゴリズムが遅くなります。
この問題に適したアルゴリズムは何でしょうか?
線形時間 回転キャリパーアルゴリズム を使用して 任意に調整された最小境界ボックス を見つけることができるようです。
境界ボックスを作成したら、片側の勾配を計算して回転角度を決定するだけです。
あなたのアプローチの最初のステップには欠陥があります-realの値が0から45の間に無限にあるため、「それらをループすることは意味がありません。 」ただし、アルゴリズムは修復できます。
多角形の 凸包 を見つける
凸包の外側のエッジによって与えられた有限(!)の角度のループ
これらの角度を使用して、手順2〜4を適用します。
これは、最小の囲み長方形が凸包の外縁の1つに接触する必要があることを示すことができるため機能します。