经典计算机视觉算法
霍夫变换
1.选定要识别的形状的种类
2.将直角坐标系的参数空间投影到特殊的参 数空间
3.寻找交点确定识别到的形状(通过在参数 空间中累加的的局部最大值(local maximum) 来决定。
线检测
一、关于对偶性
参考:https://blog.csdn.net/leonardohaig/article/details/87907462
1)图像空间中的点与参数空间中的直线一一对应。
在图像空间x-y中,一条直角坐标系下可以表示为:y = kx+b,其中k和b是参数,表示直线的斜率和截距。
过某一点A(x0,y0)的所有直线的参数均满足方程y0=kx0+b,即点A(x0,y0)确定了一族直线。
如果将方程改写为:b=-kx0+y0,那么该方程在参数空间k-b中就对应了一条直线。
2)图像空间中的直线与参数空间中的点一一对应
在直线y = kx+b上再增加一个点B(x1,y1),那么点B(x1,y1)在参数空间k-b中同样对应了一条直线
可以看到,图像空间x-y中的点A和点B在参数空间k-b中对应的直线相交于一点,这也就是说AB所确定的直线,在参数空间中对应着唯一一个点,而这个点的坐标值(k0,b0)也就是直线AB的参数
总结来说,在参数k-b平面上相交直线最多的点,对应的x-y平面上的直线就是我们的解
二、参数空间的选择
上述为了方便理解对偶性和霍夫变换的基本原理,我们的参数空间也选择了笛卡尔直角坐标系。但在实际应用中,参数空间是不能选择直角坐标系的,因为原始图像直角坐标空间中的特殊直线x=c(垂直x轴,直线的斜率为无穷大)是没办法在基于直角坐标系的参数空间中表示的。如下图所示,为一条垂直于x轴的直线,将各点转换到参数空间k-b后的情况:
一般我们采用极坐标方式作为参数空间。如图所示,为图像坐标系到极坐标系参数空间的转换过程:
对于图像空间中的垂线来说,用极坐标可以表示为:r=xcosθ+ysinθ
每个(r,θ)都对应了图像空间的一条直线,或者说图像空间的一个点在参数空间中就对应为一条曲线。参数空间采用极坐标系,这样就可以在参数空间表示原始空间中的所有直线了。
注意,此时图像空间(直角坐标系x-y)上的一个点对应到参数空间(极坐标系ρ-θ)上是一条曲线,确切的说是一条正弦曲线。
如图所示,为图像空间到极坐标参数空间的转换过程:
这样就把在图像空间中检测直线的问题转化为在极坐标参数空间中找通过点(r,θ)的最多正弦曲线数的问题。霍夫空间中,曲线的交点次数越多,所代表的参数越确定,画出的图形越饱满。
圆检测
1、圆的一般方程:(x-a)2+(y-b)2=r2,(a,b)为圆心,r 半径
2、空间转换:(a-x0)2+(b-y0)2=r2, 把X-Y平面上的圆转换到a-b-r参数空间,例如当x0=2、y0=2时的三维图形:
从下图可以形象的看出,三个圆锥面的交点A 是同时过这三个点的圆,累加次数最多的A点就是一个圆心。
代码实现
import skimage.transform as transform
#线检测
transform.hough_line(img)
#圆检测,需要输入半径
transform.hough_circle(img,radii)
import skimage.measure as measure
#轮廓检测,需要输入轮廓强度
contours=measure.find_contours(img,0.5)
模板匹配
可以识别不规则图形
原理
下图采用平方差匹配:
OpenCV通过函数 matchTemplate实现了模板匹配算法. 可用的方法有6个:
-
平方差匹配 method=CV_TM_SQDIFF
这类方法利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大.
- 标准平方差匹配 method=CV_TM_SQDIFF_NORMED
-
相关匹配 method=CV_TM_CCORR
这类方法采用模板和图像间的乘法操作,所以较大的数表示匹配程度较高,0标识最坏的匹配效果.
-
标准相关匹配 method=CV_TM_CCORR_NORMED
-
相关匹配 method=CV_TM_CCOEFF
这类方法将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性(随机序列).
-
标准相关匹配 method=CV_TM_CCOEFF_NORMED
这类方法利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大.
案例:
代码
import skimage.feature as feature
res=feature.match_template(img,template,pad_input=True,mode='constant',constant_values=0)
#找图片中匹配度最大的坐标
index=np.where(res==np.max(res))
经典算法的不足
旋转 、大小 、形变 、遮挡 、亮度 、其他泛化问题会影响匹配的准确性。
本期内容回顾
• 高阶特征的识别和提取-霍夫变换
• 模板匹配—计算视觉识别任务的经典应用
• 经典计算视觉算法的不足—模板匹配抗旋转和形变等干扰的不足