Skip to content

Jingling1/buff

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

18 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

buff能量机关的视觉识别

一、 灰度图的获取 先后采用YUV通道相减、HSV颜色分割,出现以下问题——能量机关周围有光晕大面积被处理为白色,能量机关颜色HSV范围跨度太大不能很好的分割。为解决以上问题,先将RGB图像转换为灰度图,再对灰度图进行幂率变换(若使用相机调节gamma值可以直接达到效果,对灰度图进行幂率变换与直接对RGB图像幂率变换相比,计算量更少),再进行阈值分割之后不再区分红蓝能量机关,能量机关获取方法见下,一般的红蓝色,或者光晕,不对识别产生影响(进行了取反、漫水填充等操作)。(其中幂率变换可使用两个API加快),若现场采集的图像gamma值合适,可以省去幂率变换。

二、 能量机关扇叶的获取 一开始对整张图取反等处理后,进行漫水填充,出现了能量机关破损的情况,漫水填充失效,之后联想到连通域(扇叶虽然破损,但仍是一个连通图形),使用了连通域函数connectedComponentsWithStats,对面积进行限制,获取了能量机关扇叶区域的矩形,后来弃用此函数(太费时,且许多功能并不必要),直接对整张灰度图使用findContours,遍历轮廓使用boudingRect框选,通过矩形的面积进行筛选,得到能量机关扇叶矩形,也即得到了ROI区域。接下来,对ROI图像进行漫水填充,寻找轮廓,如果为full_blade(全亮扇叶)则会出现一个装甲区,两个长条状,通过面积、比例关系筛选,如果得到了一个装甲和一个及以上的长条状,则为full_blade,通过sign变量控制最后是否筛选half_blade(半亮扇叶)(原先的想法是先确定区域是否为full_blade,再对它进行破损修复操作,修复后仍可能检测为full_blade,均为sign = 0,最后通过sign = 1将仅检测到装甲的half_blade与无关区域相区分),半亮扇叶流动区的图形会影响之后圆心的识别(流动区部分被框进寻找圆心的ROI区域,比例面积各方面与圆心很相似),如果半亮扇叶仅装甲部分被框进ROI区域(流动区图形可能在灰度图里面和装甲附近的灯断开)则由装甲位置出发,通过几何操作及图形比例得到框住装甲及流动区的矩形,通过旋转及透视变换函数将此ROI区域变为全黑;若半亮扇叶整个地被框进矩形内,则直接使用漫水填充处理后的ROI(流动区图形会变为黑色)覆盖原图像相应区域(两种情况可以通过装甲区面积与ROI面积的比值确定,处理后流动区图形被消除)(图为ROI处理结果及消除流动区的图形)

image image

三、 圆心的获取 得到各个装甲区之后通过几何操作框出灰度图包含圆心的ROI区域,通过findContours函数,加上面积比例筛选出圆心,得到圆心坐标。(图为圆心获取ROI区域标注,由图示装甲板出发,按方向和比例得到框住圆心的boudingRect) image

四、 旋转方式的判断 在detect类的控制下,选取两帧中间间隔3帧的图像,计算角度,判断旋转方向,由于前面的圆心半径应该还比较准确,预测直接使用圆周运动,代码中将这一帧的预测标在了下一帧的图像上,可以观察到结果(图中绿点)。 image

五、 几何方面的处理 得到装甲后,由装甲出发获得圆心区域存在一个方向的问题,test1_process和test2_process为两个方向的矩形处理,整个程序中只有这两个方向(以公式的两种计算情况规定两个方向)。(图1为由装甲板出发的两个方向的矩形,图2为通过ROI区域内的nonZero像素数量筛选得到的正确方向,用蓝色标注) image image

六、 出现的问题 最开始的gamma值调节不当,造成了图形缺口,错误地将方向改为弥补图形,通过尝试发现,使用findContours的检测点结果可以比较方便地弥补图形缺口,但最终调节gamma值之后发现这一方向的努力其实没必要。这一步骤中还用到了excel编辑程序写出的txt文档,通过excel作图得到了能量机关扇叶的图形,节省了一部分的时间。弥补扇叶缺口的方法是利用findContours函数得到的点集(连接顺序确定),遍历拐点(自己定义的:四个点构成三个线段,最外沿两个线段的向量夹角大于等于90度),除去两点之间的点(vector中的erase操作),若contourArea变得最大则填充。这部分有了一些想法,但其实努力方向错了,后续思考如何优化。(图中黄色点为所规定的拐点,在这些点处出现拐弯情况)

image

七、程序运行时间,在Ubuntu中通过程序运行时间除以帧数得到每帧的处理时间,显示有位置标记的src图像用时约22ms,不显示图像用时约18ms,使用API后幂率变换耗时没有很久,处理单幅图像比处理视频图像用时稍少,配置为酷睿i5CPU,内存4GB。

八、 接下来需要做的 识别改进,识别出需要的装甲区域之后,后续处理过程都比较方便;记录能量机关点亮顺序,按照相对位置记录;各种情况的讨论处理(二中区域的填补分了多种情况还未完成,后续再看看是否有必要分类,完善代码);开始阅读学习两支强队的代码;想办法减少运行时间。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published