首页 > 解决方案 > 打印扫描过程后如何在图像中找到相同的特征点?

问题描述

我试图在打印扫描过程之前和之后在图像中找到相同的特征点。为此,我使用了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)

我得到的要点是:

原始图像

array([[[ 62., 186.]],

       [[298., 398.]],

       [[ 47., 185.]],

       [[298.,  68.]],

       [[195., 135.]]], dtype=float32)

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

在此处输入图像描述

array([[[297., 403.]],

       [[297., 359.]],

       [[268., 359.]],

       [[268., 396.]],

       [[308.,  65.]]], dtype=float32)

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

标签: pythonopencvimage-processingfeature-extractionfeature-detection

解决方案


通常,特征点是不稳定的,并且在您修改图像时会在位置和得分上发生变化。

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


推荐阅读