上面的图像已被篡改(数字 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:这是我在这里的第一个问题。如果我不清楚或我问的内容太宽泛,请告诉我。如果您有任何不确定的地方,我会尝试添加更多信息。我整天都在做这个,我很累,请帮忙。