我是EMGU和图像处理的新手,我在C#中有一个需要检测透明物体的项目,特别是塑料瓶内的飞蛾翼。以下是一些例子。
我尝试在EMGU中使用YCbCr,但我无法检测到它,也无法将其与背景区分开来。
另一件事是我试图把它封闭在一个受控制的环境中。 (在没有光线进入的盒子内)并使用LED背光。这是可取的吗?或者可以从环境光(荧光灯)做到吗?这会影响检测率吗?照明是否会影响这类问题呢?
这是我的项目和我使用的想法。基本上,我的项目只是使用网络摄像头(Logitech C910)从图像中检测透明对象的概念证明。这是我们国家一个老工业问题的一个例子,当装瓶厂装满塑料瓶时,它在使用前被污染了。蛾体和蛾翅膀是给我们的污染物。此外,这是为了看看网络摄像头是否足以作为此应用的工业相机的替代品。
我把它放在一个受控制的环境中,并使用LED灯作为背光(这只是使用原型板和高强度LED灯,用粘合纸散射)。物体(蛾翼)将被放置在带有水的塑料瓶内,并将被测试成两部分。第一部分是瓶子没有移动,第二部分是瓶子在传送带上移动但是在相同的受控环境中。我做了所需的所有硬件,因此不再是问题。蛾身体是可以控制的(我认为)可以检测,但是飞蛾翼让我挠头。
非常感谢任何帮助。提前谢谢!
答案 0 :(得分:0)
考虑使用尽可能多的视觉线索:
blur/focus
形状 - 您可以在干净的图像上使用active contour or findControus()
grabcut框架中的位置,强度和纹理
如果蛾和玻璃对它的反应不同,你可以尝试红外照明
答案 1 :(得分:0)
您应该尝试调整亮度/对比度和色彩平衡。
另一个想法是使用自动阈值,如Sauvola或自动本地阈值。它将为您提供有趣的结果,例如这个(我直接将图像转换为灰度):
我使用imageJ非常快速地完成了这项测试。
Click to the link to the image以查看哪个图像对应于哪种二值化算法。