白と黒の2色を含むラスタライズされた画像があります。黒い部分は完全につながっており、大きな塊のように見えます。リージョン間の境界の長さを推定する良い方法はありますか?
私が検討した1つの方法は、ラスタライズされたグリッドの「エッジ」の数を数えることです。ただし、たとえば純粋に対角線、これは境界の距離をsqrt(2)の係数で過大評価します。この問題がない境界長を推定するためのより良い方法はありますか?
Cris Luengoによるブログの投稿 " Measuring bound length "は、この問題を正確に説明し、洗練度を高めるいくつかのソリューションについて説明しています。ブログがダウンした場合のために、これは投稿で議論された最高のものへの永続的な参照です:
Vossepoel and Smeulders、 " 有限長の直線の表現におけるベクトルコードの確率とメートル法の誤差 "(コンピュータグラフィックスと画像処理20(4):347-364、1982)。
対角線の長さの過大評価の問題は、完全にあなたが取っているアプローチ、つまり「各辺で異なる色のピクセルグリッドのエッジ」を数え、その合計を輪郭の長さとして宣言することに起因します。これらの2つは一般的に同等ではありません。
基本的には、ユークリッド(「直接」)ではなく「グリッド上」の距離、または輪郭の実際のエッジ(グリッドの「エッジ」ではない)間の「複数のポイントに対して平滑化」された距離の計算に制限されています。対角線に対してアプローチが不正確であると感じる理由は、精度の基準がサブピクセルの精度に関係しているのに対し、アルゴリズムではピクセルの精度レベル(ラスタライズされたグリッドの「エッジ」)で操作しているためです。
最初にエッジ検出を適用して、サブピクセル座標を持つエッジのリストを取得してみませんか(任意の汎用サブピクセルエッジ検出アルゴリズムを適用できます)。このステップからの出力は、doubleのペアのリストになります。この手順により、問題がサブピクセルドメインに変換され、距離を計算して精度基準を満たすことができます。
サブピクセルレベルでエッジにドリルダウンした後、2つの主なオプションがあります。
更新ステップ1の簡略化されたアプローチは、ラスタライズされたグリッドの適格な「エッジ」のサブピクセル中間点を選択し、それをエッジの中心として宣言することです。そこから距離の計算を続けます-中心点間のユークリッド距離でも、ラスタライズされたグリッドの選択可能な「エッジ」をカウントすると、はるかに正確な結果が得られます。少なくとも、対角線の「sqrt(2)の係数による過大評価」の問題は解決されます。それが役に立てば幸い。