github网址:HPC2H2/2023-China-National-University-Students-Opt-Sci-Tech-Competition-machine-vision-part: 2023光电赛小车题树莓派+无畸变摄像头(备用小畸变摄像头)视觉方案 (github.com)
gitee网址:
2023-China-National-University-Students-Opt-Sci-Tech-Competition-machine-vision-part: 2023光电赛小车题树莓派+无畸变摄像头(备用小畸变摄像头)视觉方案 (gitee.com)
2023-China-National-University-Students-Opt-Sci-Tech-Competition-machine-vision-part
2023光电赛小车题树莓派+无畸变摄像头(备用小畸变摄像头)视觉方案
藏宝图识别
1.在摄像头帧缓冲区读取一张图片A。
2.使用灰度转换、高斯滤波、自适应阈值分割方法,得到二值图B。
3.识别定位点 ①对于二值图B的所有轮廓,保留所有面积在[20,6000]像素范围内,轮廓角点等于4、外接矩形宽高比在0.8和1.2之间、与另一个轮廓有质心互相包含关系,且质心足够接近的封闭轮廓。对于质心互相包含关系的轮廓,保留面积较大的轮廓,这些轮廓即是可能的定位点框。
②如果①中轮廓的数目不等于4,返回步骤1。
4.透视变换
要透视变换,必须构建仿射矩阵;要构建仿射矩阵,需确保原图像点和目标图像点一一对应。设3中得到轮廓的中心点,为原图像待转换的点。根据横纵坐标的相对关系,对轮廓中心点进行左上-右上-左下-右下排序,与目标图像的四个同顺序点对应起来,得到仿射矩阵,进而对图像A做透视变换,得到图像C。
5.宝藏识别
对于图像C,转化为灰度图,并在定位点四角组成的区域内使用霍夫圆检测,当识别圆数量不为8时,返回步骤1。当识别圆数量为8时,对圆心在图像C的坐标进行放缩、平移变换,如果有一个变换后的圆心坐标范围不属于0<=x,y<=9,那么返回步骤1。
5.跳出循环,进入路径规划部分。
骨牌识别
第一版
1.建立骨牌上四种颜色(红、蓝、黄、绿)的LAB阈值范围。
2.当小车到达藏宝点,跳过5帧。
3.读入摄像机一帧照片,依次识别是否为蓝真、蓝假、红真、红假骨牌。如果识别成功,分别返回1、2、3、4,根据不同情况判断小车是否需要冲撞,并进入路径规划部分。如果识别不成功,重复执行步骤3。
判断骨牌的方法
对于一个骨牌,我们假设它是某类型骨牌(如红真),即假设其上有特定的两种颜色A、B。在有此骨牌的帧缓冲区图像I中,在图像I上寻找颜色A面积大于50像素、且宽高比在[0.3,3]范围上的色块。如果没有找到色块,那么对于骨牌的假设错误。如果骨牌上有颜色A,那么对于颜色B,经过同样的找色块并判断步骤。如果颜色A和B都找到了,如果两色块中心距离在200之内,则可以断定它是具有颜色A和B的、我们假设的骨牌。
第二版
1.建立骨牌上两种颜色(红、绿)的LAB阈值范围。
2.当小车到达藏宝点,跳过5帧。
3.读入摄像机一帧照片,判断图中是否有红色、绿色色块(色块判断逻辑见“第一版”判断骨牌方法),通过判断的结果确定骨牌类型,同样分别返回1、2、3、4。
备注
在骨牌识别第一版代码中,对于小畸变摄像头,才需要两个最大轮廓的中心距离在“200”之内。无畸变摄像头的值可兼容,或为保险起见选取25~50。
文件功能说明
dominoes_operaition.py 为骨牌处理函数,包含找最大色块、判断宝藏,以及画图(已注释掉,如果要画图还需要需要调换找最大色块函数的返回值等操作,具体详见代码注释)函数
test_jewelv1.py和test_jewelv1.py里的jewel函数分别对应骨牌识别第一版和第二版逻辑,调用dominoes_operaition.py
map_operation_v7.py 为藏宝图识别函数
threshold_chooser_v2.py 为阈值选择器