前提・実現したいこと
OpenCV for Unityの特徴点マッチングを使用して二つの画像の類似度計算を実装したいと思っています。
発生している問題・エラーメッセージ
2つの画像の特徴点を出したいと思っているのですが、
異なる画像を用意して比較してもdistanceの値が全て0になっていて全く同じ画像と識別されてしまいます。
大きさの異なる画像同士だと値が変化するのですが、大きさの同じ画像だと全て0になってしまいます。
該当のソースコード
// 二つの画像を用意
Mat img1Mat = new Mat (imgTexture1.height, imgTexture1.width, CvType.CV_8UC3);
Utils.texture2DToMat (imgTexture1, img1Mat);
Mat img2Mat = new Mat (imgTexture2.height, imgTexture2.width, CvType.CV_8UC3);
Utils.texture2DToMat (imgTexture2, img2Mat);
Point center = new Point (img2Mat.cols () * 0.5f, img2Mat.rows () * 0.5f);
Mat affine_matrix = Imgproc.getRotationMatrix2D (center, 0, 1.0f);
Imgproc.warpAffine (img1Mat, img2Mat, affine_matrix, img2Mat.size ());
ORB detector = ORB.create ();
ORB extractor = ORB.create ();
MatOfKeyPoint keypoints1 = new MatOfKeyPoint ();
Mat descriptors1 = new Mat ();
detector.detect (img1Mat, keypoints1);
extractor.compute (img1Mat, keypoints1, descriptors1);
MatOfKeyPoint keypoints2 = new MatOfKeyPoint ();
Mat descriptors2 = new Mat ();
detector.detect (img2Mat, keypoints2);
extractor.compute (img2Mat, keypoints2, descriptors2);
DescriptorMatcher matcher = DescriptorMatcher.create (DescriptorMatcher.BRUTEFORCE_HAMMINGLUT);
MatOfDMatch matches = new MatOfDMatch ();
matcher.match (descriptors1, descriptors2, matches);
// ここに類似度計算を入れたい
var matchList = matches.toList();
for(int i = 0; i < matchList.Count; i++)
{
Debug.Log(matchList[i].distance);
}
試したこと
色々な画像を用意して試してみましたが同じ大きさの画像は全てdistanceが0になってしまいます。
補足情報(FW/ツールのバージョンなど)
Unity2019.4.10f1
OpenCV for Unity 2.4.3
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。