前提
C#、OpenCV(OpenCVSharp)にて赤色検出を行っています。
検出する直前の画像をみると、微小なノイズ?らしきものが散見されます。
<ノイズ>


目的の赤色は検出できるのですが、同時にノイズも検出されるため、
検出時のフィルタ(検出されたエリアの大きさ)で回避しています。
発生している問題
そもそも何故ノイズが発生するのかもわからないのですが、
検出時のフィルタより発生するノイズが大きい場合、また、対応が必要になるため、
何かもう少しノイズが除去できる方法が無いか模索しております。
よろしくお願いいたします。
該当のソースコード
特に現在エラー等は発生しておりませんが、検出までの一連の流れです。
流れ(抜粋)
C#
1Cv2.CvtColor(_srcImage, hsvImage, ColorConversionCodes.BGR2HSV); 2Cv2.LUT(hsvImage, _colorFilter.LookupTable, hsvImage); 3Cv2.BitwiseAnd(channelImage2[0], channelImage[1], _filterdImage); 4Cv2.BitwiseAnd(_filterdImage, channelImage[2], _filterdImage); 5Cv2.CvtColor(_filterdImage, grayImage, ColorConversionCodes.BGR2GRAY); 6Cv2.Threshold(grayImage, grayImage, 1, 255, ThresholdTypes.Binary); 7blobs.Label(grayImage); 8blobs.FilterByArea(filterSize, int.MaxValue); 9
HSV設定値
H:315 ~ 20
S:30 ~ 255
V:30 ~ 255
試したこと
色範囲の変更、抽出時のパラメータ変更
blobs.FilterByArea で「面積が小さいものを削除」としていると思いますが、その閾値を調整することで誤検出を除けませんか?
titol さん
ご返答頂きありがとうございます。
御推察の通り、blobs.FilterByArea で調整しております。
・テスト等などを重ねると指定した閾値より大きなノイズが発生→閾値調整を繰り返す。
・運用で赤点をある程度のサイズを担保したいが、小さな点を記入される場合があるので、あまり閾値を大きくできない。
などの理由で、「ノイズそのものを減らす」方法が無いかな?と思った次第です。
また、別の視点で検出した内容が「赤色」かどうか?で判断できても良いかもしれません。。。
> 「赤色」かどうか?で判断できても良いかもしれません。。。
検出したいものとノイズを区別するのが色なのだとしたら、赤色かどうかで判定するのがよいと思います。
tiitoi さん
ご返答いただき、ありがとうございます。
検出したエリア内の画素を調べて赤色かどうか判断する。。。。
一度調べて実施してみます。
回答1件
あなたの回答
tips
プレビュー
