2017-12-08 7 views
0

[最後の質問を更新] 640x480画像で単純な幾何学的形状のデザインパターンを検出しようとしています。私は32x32ブロックで画像を分割し、それぞれの形状の中心がどのブロックにあるかを調べました。PythonでOpenCVを使って画像内の線を検出する

この計算に基づいて、私は、形状が発見されるたびに col=640/4 row=480/4 と、中心が計算されると、それが発見されたブロックチェックする(160×120)のゼロ(のfloat32)のnumpyの行列を作成しました。対応するアイテムは、160x120のnumpy配列のその8つの近隣とともに、に設定されます。最終的に、160×120のnumpy配列は、黒い背景のグレースケール画像として検出され、検出された形状のブロックを表す白いピクセルとして表されます。

下の画像のようになります。 The image in top left corner represents the 160x120 numpy array.

左上の画像は、160x120のnumpyの配列を表します。これまでのところ問題ありません。

新しく生成された画像には、黒い前景に白い線が表示されています。私はこの行のrho、theta、x0、y0、x1、y1を見つけたいと思います。だから私はこれにHoughLines変換を使うことにしました。以下のように

については、次のとおり

edges = cv2.Canny(np.uint8(g_quadrants), 50, 150, apertureSize=3) 
lines = cv2.HoughLines(edges, 1, np.pi/180, 200) 
print lines 

ここg_quadrantscv2.HoughLinesのグレースケール画像が、出力を表す160×120マトリックスはNone以外のものが含まれていませんです。

私にこれを手伝ってください。

更新:

The real scenario

小さなウィンドウ白を表示(グレースケールを考慮np.float32)黒と白のイメージはときに私

  • 除算私が実際に得るものであると32x32ブロック内の640x480
  • 画像の三角形を検索
  • 三角形がブロック内

ズームさ見つかった場合、各ブロックの結果

  • 更新により対応する行列要素をマップするために32×32の行列を作成する:

    Zoomed View of 32x32 np.float32 Image

    直線を形成する白い画素があることがわかります。いくつかの望ましくない検出される可能性があります。私は、不要な孤立したピクセルを除去し、連続した直線を再構築する必要があります。これは、画像を膨張させ、次いで腐食させることによって達成され得る。この行のx0、y0、x1、y1、rho、thetaを見つける必要があります。

    複数の行にすることができます。その場合、私は長さに関して上位2行を見つける必要があります。

  • +0

    によってフィルタリングあなたは既に結果が良好なラインを持っていないのですか?あなたはこれを解決するためにハフ変換をする必要はありません。実際には単純な線形回帰を使って、線分をy = mx + b(線分を作成するためにopencvフィットラインを使用することができます) –

    +0

    の線分を再構成することができます。例えば。メインラインから遠くに検出された三角形。あるいは、私は異なる方向に複数の線を持つかもしれません。 –

    +0

    @Silencer左上の小さな画像に '' '' '' '' '' '' '' '' 'を' '適用する必要があります。イメージは、実際には、** 0 **と** 1 **の値を含む160x120の '' 'float32'''要素の行列です。したがって、グレースケール画像と見なすことができます。私はそのイメージに現れるすべての線を見つける必要があります。私はCanny Edgeの検出に続いてHoughLinesを適用しましたが、結果として得られたラインのリストは空です。 –

    答えて

    -1

    右の三角形のバーを探したいですか?

    1. threshold
    2. findContours
    3. boundingRectといくつかのルール

    enter image description here

    +0

    いいえ、OPは、ポストの左上の小さな画像に示すように、すでに三角形を検出しています。 彼がしたいことは、この行のロー、シータ、x0、y0、x1、y1を見つけることです。 – GPPK

    +0

    @GPPKご覧のとおり、私は紫色の点を持っています。数学の幾何学を学んだら、手で計算することができます! – Silencer

    +0

    しかし、あなたは質問者にその問題を解決する方法を説明していません、あなたは単に三角形を閾値化して点を置くことができることを示しています。 – GPPK

    関連する問題