0

これは、この質問の続きです: Finding Squares in Image

そこでの回答の手順に従いました: https://dsp.stackexchange.com/a/7526/818、以下のような回答を得ました:

ここに画像の説明を入力

しかし、その答えの最後で、私は問題を説明しました。それが私の質問です。

説明 :

前のリンクのステップ 1 で検出された四角形の重心は既にあります (これらの検出された四角形は、以下の mask_image でマークされています)。

ここに画像の説明を入力

以下のようにグリッド画像を作成しました(重心値も知っています):

ここに画像の説明を入力

また、グリッド イメージのどの点を mask_image の対応する点にマッピングするかを調べました。

その情報を使用して、scipy.interpolate.griddata()を適用し、次に OpenCV の cv2.remap() 関数を適用しました。

その結果を以下に示します。

ここに画像の説明を入力

ご覧のとおり、中央の 2 つを除くすべての正方形が切り取られています。これは、出力に mask_image のすべての重心を結んで描かれた境界内の領域のみが含まれているようなものです。

シーンは以下でさらに悪化します:

最後の正方形 (黄色) または四隅の他の正方形が最初のステップで検出されない場合、状況はさらに悪化します。最後のものが検出されないことを考慮してください。次に、私が得た結果を以下に示します。下部に斜めのカットが表示されます (黄色でマークされています)。

ここに画像の説明を入力

質問 :

私が与えたポイントを超えてリマップ機能が機能しないのはなぜですか? クリッピングせずに再マップするにはどうすればよいですか?

エッジではないいくつかのポイントを指定しても、画像全体で機能すると思いました。

期待される出力:

以下は、操作の最後に期待した出力です。(赤枠内が実際に取得したものです)

ここに画像の説明を入力

いくつかの良い提案を探しています...

アップデート :

ここにもコードを追加します。リマッピング部分コードのみ追加。完全なコードは大きすぎてここに追加できません:

# ideal - the grid image - http://i.stack.imgur.com/3QudG.png
# centroids - list of centroids of the squares in mask_image - http://i.stack.imgur.com/jh6bQ.png
# match_pts - list of centroids of the squares in grid image corresponding to squares in mask_image
# warped - the final image obtained after remap - http://i.stack.imgur.com/O26ZA.png

grid_x,grid_y = np.meshgrid(np.arange(ideal.shape[1]),np.arange(ideal.shape[0]))
dst = np.array(centroids) 
src = np.array(match_pts) 
grid_z = griddata(dst,src,(grid_x,grid_y),method='cubic')
map_x_32 = grid_z[:,:,0].astype('float32')
map_y_32 = grid_z[:,:,1].astype('float32')
warped = cv2.remap(ideal, map_x_32, map_y_32, cv2.INTER_CUBIC)

また、centroids、match_pts などのデータを追加して、誰かが試してみたい場合に、イメージからデータを見つける代わりにデータを直接使用できるようにしました: gist.github.com/4540887

4

1 に答える 1

2

ステップ 1: B、G、R、H、S、V 平面で分析して得られる最終的なバイナリ イメージが何であれ、そのイメージでブロブ カウント アルゴリズムを実行します。

ステップ 2: 面積または輪郭の長さに基づいて最大のブロブを見つけます。あなたのブロブはほとんどが平行四辺形であるため、面積または輪郭はどれでもかまいません。

ステップ 3: 最大のブロブを使用して (最大のブロブは現実世界の正方形に似た最適なブロブであるため)、ブロブの方向を見つけようとします...これは、最適な四角形をフィッティングすることによって取得できます。または、コーナー ポイントを取得できます。 ...それらを結ぶ線の傾きを取得します (水平方向と垂直方向の両方で)。

ステップ 4: 2 つの勾配が得られたら、ブロブの軸を通る 2 本の線を引きます。軸については、コーナーポイントを平均化するか、重心(重心)を使用できます...コーナーポイントの平均を使用します...

ステップ 5: 水平方向と垂直方向のそれぞれの間隔は等しいため (理想的には水平方向と垂直方向の間隔も等しいのが理想的な正方形の画像から得られますが、それを想定していません..)平行四辺形

結論: 1 つの正方形が完全に検出された場合、グリッド全体を作成できます。最大ブロブの横軸に沿って 2H (H = 最大ブロブの水平幅) の間隔で中心をマーキングし、ブロブの垂直軸に沿って垂直に 2V (V = 最大ブロブの垂直高さ) の間隔で中心をマークし続けるだけです。

いくつかの写真をサポートする

ここに画像の説明を入力

ここに画像の説明を入力

于 2013-01-15T18:46:03.847 に答える