《opencv学习》Shi-Tomasi 角点检测

本文深入讲解了Harris角点检测和Shi-Tomasi角点检测两种算法的区别及实现方式,并通过实例代码展示了如何利用这两种算法进行角点检测。

Shi-Tomasi 角点检测 和 Harris 角点检测的很多步骤都是一样的。
Harris 角点检测最后会得到一个相似度函数C,这个函数是一个对称矩阵M,可以将对称矩阵分解得到一个P的逆乘以特征值矩阵乘以P的形式(P是特征向量矩阵,正交的)。
对于一个角点来说, 随着位置的稍微移动,基本上相似度函数都会变化非常大。

如果固定函数E的值,那么后面的式子就是一个椭圆方程。而且M也是个定值,那么就是位置变化量(u, v)才是变化量,也就是说,在某个方向上,移动多少距离,C值就会变多少。移动相同位置,变化的越快的,说明像素差异变化越大,如果移动了很长的一点距离都没有怎么变化(C 值变化不大)那么说明像素值变化相差异不大,而我们希望得到水平和数值俩方向都变化很大的才是角点。

而这种变化程度,椭圆的变化程度,可以用特征值来表示。椭圆上某个方向越短,变化越剧烈,对应的这个特征值越大。椭圆上某个方向越长,变化越缓慢,对应的这个特征值越小。

在Harris算法中,通过下面的式子来判断是不是角点
在这里插入图片描述
在这里插入图片描述

而在Shi-Tomasi算法中,这点处理不一样,
是通过设置一个阈值λmin来判断是不是角点
如果λ1和λ2都小于λmin,则是平面点
如果只有一个小于,则是直线。
如果λ1和λ2都大于λmin,则是角点。
在这里插入图片描述
在这里插入图片描述
对比代码展示如下:

import cv2
import numpy as np

# 1.cv2.cornerHarris(img, blocksize, kszie, k)  # 找出图像中的角点
# 参数说明:
# img:是数据类型为float32的输入图像,表示输入的灰度图,
# blocksize:我们检测过程中需要一个窗口,这个就是窗口的大小,W(x,y)
# kszie:运用Sobel算子求解每个像素的梯度。有Ix和Iy方向的。
# k:是角点响应值运算中的α数值,一般推荐是[0.06, 0.06]
img = cv2.imread
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值