12

ブロブを検出するためにOpenCVでAndroidアプリを書いています。1つのタスクは、前景オブジェクトと背景オブジェクトを区別するために画像をしきい値設定することです(画像を参照)。

画像が既知であり、しきい値を手動でthreshold()に渡すことができる限り、これは正常に機能します。この特定の画像では、たとえば200です。単色の背景と明るい前景のオブジェクトどうすればしきい値を動的に把握できますか?

グレースケール画像の強度分布を計算できるヒストグラムに出くわしました。しかし、ヒストグラムを分析して、対象のオブジェクト(明るい方)が存在する値を選択する方法を見つけることができませんでした。あれは; 明らかに暗い背景のスパイクと明るい前景のスパイクを区別したいと思います。この場合は200を超えていますが、オブジェクトが灰色がかっている場合は100と言うこともできます。

ここに画像の説明を入力してください

4

3 に答える 3

11

すべての画像がこのようなものであるか、このスタイルにすることができる場合は、cv2.THRESHOLD_OTSU、つまり大津の二値化アルゴリズムが適していると思います。

以下は、コマンドターミナルでPythonを使用したサンプルです。

>>> import cv2
>>> import numpy as np
>>> img2 = cv2.imread('D:\Abid_Rahman_K\work_space\sofeggs.jpg',0)

>>> ret,thresh = cv2.threshold(img2,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

>>> ret
122.0

retは自動的に計算されるしきい値です。このためのしきい値として「0」を渡すだけです。

私はGIMPで124を取得しました(これは私たちが取得した結果に匹敵します)。そしてそれはまたノイズを取り除きます。以下の結果を参照してください。

ここに画像の説明を入力してください

于 2012-06-29T19:41:20.793 に答える
7

背景が暗く(黒)、前景が明るいと言う場合は、YUV色空間(またはYCrCbなどの他のYXX)を使用することをお勧めします。このような色空間の最初のコンポーネントは輝度(または稲妻)。

光チャンネル

したがって、Yチャネルが(関数を介して)抽出された後、extractChennelこのチャネル(画像)のヒストグラムを分析する必要があります。

ヒストグラム

最初の(左の)こぶを見ますか?これは、画像の暗い領域(状況の背景)を表します。したがって、ここでの目的は、このこぶを含むセグメント(横軸は画像の赤い部分)を見つけることです。明らかに、このセグメントの左のポイントはゼロです。正しいポイントは、次の場合の最初のポイントです。

  • ヒストグラムの(ローカル)最大値は、ポイントの左側からです
  • ヒストグラムの値がいくつかの小さなイプシロンよりも小さい(10に設定できます)

このヒストグラムのセグメントの正しい点の位置を示すために、緑色の垂直線を描画しました。

以上です!セグメントのこの正しいポイントは、必要なしきい値です。結果は次のとおりです(イプシロンは10で、計算されたしきい値は50です)。

結果

上の画像のノイズを削除しても問題ないと思います。

于 2012-06-29T18:51:30.750 に答える
0

以下は、OpenCV3.xで動作するAbidの回答のC++実装です。

// Convert the source image to a 1 channel grayscale:
Mat gray;
cvtColor(src, gray, CV_BGR2GRAY);
// Apply the threshold function with the CV_THRESH_OTSU setting as well
// You can skip having it return the value, but I include it for showing the
// results from OTSU
double thresholdValue = threshold(gray, gray, 0, 255, CV_THRESH_BINARY+CV_THRESH_OTSU);
// Present the threshold value
printf("Threshold value: %f\n", thresholdValue);

これを元の画像に対して実行すると、次のようになります。 ここに画像の説明を入力してください

OpenCVは、その回答で見つかったAbidの値に近い、122のしきい値を計算しました。

確認のために、元の画像を次のように変更しました。

ここに画像の説明を入力してください

そして、178の新しいしきい値で次を生成しました。

ここに画像の説明を入力してください

于 2018-01-18T16:28:40.023 に答える