gpt4 book ai didi

python - 具有对比度阈值的 Opencv 2.4 密集 SIFT

转载 作者:太空宇宙 更新时间:2023-11-03 22:49:10 26 4
gpt4 key购买 nike

我正在尝试使用 openCV-python 2.4 计算密集 SIFT

import cv2
def gen_sift_features(gray, step_size, gamma):
dense = cv2.FeatureDetector_create("Dense")
dense.setInt('initXyStep',step_size)
kp = dense.detect(gray)

sift = cv2.SIFT(contrastThreshold=gamma)
kp, desc = sift.compute(gray, kp)
return kp, desc

img = cv2.imread('myimage.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
kp, desc = gen_sift_features(gray, 8, 0.01)

通常情况下,对比度阈值会过滤掉低对比度区域的关键点,但在这种情况下,它被忽略了,openCV 仍然为我提供所有关键点的筛选描述符。

enter image description here

有人知道在这种情况下如何过滤掉低对比度描述符吗?感谢您的帮助!

编辑:我试图仔细观察并删除所有空描述符

remove = []
for i in range(0,len(desc)):
if sum(desc[i])==0:
remove.append(i)

np.delete(desc,remove)
for i in sorted(remove, reverse=True):
del kp[i]

enter image description here

但是当我改变我的contrastThreshold时,结果还是一样!!!!似乎该参数仍被忽略

最佳答案

考虑到您的示例,我会简单地使用拉普拉斯滤波器 [0] 来查找高频区域(另请参阅 opencv [1] 的边缘检测教程)。然后,您可以通过对其设置阈值来将其响应转换为掩码,并使用 np.where 检索掩码的事件像素:

import numpy as np
import cv2

def find_high_contrast_key_points(img, threshold):
laplacian = cv2.Laplacian(img,cv2.CV_64F)
high_contrast_r, high_contrast_c = np.where(laplacian > threshold)

kp = [cv2.KeyPoint(x, y, 1) for y, x in zip(high_contrast_r, high_contrast_c)]

return kp

OpenCV 中的 cv2.Laplacian 过滤器采用一个大小参数,您可能想要使用它。还可以使用形态学操作 [2] 对拉普拉斯算子输出进行其他修改。

[0] http://docs.opencv.org/3.0-beta/modules/imgproc/doc/filtering.html?highlight=laplacian#cv2.Laplacian

[1] http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_gradients/py_gradients.html

[2] http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_morphological_ops/py_morphological_ops.html?highlight=morphology

关于python - 具有对比度阈值的 Opencv 2.4 密集 SIFT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42201204/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com