前提・実現したいこと
pythonでopencvを用いて指紋画像とそのぼかし画像の特徴点マッチングをさせるシステムを作ろうとしています。
実現させたいことはSIFT特徴点の距離が近い順に重複なしで15個マッチングさせることです。
発生している問題・エラーメッセージ
重複を許した15点でマッチングされてしまっている。そのため画像には11点しかマッチングされていない。
該当のソースコード
python
1#SIFT特徴点マッチング(norm変更) 2import cv2 #OpenCVのインポート 3import pandas as pd 4 5# img1の読み出し 6img1 = cv2.imread('fingerprint.png') 7# img2の読み出し 8img2 = cv2.imread('5blur.png') 9 10# img1をグレースケールで読み出し 11gray1 = cv2.cvtColor(img1,cv2.COLOR_BGR2GRAY) 12# img2をグレースケールで読み出し 13gray2 = cv2.cvtColor(img2,cv2.COLOR_BGR2GRAY) 14 15# sift検出器の生成 16sift = cv2.xfeatures2d.SIFT_create() 17kp1, des1 = sift.detectAndCompute(img1,None) 18kp2, des2 = sift.detectAndCompute(img2,None) 19 20 21# BFMatcherオブジェクトの生成 22bf = cv2.BFMatcher(cv2.NORM_L2, crossCheck=True) 23 24# Match descriptorsを生成 25matches = bf.match(des1, des2) 26 27# matchesをdescriptorsのdistance順(似ている順)にsortする 28matches = sorted(matches, key = lambda x:x.distance)[:15] 29 30# img3に検出結果(最初の15点)を描画 31img3 = cv2.drawMatches(img1, kp1, img2, kp2, matches, None, flags = cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS) 32cv2.imwrite('match_fingerprint_5blur_15point.png',img3) 33 34#特徴点 35img_pt1 = [list(map(int, kp1[m.queryIdx]. pt)) for m in matches] 36img_pt2 = [list(map(int, kp2[m.trainIdx]. pt)) for m in matches] 37 38# データフレームを作成 39df = pd.DataFrame([img_pt1,img_pt2]) 40 41#結果の表示 42df 43 44
ここにより詳細な情報を記載してください。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。