2

画面の写真や一般的なノイズの多い画像のコントラストの低い線を検出しようとしています。私は2つの問題に遭遇したようです:

  1. 画面のノイズ/暗いグリッドのため、適応しきい値またはエッジ検出アルゴリズムで線を確実に検出できません。ぼかしは少し役立つようですが、それを機能させるには十分ではありません.

  2. (ノイズ、光の状態などにより)同じ線にいくつかのセグメントしか表示されない場合、検出された線セグメントを単一の直線に接続したいと思います。

     img = cv2.imread("test.jpg")
     gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
     gray=cv2.GaussianBlur(gray,(9,9),0)
     bin = cv2.adaptiveThreshold(gray2, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 33, 3)
     cv2.namedWindow('Test')
     cv2.imshow("Test", bin)
    

cv2.Cannyとも試しましcv2.HoughLinesPたが、暗いグリッドが両方を台無しにするため、良い結果は得られませんでした。前もって感謝します!

編集: しきい値関数のローカル バージョンを使用するTHRESH_TRUNCATEDTHRESH_TOZERO、グリッドを除外するのに役立つ可能性があると考えています。とハイコントラスト

写真を投稿する評判がないので、リンクを追加しました。コントラストの低い線のある画像:

ここに画像の説明を入力

行が検出されました:

ここに画像の説明を入力

4

1 に答える 1

1

十分な大きさのウィンドウ (たとえば 11x11) でメディアン フィルターを実行し、平均 (または平均よりも少し小さい) 画像強度を差し引くと、線が検出しやすくなります。

于 2013-06-07T11:04:36.607 に答える