如何在打印扫描过程后在图像中找到相同的特征点?

问题描述

我试图在打印扫描过程之前和之后在图像中找到相同的特征点。为此,我使用了 cv2.goodFeaturesToTrack 方法

import numpy as np
import matplotlib.pyplot as plt
from PIL import Image
from skimage import color,transform
import cv2

# Read image as Numpy array
image = np.array(Image.open('images/stairway512.jpg'))

# Blur image
imageBlurred = cv2.blur(image,(10,10))

# Find 5 feature points in cropped & blurred image
points = cv2.goodFeaturesToTrack(imageBlurred,5,0.01,10)

我得到的分数是:

Original image

array([[[ 62.,186.]],[[298.,398.]],[[ 47.,185.]],68.]],[[195.,135.]]],dtype=float32)

我使用模糊是因为我认为它可以最大限度地减少打印扫描过程的影响(因为我可以用同样的方式模糊扫描图像),但我最终得到了不同的扫描图像特征点。但是,当我对扫描图像使用相同的代码时,我得到了以下几点:

enter image description here

array([[[297.,403.]],[[297.,359.]],[[268.,396.]],[[308.,65.]]],dtype=float32)

关于如何使这些观点相同的任何想法?

解决方法

一般来说,特征点是不稳定的,当你修改图像时,特征点的位置和分数会发生变化。

取更多的特征点(比如 100、5 太小了)并通过最近邻规则将它们成对关联。这将使您更深入地了解使用此检测器可以实现的目标。