一、介绍
本文由同组孙琪对标定的金属板的小孔进行图像处理;以及学习杨师兄的误差重投影函数的学习与应用,使像素坐标对物理坐标的转换,目前只是实现这一功能,后续根据需要可以添加自己相机的环境,对代码进行修改调用。
二、背景
主要是多轴孔装配的一部分精度的评估,可以知道内参标定的误差,再者往后写论文时可以使用,如下是我们需要识别的照片:
因为在多孔装配中,难度大,装配复杂性高,需要准确识别小点和对相机的误差进行校准和估算,因此做此工作。
三、图像处理小孔的学习
此处理为同组孙琪所做,我只负责讲解与调用。首先进行基本操作,对图像进行简单的处理(基本处理+灰度处理+边缘检测+闭运算+圆形的检测+定义后面识别到圆小孔的坐标保存的位置),其中圆形检测、边缘检测等识别的参数需要自己去调。
# 图像缩小与灰度处理 width = int(src.shape[1] / 3) height = int(src.shape[0] / 3) dim = (width, height) resized = cv2.resize(src, dim) gray_image = cv2.cvtColor(resized, cv2.COLOR_BGR2GRAY) img_blur = cv2.GaussianBlur(gray_image, (5, 5), 0) # Canny 边缘检测 edges = cv2.Canny(img_blur, 100, 200) # cv2.imshow("Edges", edges) # 闭运算操作 kernel = np.ones((5, 5), np.uint8) closed_edges = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel) # cv2.imshow("Closed Edges", closed_edges) # 检测圆形 circles = cv2.HoughCircles(closed_edges, cv2.HOUGH_GRADIENT, dp=1.2, minDist=1, param1=5, param2=5, minRadius=3, maxRadius=4) # 定义保存的文件路径 output_file2 = "config/zuobiao.txt"
然后就要在图像上对圆孔的中心点进行像素坐标提取,其中,需要设定一个坐标原点和x,y方向,使得每个小孔的位置相对于坐标原点有一个相对的坐标,然后就能获取每个小孔相对我们设定的坐标原点的一个像素坐标,将我们识别的像素坐标写入我们上面定义的config文件里,以方便后续转换成物理坐标的调用。下面是部分代码,主要是实现识别板子的四个角点以及将计算的坐标保存的代码(排序什么的代码就不展示了,只展示关键处理的代码):
min_x_y_corner = min(corners, key=lambda p: (p[0] + p