此上图已被篡改(复制并移动了数字4)。我得到了关键点(数字= 891)和每个关键点的描述符。 descriptors = (891x128
的形状)。这是绘制关键点的图像。
现在我必须对这些描述符进行聚类,对吗?我应该怎么做?我提到了许多论文,但它们仅显示流程图,但未显示如何执行,并且大多数是混合的。大多数StackOverflow问题涉及多个图像(来自图像相似性域)。
我认为位于两个4上的关键点的描述符将相同,因此我尝试使用以下代码在描述符矩阵中找到重复的值:
import cv2
from collections import Counter
import numpy as np
img = cv2.imread('img_tamp_1.bmp')
gray= cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
sift = cv2.xfeatures2d.SIFT_create()
kp, des = sift.detectAndCompute(gray,None)
print('number of key points:', len(kp))
kp = np.array(kp)
des = np.array(des)
u = np.unique(des, axis = 0)
print('unique:', len(u))
img=cv2.drawKeypoints(gray,kp,img)
cv2.imwrite('sift_keypoints.jpg',img)
输出为:
number of key points: 891
unique: 880
仅暗示11个重复的关键点。这使我感到困惑。
那么我应该如何对行向量进行聚类,以便进一步进行操作并标记伪造的区域?
如果有人可以用一些视觉输出直观地解释聚类处理,我会很高兴。
PS:这是我的第一个问题。如果我不清楚或我要求的范围太广,请告诉我。如果您不确定什么,我将尝试添加更多信息。我整天都在为此工作,很累,请帮忙。