
正文
pythonorb函数 python函数ord
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
OpenCV+Python特征提取算法与图像描述符之SIFT / SURF / ORB
算法效果比较博文
用于表示和量化图像pythonorb函数的数字列表,简单理解成将图片转化为一个数字列表表示。特征向量中用来描述图片的各种属性的向量称为特征矢量。
参考
是一种算法和方法,输入1个图像,返回多个特征向量(主要用来处理图像的局部,往往会把多个特征向量组成一个一维的向量)。主要用于图像匹配(视觉检测),匹配图像中的物品。
SIFT论文
原理
opencv官网解释
实质是在不同的尺度空间上查找关键点(特征点),并计算出关键点的方向。SIFT所查找到的关键点是一些十分突出,不会因光照,仿射变换和噪音等因素而变化的点,如角点、边缘点、暗区的亮点及亮区的暗点等。
尺度不变特征转换(Scale-invariant feature transform或SIFT)是一种电脑视觉的算法用来侦测与描述影像中的局部性特征,它在空间尺度中寻找极值点,并提取出其位置、尺度、旋转不变量。
其应用范围包含物体辨识、机器人地图感知与导航、影像缝合、3D模型建立、手势辨识、影像追踪和动作比对。
对现实中物体的描述一定要在一个十分重要的前提下进行,这个前提就是对自然界建模时的尺度。当用一个机器视觉系统分析未知场景时,计算机没有办法预先知道图像中物体的尺度,因此pythonorb函数我们需要同时考虑图像在多尺度下的描述,获知感兴趣物体的最佳尺度。图像的尺度空间表达指的是图像的所有尺度下的描述。
KeyPoint数据结构解析
SURF论文
原理
opencv官网解释
SURF是SIFT的加速版,它善于处理具有模糊和旋转的图像,但是不善于处理视角变化和光照变化。在SIFT中使用DoG对LoG进行近似,而在SURF中使用盒子滤波器对LoG进行近似,这样就可以使用积分图像了(计算图像中某个窗口内所有像素和时,计算量的大小与窗口大小无关)。总之,SURF最大的特点在于采用了Haar特征以及积分图像的概念,大大加快了程序的运行效率。
因为专利原因,OpenCV3.3开始不再免费开放SIFT\SURF,需要免费的请使用ORB算法
ORB算法综合了FAST角点检测算法和BRIEFF描述符。
算法原理
opencv官方文档
FAST只是一种特征点检测算法,并不涉及特征点的特征描述。
论文
opencv官方文档
中文版
Brief是Binary Robust Independent Elementary Features的缩写。这个特征描述子是由EPFL的Calonder在ECCV2010上提出的。主要思路就是在特征点附近随机选取若干点对,将这些点对的灰度值的大小,组合成一个二进制串,并将这个二进制串作为该特征点的特征描述子。文章同样提到,在此之前,需要选取合适的gaussian kernel对图像做平滑处理。
1pythonorb函数:不具备旋转不变性。
2:对噪声敏感
3:不具备尺度不变性。
ORB论文
OpenCV官方文档
ORB采用了FAST作为特征点检测算子,特征点的主方向是通过矩(moment)计算而来解决了BRIEF不具备旋转不变性的问题。
ORB还做了这样的改进,不再使用pixel-pair,而是使用9×9的patch-pair,也就是说,对比patch的像素值之和,解决了BRIEF对噪声敏感的问题。
关于计算速度:
ORB是sift的100倍,是surf的10倍。
对图片数据、特征分布的一种统计
对数据空间(bin)进行量化
Kmeans
边缘:尺度问题-不同的标准差 捕捉到不同尺度的边缘
斑点 Blob:二阶高斯导数滤波LoG
关键点(keypoint):不同视角图片之间的映射,图片配准、拼接、运动跟踪、物体识别、机器人导航、3D重建
SIFT\SURF
相关问答
Q1: OpenCV-Python教程:41.特征匹配
Brute-Force匹配器基础
Brute-Force匹配器很简单,它取第一个集合里一个特征的描述子并用第二个集合里所有其他的特征和他通过一些距离计算进行匹配。最近的返回。
对于BF匹配器,首先我们得用cv2.BFMatcher()创建BF匹配器对象.它取两个可选参数,第一个是normType。它指定要使用的距离量度。默认是cv2.NORM_L2。对于SIFT,SURF很好。(还有cv2.NORM_L1)。对于二进制字符串的描述子,比如ORB,BRIEF,BRISK等,应该用cv2.NORM_HAMMING。使用Hamming距离度量,如果ORB使用VTA_K == 3或者4,应该用cv2.NORM_HAMMING2
第二个参数是布尔变量,crossCheck模式是false,如果它是true,匹配器返回那些和(i, j)匹配的,这样集合A里的第i个描述子和集合B里的第j个描述子最匹配。两个集合里的两个特征应该互相匹配,它提供了连续的结果,
当它创建以后,两个重要的方法是BFMatcher.match()和BFMatcher.knnMatch()。第一个返回最匹配的,第二个方法返回k个最匹配的,k由用户指定。当我们需要多个的时候很有用。
想我们用cv2.drawKeypoints()来画关键点一样,cv2.drawMatches()帮我们画匹配的结果,它把两个图像水平堆叠并且从第一个图像画线到第二个图像来显示匹配。还有一个cv2.drawMatchesKnn来画k个最匹配的。如果k=2,它会给每个关键点画两根匹配线。所以我们得传一个掩图,如果我们想选择性的画的话。
让我们各看一个SURF和ORB的例子(都使用了不同的距离度量)
使用ORB描述子的Brute-Force匹配
这里我们会看到如何匹配两个图片的里的特征。在这个例子里,我有一个查询图像和一个训练图像,我们用特征匹配来在训练图像里找查询图像。
我们使用SIFT描述子来匹配特征,所以让我们先加载图像,找到描述子。
接着我们用距离度量cv2.NORM_HAMMING创建一个BFMatcher对象,crossCheck设为真。然后我们用Matcher.match()方法来获得两个图像里最匹配的。我们按他们距离升序排列,这样最匹配的(距离最小)在最前面。然后我们画出最开始的10个匹配(为了好看,你可以增加)
下面是结果:
什么是匹配器对象?
matches = bf.match(des1, des2)的结果是DMatch对象列表。这个DMatch对象有下面的属性:
·DMatch.distance - 描述子之间的距离。越低越好
·DMatch.trainIdx - 训练描述子里的描述子索引
·DMatch.queryIdx - 查询描述子里的描述子索引
·DMatch.imgIdx - 训练图像的索引
用SIFT描述子和比率测试的Brute-Force 匹配
这次,我们使用BFMatcher.knnMatch()来获得k个最匹配的。在这个例子里,我们设置k=2这样我们可以应用比率检测。
看下面的结果
基于FLANN的匹配器
FLANN是快速估计最近邻的库。它包含了一些为大数据集内搜索快速近邻和高维特征的优化算法。它在大数据集的时候比BFMatcher更快。
对于基于FLANN的匹配器,我们需要传两个字典指定要用的算法,他们相关的参数等。第一个是IndexParams。对于更多算法,要传的信息参看FLANN的文档。作为总结,对于像SIFT,SURF等的算法,你可以传下面的:
当使用ORB,你可以传下面的。注释里的值是推荐的值。但是在有些情况下不提供需要的结果。其他的值工作正常。
第二个字典是SearchParams,它指定了索引里的树应该被递归遍历的次数。更高的值带来更高的准确率。但是也花更多时间,如果你想改变值,search_params = dict(checks=100).
通过这些信息,我们可以开始了:
结果:
END
Q2: 在orb算法中计算匹配时间加什么函数计时
在“EXCEL选项”中有“加载项”一项pythonorb函数,可以用来查看和管理加载项pythonorb函数,其中就有“分析工具库”。双击它pythonorb函数,会打开一个窗口,选中pythonorb函数你需要pythonorb函数的内容,点击“确定”。建议使用SAS,SPSS软件,这些事专业的统计学软件。我在自学SPSS,简单快捷的软件,IBM出的。
Q3: 求Python大神帮助解答 貌似要写程序 关于三角函数面积
程序已经帮您写好,下面是按照要求的程序,因为没有说明如果构不成三角形应该输出什么,所以暂时先输出This
is
an
invalid
triangle这样的字样,如果有明确的要求,可以更改。
import
math
a,b,c=raw_input("Please
enter
length
of
three
sides:
").split()
a=float(a)
b=float(b)
c=float(c)
if
a=0
or
b=0
or
c=0:
"This
is
an
invalid
triangle."
elif
a+b=c
or
a+c=b
or
b+c=a:
"This
is
an
invalid
triangle."
else:
s=(a+b+c)/2
area=math.sqrt(s*(s-a)*(s-b)*(s-c))
"%.2f"
%
area
经过一系列测试,这个程序是完全可行的,用的是Python
2.7.3
若不懂,请追问,望采纳!
Q4: 若a=1,b=2,那么(a or b)的值为()python
将变量a、b的值代入表达式:(a-b) or not (a+b/2=2)and (a=b)=(1-2)or not(1+2/2=2)and (1=2)=1 or 0 and 0=1or 0=1,1即为TRUE.
故选:B.
pythonorb函数的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于python函数ord、pythonorb函数的信息别忘了在本站进行查找喔。







