2016-04-11 13 views
0

私は拡張した上で、大津のしきい値を使用して、以下のように画像を侵食されています:OTSUスレッシュホールドでイメージの一部のスレッシュホールドを取る方法は?

k = np.ones((5,5),np.float32)/1 
     d = cv2.dilate(self.img, k, iterations=10) 
     e = cv2.erode(d, k, iterations=10) 
     self.thresh = cv2.threshold(e, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1] 

これは侵食と拡張した画像であり、閾値ます1:

enter image description here

私は真ん中の円形の明るい領域をしきい値処理から取得したいだけですが、代わりにこの結果が得られます。

enter image description here

どのようにして、中間領域の円形領域だけが得られるようにしきい値処理を行うのですか。画像の最も明るい(視覚的な)部分のように見えますか?

注:別の値で遊ぶのを避けるために、OTSUしきい値に固執したいと思っていますが、私はアイデアを公開しています。

+0

画像としきい値法の上側から明るい領域を抑制します* *下限しきい値がLOTを変化させるため、* OTSUしきい値のみ。 –

+0

私はそれを取得しません。どうしたらいいですか? – Miki

+0

バイナリスレッシュホールドだけを使用する場合は、スレッショルド値を低く設定する必要があります。スレッシュホールド値はイメージごとに大きく異なります。 –

答えて

1

あなたは拡張を使用して、この画像にフィルタを侵食するが、別の順序ですることができます:最初に侵食し、その後Dialte。これは、問題は、私が使用したい、であるより良い結果を提供します

enter image description here

enter image description here

enter image description here

enter image description here

1

グラデーションベースのアプローチを試すことができます。以下、私は形態学的なグラデーションを使用しました。大津の閾値処理をこの勾配画像に適用し、その後同様の量の形態学的閉鎖(10回の反復)を行い、その後、得られた画像の形態学的勾配をとる。

この領域は、検出が容易です。たとえば、エリアベースのアプローチを使用して輪郭から円形領域をフィルタリングすることができます。輪郭のバウンディングボックスの寸法を使用すると、半径の推定値を取得し、算出された面積を輪郭領域と比較できます。

このアプローチがコレクションにどのように一般的なのかわかりません。

グラデーション画像:視覚

grad

二値化勾配画像

bw

クローズ画像

ためにスケーリングされた強度値

closed

グラデーション

cont

im = cv2.imread('LDxOj.jpg', 0) 
kernel = cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (3, 3)) 
morph = cv2.morphologyEx(im, cv2.MORPH_GRADIENT, kernel) 
_, bw = cv2.threshold(morph, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU) 
morph2 = cv2.morphologyEx(bw, cv2.MORPH_CLOSE, kernel, anchor = (-1, -1), iterations = 10) 
morph3 = cv2.morphologyEx(morph2, cv2.MORPH_GRADIENT, kernel) 
関連する問題