我一直致力于图像处理和机器人技术的自我项目,而机器人像往常一样检测颜色并挑选物体,它试图检测板上的孔(类似于不同的多边形)。为了更好地理解设置,这里是一张图片:
正如您所看到的,我必须检测这些孔,找出它们的形状,然后使用机器人将物体装入孔中。我正在使用kinect深度相机来获取深度图像。图片如下所示:
我想到如何使用相机检测孔洞,最初使用遮罩来移除背景部分和一些基于深度测量的前景部分,但是这并没有成功,因为在不同的方向上相机的孔会与电路板合并......就像排列一样(它完全变成白色)。然后我遇到了adaptiveThreshold
函数
adaptiveThreshold(depth1,depth3,255,ADAPTIVE_THRESH_GAUSSIAN_C,THRESH_BINARY,7,-1.0);
使用侵蚀,扩张和高斯模糊去除噪音;它以更好的方式检测到孔,如下图所示。然后我使用了cvCanny边缘检测器来获得边缘,但到目前为止它还不如下图所示。之后我尝试了来自SIFT,SURF,ORB,GoodFeaturesToTrack的各种特征检测器,发现ORB给出了最好的时间和检测到的功能。在此之后,我尝试通过查找其关键点并匹配这些关键点来获得查询图像的相对相机姿势,以便为findHomography
函数提供良好匹配。结果如下图所示:
最后,我想获得两个图像之间的相对相机姿势,并使用从solvePnP函数获得的旋转和平移向量将机器人移动到该位置。
还有其他任何方法可以提高我们的质量 为关键点检测和匹配检测到的孔?
我也尝试过轮廓检测和近似的,但近似的形状并不是很好:
我试过调整阈值和canny函数的输入参数但是 这是我能得到的最好的
另外,我的方法是让相机姿势正确吗?
更新:无论我尝试什么,我都无法获得良好的可重复功能来映射。然后我在网上看到深度图像的分辨率很低,它只用于掩蔽和获取距离等东西。所以,由于低分辨率的图像及其杂乱的边缘,这让我觉得功能不合适。所以我想到了检测RGB图像上的特征并使用深度图像来获得这些特征的距离。我得到的功能质量完全脱离了图表。它甚至检测到了主板上的螺丝!以下是使用GoodFeaturesToTrack关键点检测检测到的关键点。。 我遇到了另一个障碍,同时距离不正确的点距离。我搜索了可能的原因,很长一段时间后,由于相机之间的偏移,RGB和深度图像中存在偏移。我可以从前两个图像中看到这一点。然后,我在网上搜索了如何补偿这种偏移,但找不到可行的解决方案。
如果你们中的任何一个人可以帮助我补偿抵消,那就太棒了!
UPDATE :我无法正常使用goodFeaturesToTrack功能。该函数给出了Point2f类型的角点。如果你想计算描述符,我们需要关键点并将Point2f转换为Keypoint,下面的代码片段会导致缩放和旋转不变性的丢失。
for( size_t i = 0; i < corners1.size(); i++ )
{
keypoints_1.push_back(KeyPoint(corners1[i], 1.f));
}
功能匹配的可怕结果显示在下面。
我现在必须开始不同的功能匹配。我会发布更多更新。如果有人能帮助消除偏移问题,那将非常有用。
答案 0 :(得分:0)
补偿图像输出和世界坐标之间的差异:
您应该使用良好的旧相机校准方法来校准相机响应并可能为相机输出生成校正矩阵(以便将它们转换为实际比例)。
一旦打印出棋盘模板并拍摄各种镜头,就不那么复杂了。 (对于此应用程序,您无需担心旋转不变性。只需使用图像阵列校准世界视图。)
您可以在此处找到更多信息:http://www.vision.caltech.edu/bouguetj/calib_doc/htmls/own_calib.html
-
既然我似乎无法对这个问题发表评论,我想问一下你的具体应用是否需要机器“快速找出”孔的形状。如果存在有限数量的孔形状,则可以在数学上对它们进行建模,并在B / W边缘图像上查找支持预定义模型的像素。
对于半径为r的圆,(x)^ 2 +(y)^ 2-r ^ 2 = 0,而x和y是像素坐标。
话虽如此,我认为需要更多关于应用要求(形状检测)的澄清。
答案 1 :(得分:0)
如果您要检测特定形状(例如您提供的图像中的形状),那么您最好使用分类器。钻研Haar分类器,或者更好的是,看看Bag of Words。
使用BoW,您需要训练一组数据集,包括正样本和负样本。阳性样本将包含您要检测的每种形状的N个唯一样本。如果N将是> 10,最好如果> 100且具有高度变异性和独特性,可用于良好的稳健分类器训练。
负样本(显然)包含不以任何方式表示形状的东西。它只是用于检查分类器的准确性。
此外,一旦您对分类器进行了培训,您就可以分发您的分类器数据(例如,假设您使用SVM)。
以下是一些链接,可以帮助您开始使用Bag of Words: https://gilscvblog.wordpress.com/2013/08/23/bag-of-words-models-for-visual-categorization/
示例代码: http://answers.opencv.org/question/43237/pyopencv_from-and-pyopencv_to-for-keypoint-class/