二、经典计算机视觉算法

经典计算机视觉算法

霍夫变换

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中就对应了一条直线。

img

2)图像空间中的直线与参数空间中的点一一对应

在直线y = kx+b上再增加一个点B(x1,y1),那么点B(x1,y1)在参数空间k-b中同样对应了一条直线

img

可以看到,图像空间x-y中的点A和点B在参数空间k-b中对应的直线相交于一点,这也就是说AB所确定的直线,在参数空间中对应着唯一一个点,而这个点的坐标值(k0,b0)也就是直线AB的参数

总结来说,在参数k-b平面上相交直线最多的点,对应的x-y平面上的直线就是我们的解

img

二、参数空间的选择

上述为了方便理解对偶性和霍夫变换的基本原理,我们的参数空间也选择了笛卡尔直角坐标系。但在实际应用中,参数空间是不能选择直角坐标系的,因为原始图像直角坐标空间中的特殊直线x=c(垂直x轴,直线的斜率为无穷大)是没办法在基于直角坐标系的参数空间中表示的。如下图所示,为一条垂直于x轴的直线,将各点转换到参数空间k-b后的情况:

img

一般我们采用极坐标方式作为参数空间。如图所示,为图像坐标系到极坐标系参数空间的转换过程:

图5 极坐标作为参数空间

对于图像空间中的垂线来说,用极坐标可以表示为:r=xcosθ+ysinθ

每个(r,θ)都对应了图像空间的一条直线,或者说图像空间的一个点在参数空间中就对应为一条曲线。参数空间采用极坐标系,这样就可以在参数空间表示原始空间中的所有直线了。

注意,此时图像空间(直角坐标系x-y)上的一个点对应到参数空间(极坐标系ρ-θ)上是一条曲线,确切的说是一条正弦曲线。

如图所示,为图像空间到极坐标参数空间的转换过程:

图6a 图像空间到极坐标参数空间的转换

图6b 图像空间到极坐标参数空间的转换

这样就把在图像空间中检测直线的问题转化为在极坐标参数空间中找通过点(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点就是一个圆心。

img

代码实现
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个:

  1. 平方差匹配 method=CV_TM_SQDIFF

    这类方法利用平方差来进行匹配,最好匹配为0.匹配越差,匹配值越大.

在这里插入图片描述

  1. 标准平方差匹配 method=CV_TM_SQDIFF_NORMED

在这里插入图片描述

  1. 相关匹配 method=CV_TM_CCORR

    这类方法采用模板和图像间的乘法操作,所以较大的数表示匹配程度较高,0标识最坏的匹配效果.

    R(x,y)= \sum _{x',y'} (T(x',y')  \cdot I(x+x',y+y'))

  2. 标准相关匹配 method=CV_TM_CCORR_NORMED

    R(x,y)= \frac{\sum_{x',y'} (T(x',y') \cdot I'(x+x',y+y'))}{\sqrt{\sum_{x',y'}T(x',y')^2 \cdot \sum_{x',y'} I(x+x',y+y')^2}}

  3. 相关匹配 method=CV_TM_CCOEFF

    这类方法将模版对其均值的相对值与图像对其均值的相关值进行匹配,1表示完美匹配,-1表示糟糕的匹配,0表示没有任何相关性(随机序列).

    R(x,y)= \sum _{x',y'} (T'(x',y')  \cdot I(x+x',y+y'))

    \begin{array}{l} T'(x',y')=T(x',y') - 1/(w  \cdot h)  \cdot \sum _{x'',y''} T(x'',y'') \ I'(x+x',y+y')=I(x+x',y+y') - 1/(w  \cdot h)  \cdot \sum _{x'',y''} I(x+x'',y+y'') \end{array}

  4. 标准相关匹配 method=CV_TM_CCOEFF_NORMED

    R(x,y)= \frac{ \sum_{x',y'} (T'(x',y') \cdot I'(x+x',y+y')) }{ \sqrt{\sum_{x',y'}T'(x',y')^2 \cdot \sum_{x',y'} I'(x+x',y+y')^2} }

这类方法利用平方差来进行匹配,最好匹配为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))

经典算法的不足

旋转 、大小 、形变 、遮挡 、亮度 、其他泛化问题会影响匹配的准确性。

本期内容回顾

• 高阶特征的识别和提取-霍夫变换

• 模板匹配—计算视觉识别任务的经典应用

• 经典计算视觉算法的不足—模板匹配抗旋转和形变等干扰的不足

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值