In [17]:
from matplotlib import pyplot as plt
import cv2
import numpy as np
def plotImage(title,image):
plt.figure(figsize=(20,12))
plt.gray()
plt.imshow(image)
plt.title(title)
plt.axis('off')
plt.show()
# ORB
def Orb_descript_FLANN(imgA,imgB):
MIN_MATCH_COUNT = 1
orb = cv2.ORB_create()
kpA, desA = orb.detectAndCompute(imgA,None)
kpB, desB = orb.detectAndCompute(imgB,None)
FLANN_INDEX_LSH = 6
index_params= dict(algorithm = FLANN_INDEX_LSH,
table_number = 6, # 12
key_size = 12, # 20
multi_probe_level = 1) #2
search_params = dict(checks = 50)
flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.knnMatch(desA,desB,k=2)
good = []
for m,n in matches:
if m.distance < 0.7*n.distance:
good.append(m)
print(kpA[m.queryIdx].pt)
print(kpB[m.trainIdx].pt)
if len(good)>MIN_MATCH_COUNT:
src_pts = np.float32([kpA[m.queryIdx].pt for m in good]).reshape(-1,1,2)
dst_pts = np.float32([kpB[m.trainIdx].pt for m in good]).reshape(-1,1,2)
M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)
matchesMask = mask.ravel().tolist()
h,w = imgA.shape
pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2)
dst = cv2.perspectiveTransform(pts,M)
img2 = cv2.polylines(imgB,[np.int32(dst)],True,255,3, cv2.LINE_AA)
else:
#print "Not enough matches are found - %d/%d" % (len(good),MIN_MATCH_COUNT)
matchesMask = None
draw_params = dict(matchColor = (0,255,0), # draw matches in green color
singlePointColor = (255,0,255),
matchesMask = matchesMask, # draw only inliers
flags = 2)
img3 = cv2.drawMatches(imgA, kpA, imgB, kpB,good, None,**draw_params)
#img3 = cv2.drawMatches(imgA,kpA,imgB,kpB,good,None,**draw_params)
#plt.imshow(img3, 'gray'),plt.show()
plotImage("ORB_FLANN ", img3)
# AKAZE
def Akaze_descript_FLANN(imgA,imgB):
MIN_MATCH_COUNT = 1
akaze=cv2.AKAZE_create()
kpA, desA = akaze.detectAndCompute(imgA,None)
kpB, desB = akaze.detectAndCompute(imgB,None)
FLANN_INDEX_LSH = 6
index_params= dict(algorithm = FLANN_INDEX_LSH,
table_number = 6, # 12
key_size = 12, # 20
multi_probe_level = 1) #2
search_params = dict(checks = 50)
flann = cv2.FlannBasedMatcher(index_params, search_params)
matches = flann.knnMatch(desA,desB,k=2)
good = []
for m,n in matches:
if m.distance < 0.7*n.distance:
good.append(m)
if len(good)>MIN_MATCH_COUNT:
src_pts = np.float32([ kpA[m.queryIdx].pt for m in good ]).reshape(-1,1,2)
dst_pts = np.float32([ kpB[m.trainIdx].pt for m in good ]).reshape(-1,1,2)
M, mask = cv2.findHomography(src_pts, dst_pts, cv2.RANSAC,5.0)
matchesMask = mask.ravel().tolist()
h,w = imgA.shape
pts = np.float32([ [0,0],[0,h-1],[w-1,h-1],[w-1,0] ]).reshape(-1,1,2)
dst = cv2.perspectiveTransform(pts,M)
img2 = cv2.polylines(imgB,[np.int32(dst)],True,255,3, cv2.LINE_AA)
else:
#print "Not enough matches are found - %d/%d" % (len(good),MIN_MATCH_COUNT)
matchesMask = None
draw_params = dict(matchColor = (0,255,0), # draw matches in green color
singlePointColor = (255,0,255),
matchesMask = matchesMask, # draw only inliers
flags = 2)
img3 = cv2.drawMatches(imgA, kpA, imgB, kpB, good[:], None, flags=2)
#img3 = cv2.drawMatches(imgA,kpA,imgB,kpB,good,None,**draw_params)
#plt.imshow(img3, 'gray'),plt.show()
plotImage("ORB_FLANN ", img3)
img11 = cv2.imread('./imagens_teste/_0/total_imagens/teste__1_1_1_0.png', 0)
img22= cv2.imread ('./imagens_teste/_0/mosaicos/mosaico_1_1_1.png')
if img11 == None or img22 == None:
print("Image load error.")
else:
Orb_descript_FLANN(img11,img22)
Akaze_descript_FLANN(img11,img22)