对于openCV项目,我需要从描述符匹配中找到“完美”的单应性。我推动了参数:很多角落,反转门槛很低......
它很接近,但我需要几乎像素完美的单应性。
我将标记命名为我正在寻找的图像,查询包含标记的图像。
我的想法是优化查询图像中标记的4个角位置。然后从这些精致的4个角落重新计算单应性。
我正在考虑使用霍夫来检测线路交叉点。所以我得到了确实很好的候选人。
现在我需要一个分数函数来评估哪些候选者是“最好的”。这就是我试过的
1 / - 让我们叫H同性恋 - test =查询+ H *标记。因此,如果我的单应性是“完美的”,那么测试将与查询相同(但对于阴影......)。
2 /然后我像下面一样幼稚地计算“差异”。我将绝对差值相加然后除以面积(否则越小越好)。不可靠......我给了这些金额更多的权重,但仍然失败了。
对我来说这似乎是一个好主意,但现在这是一个史诗般的失败:差异并没有帮助找到“更好”的角落。有什么想法吗?
非常感谢,
迈克尔
def diffImageScore(testImage,workingImage, queryPersp):
height,width,d = testImage.shape
height2,width2,d2 = workingImage.shape
area=quadrilatereArea(queryPersp)*1.0
score=0
height, width, depth = testImage.shape
img1Gray= cv2.cvtColor(cv2.blur(testImage,(3,3)), cv2.COLOR_BGR2GRAY)
img2Gray= cv2.cvtColor(cv2.blur(workingImage,(3,3)), cv2.COLOR_BGR2GRAY)
for i in range(0, height):
for j in range(0, width):
s1=abs(int(img1Gray[i,j]) -int(img2Gray[i,j] ))
s1=pow(s1,3)
score+=s1
return score/area