8

画像の二値化に最適な適応しきい値法を探しています。しかし、暗くてぼやけた画像に問題があります。
入力画像:
画像をロードします...

適応しきい値法を使用すると、次の
出力画像が表示されます。
画像をロードします...

これは私にはよくありません!
それで、誰かがこの問題を解決するのを手伝ってくれませんか?


別の画像:ここに画像の説明を入力

と :ここに画像の説明を入力

最初は@Hammer'solutionで非常に悪いようです(cチャネルを選択する必要があります)、2番目は適応しきい値法線を使用できます。
だから私はすべての場合に最適な解決策を見つけたい.

もう一度ありがとう!

4

4 に答える 4

8

色は、強度よりも画像のセグメンテーションの指標としてはるかに優れているようです。HSV に変換してから、H チャネルで OTSU を実行してみてください。

パイソンで

hsv = cv2.cvtColor(image, cv2.cv.CV_BGR2HSV)
cv2.imshow('hsv', hsv[:,:,0])
(thresh, im_bw) = cv2.threshold(hsv[:,:,0], 128, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU)
cv2.imshow('OTSU', im_bw)

(hsv) を与える

ここに画像の説明を入力

そして(大津)

ここに画像の説明を入力

少し浸食と拡張があり、準備ができているはずです

于 2013-09-05T05:55:21.407 に答える
6

openCV で使用されるこれらの適応しきい値に興味があるかもしれません。

適応平均しきい値を使用しました。パラメータを少しいじる必要があるかもしれませんが、画像が似ている場合 (同じサイズなど) は、微調整があまり必要ないことを願っています。

# Smooth image
filtered = cv2.adaptiveThreshold(input_image.astype(np.uint8), 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 41, 3)

# Some morphology to clean up image
kernel = np.ones((5,5), np.uint8)
opening = cv2.morphologyEx(filtered, cv2.MORPH_OPEN, kernel)
closing = cv2.morphologyEx(opening, cv2.MORPH_CLOSE, kernel)

結果:

ここに画像の説明を入力

ここに画像の説明を入力

ここに画像の説明を入力

于 2014-07-23T09:03:40.723 に答える
1

すべての画像を分離するのに 1 つのしきい値では不十分な場合は、2 つのしきい値を使用してWatershed アルゴリズムを試すことができます。

高いしきい値を使用して、明らかに数字の一部であるセグメントを含む画像を取得し、高い逆しきい値を使用して、明らかに数字の一部ではないセグメントを含む画像を取得します。

確実性を高めるために、両方の画像を少し侵食します。

次に、2 つの画像を Watershed のシードとして使用します。

これが行われる答えはここにあります

于 2013-09-05T13:43:34.233 に答える