.31 2013

ORB特徴点のマッチング

こんにちわ。Uedaです。

OpenCVを使って、ORB特徴点で2枚の画像からどこが同じ特徴のところかを調べてみました。


UIImage *image1 = [UIImage imageNamed:@"IMG_0091.jpg"];
UIImage *image2 = [UIImage imageNamed:@"IMG_0092.jpg"];

Mat imageMat1 = [self cvMatFromUIImage:image1];
Mat imageMat2 = [self cvMatFromUIImage:image2];

Mat grayImage1, grayImage2;
cvtColor(imageMat1, grayImage1, CV_BGR2GRAY);
cvtColor(imageMat2, grayImage2, CV_BGR2GRAY);

OrbFeatureDetector detector(500);
OrbDescriptorExtractor extractor;

std::vector keypoints1, keypoints2;
detector.detect(grayImage1, keypoints1);
detector.detect(grayImage2, keypoints2);

Mat descriptor1, descriptor2;
extractor.compute(grayImage1, keypoints1, descriptor1);
extractor.compute(grayImage2, keypoints2, descriptor2);

vector matches;
BFMatcher matcher(cv::NORM_HAMMING, true);
matcher.match(descriptor1, descriptor2, matches);

for (int i = 0; i < matches.size(); i++)
{
NSLog(@"%f", matches[i].distance);
if (matches[i].distance < 50.0)
{
KeyPoint p1 = keypoints1.at(matches[i].queryIdx);
cv::circle(imageMat1, cv::Point(p1.pt.x, p1.pt.y), 20, Scalar(255, 255, 0), -1);

KeyPoint p2 = keypoints2.at(matches[i].trainIdx);
cv::circle(imageMat2, cv::Point(p2.pt.x, p2.pt.y), 20, Scalar(255, 255, 0), -1);
}
}

[self.imageView1 setImage:[self UIImageFromCVMat:imageMat1]];
[self.imageView2 setImage:[self UIImageFromCVMat:imageMat2]];


結果
orbTest.png

うーん...

以上です。
関連記事
スポンサーサイト



Comment

Post comment

  • comment
  • secret
  • 管理者にだけ表示を許可する

Trackback

trackbackURL:http://appteam.blog114.fc2.com/tb.php/273-a0f89faa

ブログ内検索

関連リンク

製品情報

最新記事

カテゴリ

プロフィール

neoxneo



NEXT-SYSTEM iOS Developers Blog


  • UTO:
    カナダ版iPhone4Sは、マナーモードでシャッター音がならない…


  • Ehara:
    ...


  • Hayate:
    ...


  • Tasaki:
    Developer登録完了...したのはいいけど


  • Ueda:
    ...



リンク