2016-07-27 6 views
1

私はそれにほぼ一定の線を持つ画像を持っています。私はモルフォロジー演算でアルゴリズムを使って画像からクリアします。つまり、形態学的な開閉は、隣の輪郭を単に溶かすのではなく、画像のエッジと線をマージすることです。私は形態学的操作で溶けた隣の輪郭だけを必要とし、後で私はイメージからラインの合併した平和をクリアすることができないので、そのラインがエッジとマージするのを避けるために必要です。画像とモーフを逆にしても問題は残ります。操作(画像の黒から白、白から黒の画像のピクセルで、開かずにクローズします)。モルフォロジー演算は画像のエッジとラインをマージする

これを停止する方法はありますか?

私は隣人の輪郭をマージするために、この操作を使用します。

Mat morphKernelClose = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new org.opencv.core.Size(25, 25)); 
Imgproc.morphologyEx(src, src, Imgproc.MORPH_CLOSE, morphKernelClose); 

シンプルキャニー画像:MORPH_CLOSEを使用した後

enter image description here

を画像:

enter image description here

このエラーでは、最初に使用したのとは逆の2番目のモフォロジ操作を使用して、ラインを完全にクリアすることはできません(これらのマージされた部分は残っています)。

+1

morphologyExのC++バージョンには、境界線を処理するためのパラメータがあります。それらがJava(?)バージョンにも存在するかどうかは不明です。 – Micka

+0

ありがとうございます。Javaで関数のオーバーロードがあります: 'public static void morphologyEx(Mat src、Mat dst、int op、Mat kernel、Point anchor、int iterations、int borderType、Scalar borderValue)'、 "** borderType - Pixel Extrapolation method。詳細については、 "borderInterpolate"を参照してください。** "and" ** borderValue - 定数ボーダーの場合のボーダー値デフォルト値は特別な意味を持ちます。詳細については、 "createMorphologyFilter"を参照してください。適切な議論で国境との合併を操作するには?私は、この使用法を使用して説明するソースを見つけることができません。 –

+0

私はそう思います。やってみなよ。 border_constantに設定して0に設定してください。 – Micka

答えて

1

私はこの問題を解決するために助けるためFiReTiTiMickaに感謝します。私はミカの提案を使用しました。

私はボーダーを操作することができるmorphologyExの3番目の機能を使用しました。質問に与えられたコードは、この1に置き換えられます。ここでは

Mat morphKernelClose = Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new org.opencv.core.Size(25, 25)); 
Point anchor = new Point(morphKernelClose.size().width/2, morphKernelClose.size().height/2); 
Imgproc.morphologyEx(src, src, Imgproc.MORPH_CLOSE, morphKernelClose, anchor, 1, Core.BORDER_CONSTANT, new Scalar(0,0,0)); 

は結果である: enter image description here

それだけカットしているため、この方法は、迅速かつ簡単ですが、完璧ではないかもしれ境界付近のピクセル。

これを改善する方法についてご意見がありましたら、コメントに投稿してください。

+1

ボーダー効果は常に痛みがあり、避けることは非常に困難です。あなたの場合、私が見る唯一の解決策は、処理する前に各行を拡張することですが、すべてを最初に見つけ、向きを合わせて、最後に拡張することを意味します。私はそれに値するとは思わない。 – FiReTiTi

2

最も簡単な解決策は、画像のサイズを大きくブラックを添加した輪郭を充填し、その後の操作を実行することであろう。

  1. 大きな画像、完全に黒を作成します。
  2. 新しい画像の中央に画像をコピーします。
  3. 操作を実行します。
  4. 境界線を削除します(イメージの中心を新しいものにコピーします)。
+1

である場合、サブ画像を使用することができる。 – Micka

関連する問題