《人工智能开源硬件与python编程实践》课件-项目4 基于计算机视觉的物体形状检测
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
经验及调试方法
image.circle对象有四个值:x,y,r (半径)和magnitude。magnitude 是检测圆的强度,值越高越好
roi是一个用以搜索的矩形区域(x, y, w, h),图像操作范围仅限于roi区 域内的像素。如果未指定,默认的roi即整幅图像。
x_stride是霍夫变换时需要跳过的x像素的数量。若已知圆较大,可增 加x_stride。
任务与目标
了解图像处理及图形识别技术的基本原理、相关 算法和应用框架;
掌握运用人工智能开源硬件设计智能应用系统的 方法,掌握Python语言的编程方法;
应用人工智能开源硬件和Python相关算法模块设 计物体形状检测功能;
针对生活应用场景,进一步开展创意设计,设计 具有实用价值的物体形状检测应用系统。
设计与实践
形状检测Python编程接口 圆形检测编程 矩形检测编程 调试、验证及完善
形状检测编程接口
人工智能开源控制板上集成的Python视觉 库中提供利用霍夫变换检测直线、圆形、 矩形的算法;
提供find_lines方法进行直线检测; 提供find_circles方法进行圆形检测; 提供find_rects方法进行矩形检测。
通过选取合适的阈值,将256个不同等级的灰度 图像进行划分,划分结果仍然可以描绘图像的整 体或局部特征,这样就实现了图ቤተ መጻሕፍቲ ባይዱ的二值化。
知识拓展:霍夫变换
图像中的形状检测主要是侦测诸如直线、圆形、 椭圆形、矩形等几何形状,常用的算法是霍夫变 换。
霍夫变换是通过直角坐标系和极坐标系之间的变 换将图像空间中具有相同特征的直线或者曲线映 射到参数空间中的一个点上,然后在参数空间中 对点进行描述,使结果更易识别和检测,最后用 累加器进行累加,从而把检测图形的问题转化为 寻找最大累加值的问题。
利用霍夫变换进行圆检测,就是将图像空间中的 边缘特征像素点映射到参数空间,然后把参数空 间中的坐标点元素对应的累加值进行累加,最后 根据累加值确定圆心和半径。
知识拓展:矩形检测
基于窗口霍夫变换与阈值分割自动识别图 像中的矩形策略:通过图像窗口霍夫变换 ,提取霍夫图像的峰值(对应原始图像的 线段),当四个峰值满足某些几何条件时 ,则检测出矩形。
分析与思考
find_rects方法可以快速实现矩形的检测与追踪。生活中 经常会遇到三角形、菱形等其它几何形状的物体(如图) ,利用霍夫变换检测直线的方法有助于这些形状的检测吗 ?利用网络查阅相关技术方法,给出解决方案。
利用find_circles函数可以实现圆形物体的识别追踪,实际 生活中会有识别椭圆等形状物体的需求。如何参考圆的检 测原理,进行椭圆等形状物体的追踪?利用网络查阅相关 技术方法,给出解决方案。
知识拓展:图像预处理方法
灰度化 二值化 图像增强 图像去噪 边缘检测
知识拓展:灰度化
灰度化是一种常用的图像预处理方法,它将彩色 图像转化为灰度图像,应用在图像分析与识别等 应用中;
在RGB空间中,空间的原点对应的是黑色,距离 原点最远的那个顶点对应的是白色。原点和白色 顶点的连线段上对应了从黑色到白色的灰度值, 也称亮度值;
灰度图像只含有亮度信息,不含色彩信息,其亮 度是连续变化的,要表示灰度图像就需要把亮度 值进行量化,通常把灰度划分为256个灰度级, 从0到255。
知识拓展:二值化
值化也是图像预处理的一种技术,又称图像黑白 化。
通过二值化的处理,可以凸显出图像的轮廓。它 将像素点的灰度值设置为0或者255,不采用其它 灰度值,目的是使整个图像都呈现出黑白效果。
把图像平面上的特征像素点映射到参数平面上, 通过累计可能会出现几组参数峰值点,可以检测 出图像中的多条直线。
知识拓展:圆检测
对圆的检测本质上就是求三个参数(x0,y0,r),所 以就可以通过任意三点求解三个未知数,然后对 (x0,y0,r)这个集合投票,最终出现次数最多的一 组参数就是决定圆方程的参数。
Threshold参数的取值要根据应用场景的情 况进行调节。在矩形边缘处所有像素上滑 动索贝尔算子并进行累加,边界值小于 threshold的矩形会进入返回列表。
矩形检测例程
while(True):
clock.tick()
img = sensor.snapshot()
# find_rects中threshold应设置为足够高的值,以滤除在图像中检测到 的具有低边缘幅度的噪声矩形。最适用与背景形成鲜明对比的矩形。
圆形检测find_circles方法
image.find_circles()方法,使用霍夫变换在图像 中查找圆,返回一个image.circle对象列表;
x_stride是霍夫变换时需要跳过的x像素的数量。 若已知圆较大,可增加 x_stride 。
y_stride是霍夫变换时需要跳过的y像素的数量。 若已知圆较大,可增加 y_stride 。
知识拓展:霍夫变换的步骤
用canny算子进行边缘轮廓提取。在做霍夫变换 时,如果将所有的像素点都做映射处理,会导致 计算量太大,一般都是先用canny算子对边缘轮 廓做提取,尽可能的去掉平滑区域的点,减少计 算量;
利用二值化的方法以及开闭等形态学操作提取轮 廓,去掉噪声等扰动,求得在拟合线性方程时尽 可能准确;
在形状追踪应用中,环境光照的变化对识别形状结果有影 响吗?光照的影响严重到什么程度?请找到一种对策,并 设计解决方案。
如何利用find_blobs、find_circles等方法,同时进行颜色 识别与形状的综合识别?请尝试编程解决。
人工智能开源硬件与python编程实践
基于计算机视觉的 物体形状检测
情境导入
视觉分拣机器人,利用视觉系统采集图像,计算 机系统进行图像处理,先完成特征点检测、轮廓 检测等过程,再进行图像匹配或形状识别。
生活中经常遇到需要对物体形状进行判断的情形 ,自动拣球机可以发现视野内的乒乓球、高尔夫 球、足球等圆形物体,餐盘识别系统可以发现矩 形、圆形等指定形状的餐盘。学习物体形状检测 方法,了解相关应用技术,具有实际意义。
for r in img.find_rects(threshold = 25000): #查找矩形,阈值=10000
img.draw_rectangle(r.rect(), color = (255, 0, 0)) 颜色为红色
#画出矩形,
for p in r.corners():
#找出矩形的四个角
img.draw_circle(p[0], p[1], 5, color = (0, 255, 0))# 四个角顺时针 画出绿色的半径为5像素的圆形
threshold控制从霍夫变换中监测到的圆。只返回 大于或等于 threshold 的圆。应用程序的正确的 threshold值取决于图像。注意:一个圆的大小 (magnitude)是组成圆所有索贝尔滤波像素大小的 总和。
圆形检测例程
while(True): img = sensor.snapshot().lens_corr(1.3) #进行镜头畸变校正,去除图 像中的鱼眼效应; for c in img.find_circles(threshold = 2500, x_margin = 10, y_margin = 10, r_margin = 10,r_min = 2, r_max = 100, r_step = 2): #以圆心(c.x(), c.y())和半径c.r(),用黄色画圆; img.draw_circle(c.x(), c.y(), c.r(), color = (255, 255, 0))
y_stride 是霍夫变换时需要跳过的y像素的数量。若已知直线段较长, 可增加y_stride 。
threshold 控制从霍夫变换中监测到的圆。只返回大于或等于阈值的 圆。一个圆的大小是组成圆的所有索贝尔滤波像素大小的总和。
margin的分量x_margin、y_margin和r_margin用来控制所检测的圆的 合并。
利用霍夫变换完成空间映射;
用计数器统计出现次数最高的未知系数组合,如 (ρ,θ)等。
知识拓展:直线检测
根据提取出的很多特征点(X0,Y0),(X1,Y1),..., (Xn,Yn)求待拟合直线Y=kX+b中的斜率k和偏移b 。
通过任意两点得到若干组(k,b),选取出现次数 最多的一组(k,b)就是要求的参数。
r_min,r_max和r_step用来控制测试圆的半径。 缩小测试圆半径的数 值可以提升搜索性能。
阈值 threshold = 3500比较合适。如果视野中检测到的圆过多,需要 增大阈值;相反,如果视野中检测到的圆过少,需要减少阈值。
矩形检测find_rects方法
image.find_rects()方法用于查找图像中的 矩形,返回一个image.rect 对象的列表。该 方法适用于检测与背景形成鲜明对比的矩 形。