画像内の(描かれた)線の座標の配列を取得する方法は? 座標は、画像の境界を基準にする必要があります。入力: *.img . 座標の出力配列 (固定ステップ付き)。これを行うためのサードパーティ製ソフトウェアはありますか? たとえば、コントラストの差が大きく、背景が白で線が黒です。または赤と緑など
例:
画像内の(描かれた)線の座標の配列を取得する方法は? 座標は、画像の境界を基準にする必要があります。入力: *.img . 座標の出力配列 (固定ステップ付き)。これを行うためのサードパーティ製ソフトウェアはありますか? たとえば、コントラストの差が大きく、背景が白で線が黒です。または赤と緑など
例:
ああ、あなたは非直線を意味します。「線」を定義する必要があります。直観的には、中心軸の長さと中心軸とエッジの間の距離との間の縦横比が高い (つまり、曲がりくねっていても、比較的長くて狭い) 画像の接続された領域を意味する場合があります。考えられるアプローチ:
しきい値または色による選択。おそらく、色のヒストグラムに基づいて色で選択するか、ここで説明されているようにポスタライズします: Adobe Photoshop スタイルのポスタリゼーションと OpenCV、次に scipy.ndimage.measurements.label() を呼び出します
上記の領域ごとに、スケルトン化します。役立つチュートリアル:「OpenCV-Python を使用したスケルトン化」。ただし、エッジまでの距離も必要になる可能性が高いため、skimage.morphology.medial_axis (..., return_distance=True) を使用します。
スケルトンで何らかのクリーンアップ/フィルタリングを実行して、短いブランチなどを削除します。特定の用途について考え、ラインがループしないと仮定すると、スケルトンで最長の単一パスを見つけることができます。ここで、エッジまでの距離に対するスケルトンの最長パスの長さに基づいて、形状が「線」であるかどうかを決定することもできます。opencv で最適な方法はわかりませんが、Fiji/ImageJ の「Analyze Skeleton」を使用すると、枝の長さでフィルタリングできます。
残っているのは、元の「線」形状の最も細長い中心軸です。それを好みのステップにリサンプリングするか、スプラインなどに合わせることができます。
やりたいことの性質上、さまざまな画像で機能するサンプル コードを考え出すのは困難です。これには、注意深い調整が必要になる可能性があります。画像の小さなセット (コーパス) を使用し、任意のバージョンのアルゴをそれらで実行し、かなり良い結果が得られるまで結果を手動で確認してから、大きなコーパスで試すことをお勧めします。
編集:元の回答は、直線に対してのみ機能します:
おそらく、ハフ変換( OpenCV チュートリアル) を使用する必要があります。
Python サンプル コード: OpenCV を使用した水平線検出
編集:スケルトン化するサンプルコードに関する関連する質問:垂直線が交差する完全な内側軸線を取得するにはどうすればよいですか?