使用python中的关键点进行复制移动伪造检测

时间:2018-10-18 17:00:44

标签: opencv k-means sift keypoint feature-descriptor

我正在尝试通过关键点检测复制移动伪造。我正在使用此

此上图已被篡改(复制并移动了数字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:这是我的第一个问题。如果我不清楚或我要求的范围太广,请告诉我。如果您不确定什么,我将尝试添加更多信息。我整天都在为此工作,很累,请帮忙。

0 个答案:

没有答案