1

你好 Stackoverflowers,

我目前的任务包括找出金属坯料(原木)是否由一两部分制成。我的第一次尝试是寻找一条黑色垂直线,表示两个原木之间的分隔。如果我找不到分离,我会断定它是一体的。

在此处输入图像描述

这个程序完美无瑕,直到......深色方坯出现...... 在此处输入图像描述

所以我决定使用另一个我知道永远正确的参数,深度。坯料和间隙之间总是会有不同的深度。

所以我致力于尝试将两个相机平行安装,有没有人有任何指示如何正确设置它?

或者有人知道另一种方法来完成我的任务吗?

提前致谢!

4

1 回答 1

0

最适合 IMO:使用便宜的激光线(在工具/五金店大约 20 美元),并在图像中搜索激光。它的线条贯穿整个坯料,它是一体的。如果生产线出现断线或严重变形,则有 2 个钢坯。

我的想法:

glm::vec3 laserColor(1,0,0); //red
glm::vec3 currentColor;
float maximum_color_distance = 0.1;
for(int a = 0; a < image.rows;a++)
{
     for(int b = 0; b < image.rows;b++)
     { 
        currentColor = image.at(a,b);
        float current_distance = glm::distance(laserColor, currentColor);
        if(current_distance > maximum_color_distance)
        {
           image.at(a,b) = 0;
        }
     }
}

glm::vec2 leftPixel = getMostLeftLaserPixel(image);
glm::vec2 rightPixel = getMostRightLaserPixel(image);

 Line line = calculateLine (leftPixel,rightPixel);

line.hasHoles(image, laserColor); //checks for 3x3 pxiel blocks which are on the line, returns false if all pixels in a 3x3 block have an other color then the laser. 3x3 to take small erros to serious

如果钢坯足够远,也许你可以在正确的距离使用 kinect。立体图像在极线上使用大多数时间块匹配。这意味着取 3x3 像素,从左到右,并尝试找到看起来相似的 3x3 像素。这可能是使用金属的问题。首先你有重复的模式。其次,您有反射,这在每个相机上都会有所不同,因为它们的视角略有不同。

kinect 的金属反射率也可能存在相同的问题,但不会出现重复图案:

“这取决于制造物体所使用的材料。如果物体是由金属、玻璃或发亮的,深度相机将难以准确捕捉图像。”

OpenCV 提供了 rectifyStereoIamge(或类似的东西)功能,当您使用 2 个摄像头时,它会很有帮助。

于 2014-11-19T02:00:04.283 回答