質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

Q&A

解決済

2回答

3182閲覧

マッチングによるx,y,θ検出

退会済みユーザー

退会済みユーザー

総合スコア0

OpenCV

OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

0グッド

0クリップ

投稿2020/08/26 09:02

画像内の部品の検出を行いたいです
機械加工されたものなので形、サイズはほぼ同じですが
向きはばらばらです
あらかじめ登録しておいた基準となる部品の画像に対して
今回撮影した部品が画像内のx,y座標のどこにあって
基準の画像に対してどれだけ傾いているかθを検出したいのですが
OpenCVのどういった関数を使えば今回の目的が達成できますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fana

2020/08/26 09:49 編集

画像例を示してください. 何らかの理由で示せないならばその旨を明記して,考えている実施環境に関する情報を述べるべきです. 例えば, 「平らな面に部品を1個置いた様子を撮影しており,部品を置く面というのは(その色か何かに基づいて)容易に背景として部品の領域とは区別できる想定である」 とかいう話なのか, 「背景と部品との領域の区別はわりとやっかいそうな様子である」という話かによって考えることは違うでしょうし. 「カメラの視野のどこに写るかによって,部品の見え方が割と変わる」とかであれば相応の面倒さがあるのかもしれませんし(e.g. 円柱を真上から見ればその像の形は円だが,視野の外周部に写る(≒斜め上から見る形になる)場合にはその像の形は円ではない)
退会済みユーザー

退会済みユーザー

2020/08/26 11:32

今回検出したい物体は鉄(濃灰色)の単純な直方体の部品で 真上から見ると目印となる穴が1か所あります 穴は中央にあいていないため位相が存在し、その向きが知りたいです 部品を置く台は単純な平面で若干模様の入った白色であり 部品は穴の開いてる面が常に上を向くように置いてあり側面が上を向くことはありません 重なっていることもありません カメラの撮影範囲上、部品の側面は若干見えるかもしれません 上記の条件から前処理によるパラメータは試行錯誤で決めようと思いますが 今回の目的である座標と角度x,y,θを求めるアルゴリズムが知りたいです
tiitoi

2020/08/26 11:44

輪郭抽出で空いている穴の座標を検出できるなら、「輪郭の中心→穴」 のベクトルの角度を求めれば、それがθになるのではないでしょうか
guest

回答2

0

今回検出したい物体は鉄(濃灰色)の単純な直方体の部品で

真上から見ると目印となる穴が1か所あります
穴は中央にあいていないため位相が存在し、その向きが知りたいです
部品を置く台は単純な平面で若干模様の入った白色であり
部品は穴の開いてる面が常に上を向くように置いてあり側面が上を向くことはありません
重なっていることもありません カメラの撮影範囲上、部品の側面は若干見えるかもしれません

状況と必要精度次第でしょうが,
背景領域と部品領域とを相応に分離(2値化)できるならば(できそうな話に見える)
minAreaRect()あたりでも十分かもしれませんね.

もうちょい(minAreaRectではなく)自前でやるにしても

  • 座標:領域の重心
  • 角度:

** ** ・ 「穴」が検出できるなら,重心と穴の位置から単純に求む("質問への追記・修正、ベストアンサー選択の依頼"内でtiitoi氏が述べられている方法)
** ** ・ 領域の慣性主軸方向として求む
** ** ・ "直方体"であることを利用して,外周エッジの向きから求める

とかでどうでしょう?


部品の像のサイズが(ほぼ)既知であるということなら,
各エッジ点から「(自身が部品の輪郭だとすれば)部品の中心を通り,部品の向きに沿う直線」を推測できると思うので,ハフ変換な感じの処理を考えることもできそう.

投稿2020/08/27 01:15

編集2020/08/27 01:21
fana

総合スコア11708

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

今回撮影した部品が画像内のx,y座標のどこにあって
基準の画像に対してどれだけ傾いているかθを検出したいのですが
OpenCVのどういった関数を使えば今回の目的が達成できますか?

画像がないので、一般的なアドバイスになります。
「基準の画像に対してどれだけ傾いているかθを検出したい」が呼び出し1つで実現できる関数は OpenCV にはありません。(回転がなければ、cv2.matchTemplate() によるテンプレートマッチングでできます。)
しかし、OpenCV の様々な API を組み合わせることで実現は可能と思います。

輪郭を利用したマッチング

→ findContours() で輪郭抽出後に輪郭の特徴を利用して識別

特徴点を利用したマッチング
OpenCV - 特徴点マッチングを行う方法について

テンプレートマッチング
OpenCV - テンプレートマッチングの仕組み及び方法 - Pynote

投稿2020/08/26 09:10

編集2020/08/26 09:12
tiitoi

総合スコア21956

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問