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

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

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

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

1回答

2409閲覧

Harrisコーナー検出にて特徴量を算出したいのですが、方法がわかりません。

tsukasa_onimaru

総合スコア0

OpenCV

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/06/18 07:22

初めまして。 Python初心者です。
現在画像のマッチング実現のためにHarrisコーナー検出を使用しています。
このときcornerHarris関数を使用していますが、この関数では特徴点しか算出することができません。
ORGやAKAZEみたいにdetectで特徴点を取得し、computeにて特徴量を算出し、
cv2.BFMatcher()等を使用しマッチングをしたいのですが、
cornerHarrisの戻り値であるdstから他の特徴点算出の際に使用されているkeypointへ変換するには、どのようなコードを書けばいいのでしょうか。
また、keypointに変換しなくてもdstからcv2.BFMatcher()で使用できる特徴量を求める方法があるのでしょうか。

以上、宜しくお願い致します。

#Harrisを用いたソースコード(特徴点表示まで)

import cv2
import numpy as np
import sys
import matplotlib.pyplot as plt

fish = cv2.imread('pic/fish.jpg')
fish = cv2.cvtColor(book,cv2.COLOR_BGR2RGB)
g_fish = cv2.cvtColor(book,cv2.COLOR_BGR2GRAY)

gray = np.float32(g_fish)
dst = cv2.cornerHarris(src=gray,blockSize=2,ksize=3,k=0.04)
dst = cv2.dilate(dst,None)

fish= cv2.drawKeypoints(fish, dst, None)

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

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

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

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

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

guest

回答1

0

このときcornerHarris関数を使用していますが、この関数では特徴点しか算出することができません。

そういうものだからです.
corner点を検出しよう,というもの(Corner検出器)なのであって,特徴量がどうのいうものではありません.


他の「特徴量」に基づいて決められる「特徴点」の位置というのは,必ずしも corner 点ではないですよね.
つまり,そもそも話自体が違う.

投稿2021/06/18 07:32

編集2021/06/18 07:35
fana

総合スコア11658

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

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

tsukasa_onimaru

2021/06/18 07:37

つまりHarrisコーナー検出で画像のマッチングをすることは不可能ということでしょうか。
fana

2021/06/18 07:45 編集

別に,「コーナー点がマッチング処理に有用であろう」と考えること自体は自由だし,やってみればいいじゃないか,と思う. 複数のコーナー点の位置が2つの画像{A,B}から得られたとして「A側のあるコーナー点というのは,B側のどのコーナー点に対応するんだろうね?」っていう問題をどうにかするための何か(特徴量)が不足しているのであれば,それは別途用意してあげればいいのでは. e.g. ある座標(x,y)における「特徴量」が計算できるならば,計算して用いればいい. ただ, そのための既存実装があるのかどうかは不明だし(無ければ自前で実装すればいいだけだが), BFMatcher()というので使える形にもっていくためにどれだけ苦労があるかもわからないけども.
tsukasa_onimaru

2021/06/18 08:00

ご回答ありがとうございます。 調べた限り既存のものがないようなので特徴量算出、及びその特徴量を引数にしたマッチング関数を一から実装しなくてはならなさそうですね。 参考書等にマッチング手段としてORBやAKAZE等と同系列で扱われていたので既存のものでできると思っていました。
fana

2021/06/18 08:58 編集

Harrisであることにこだわらないならば,別の手段を用いてみては? CVのここら辺の実装を使ったことないので詳細不明ですが, GFTTDetector とかなら,コーナー検出であり,且つ,keypoint型で結果が得られるのではないでしょうか? (で,keypoint型で特徴点のデータがあれば,他の特徴量算出手段に特徴量を算出してもらえるのかも)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問