1

次の画像があります。

オリジナル

そして、テープだけが白で、背景全体が黒であるしきい値処理された画像を取得したいと思います..これまでのところ、これを試しました:

Mat image = Highgui.imread("C:/bezier/0.JPG");
Mat byn = new Mat();
Imgproc.cvtColor(image, byn, Imgproc.COLOR_BGR2GRAY);
Mat thresh = new Mat();

// apply filters
Imgproc.blur(byn, byn, new Size(2, 2));
Imgproc.threshold(byn, thresh, 0, 255, Imgproc.THRESH_BINARY+Imgproc.THRESH_OTSU);
Imgproc.erode(thresh, thresh, Imgproc.getStructuringElement(Imgproc.MORPH_RECT, new Size(4, 4)));

しかし、私はこのイメージを取得します。これは、私が望むものとはかけ離れています:

しきい値処理された画像

テープは常に同じ色 (白) で、幅 (約 2cm) です。ありがとう

4

2 に答える 2

2

あなたが知っていることを見てみましょう:

  • テープのコントラストが低い
  • テープは背景より明るい

画像の縮尺がわかっている場合は、適応しきい値を 2 つのレベルで実行できます。テープの幅が 100 ピクセルであるとします。

  1. 周囲の 50x50 (おそらく小さいが、大きくはない) ウィンドウの平均輝度から +/- x の範囲外の輝度を持つピクセルを拒否します。

  2. 明るさが y + 周囲の 100x100 (おそらくそれより大きいが、小さくはない) ウィンドウ内の平均明るさよりも小さいピクセルを拒否します。

また、各しきい値の「平均」の定義として平均と中央値の両方を試して、少し実験する必要があります。

そこから、はるかに明確に定義された画像が得られ、最大の輪郭 (おそらく軌跡) を除くすべてを削除できます。

于 2013-06-17T15:22:19.093 に答える
1

テープが白い(そして床が茶色の色合いである)という事実を利用していないと思います。

彩度にペナルティを課すカスタム操作を試してグレースケールに変換するのではなくcvtColor(src, dst, Imgproc.COLOR_BGR2GRAY)... HSVに変換して let G = V * (1-S).

于 2013-06-17T15:34:06.090 に答える