3

私は信号機(明らかに円)を検出しなければならないプロジェクトに取り組んでいます。現在、スポットから拾ったサンプル画像を使用していますが、すべての努力の後、適切な円 (光) を検出するコードを取得できません。

コードは次のとおりです。

# import the necessary packages  
import numpy as np  
import cv2

image = cv2.imread('circleTestsmall.png')
output = image.copy()
# Apply Guassian Blur to smooth the image
blur = cv2.GaussianBlur(image,(9,9),0)
gray = cv2.cvtColor(blur, cv2.COLOR_BGR2GRAY)
# detect circles in the image
circles = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 1.2, 200)

# ensure at least some circles were found
if circles is not None:
    # convert the (x, y) coordinates and radius of the circles to integers
    circles = np.round(circles[0, :]).astype("int")

# loop over the (x, y) coordinates and radius of the circles
for (x, y, r) in circles:
    # draw the circle in the output image, then draw a rectangle
    # corresponding to the center of the circle
    cv2.circle(output, (x, y), r, (0, 255, 0), 4)
    cv2.rectangle(output, (x - 5, y - 5), (x + 5, y + 5), (0, 128, 255), -1)

# show the output image
cv2.imshow("output", output)
    cv2.imshow('Blur', blur)
cv2.waitKey(0)

円を検出したい画像- 画像。 検出したい円が強調表示されます。

これは出力イメージです:- 出力画像。

ハフ変換でガウスぼかし半径値と minDist パラメータを試してみましたが、あまり成功しませんでした。
誰かが私を正しい方向に向けることができますか?

PS- トピック外の質問もありますが、私のプロジェクトにとって重要なものもあります-
1. 私のコンピューターは、最終的な画像を表示するのに約 6 ~ 7 秒かかります。私のコードは悪いですか、それとも私のコンピュータは悪いですか? 私のスペックは - Intel i3 M350 2.6 GHz (第 1 世代)、6GB RAM、Intel HD グラフィックス 1000 1625 MB です。
2. ハフ変換は、バイナリしきい値処理された画像で直接機能しますか?
3. このコードは、Raspberry Pi 3 でリアルタイムに実行できるほど高速に実行されますか? (移動する自律型ロボットに搭載する必要があります。)

ありがとうございました!

4

3 に答える 3

2

まず、パラメータを少し制限する必要があります。

参照してください: http://docs.opencv.org/2.4/modules/imgproc/doc/feature_detection.html#houghcircles

少なくとも、最小半径と最大半径に適切な値を設定してください。最初にその 1 つの特定の円を見つけてみてください。成功した場合は、半径許容値を増やします。

ハフ変換は強引な方法です。画像内のすべてのエッジ ピクセルに対して可能な半径を試します。そのため、リアルタイム アプリケーションにはあまり適していません。特に、適切なパラメーターと入力を提供しない場合。半径制限 atm はありません。したがって、ピクセルごとに数千ではないにしても、数百の円を計算します...

あなたの場合、信号機もあまり丸くないので、累積された結果はあまり良くありません。代わりに、妥当なサイズの高彩度で明るくコンパクトなブロブを見つけてみてください。それはより速く、より堅牢でなければなりません。

画像サイズを制限すると、処理時間をさらに短縮できます。信号機は常に画像の上半分にあると想定できると思います。なので下半分は省略。信号機は常に緑、赤、または黄色です。その色以外のものはすべて削除してください...私の言いたいことはわかると思います...

于 2016-03-29T13:35:02.837 に答える
2

まず、ストップライトの色に基づいて色のセグメンテーションを実行する必要があると思います。ROIを大幅に削減します。次に、ROI エッジのみにハフ変換を適用できます (輪郭が必要なため)。

于 2016-03-29T21:45:47.660 に答える
0

別の制限: 内側の色が均一な円のみを受け入れます。これにより、上記の例のすべての偽のヒットが破棄されます。

于 2016-03-29T15:56:39.710 に答える