以下是从实验中获得的一些图像,这些图像显示了球体在液体中移动引起的气泡。
现在我想用Matlab从每个图像中获取气泡区域。我首先想到的是边缘检测。所以我尝试使用以下代码:
A = imread('D:\1.jpg');
BW1 = edge(A,'sobel');
figure, imshow(BW1)
获得手动裁剪的图像的腔边缘,如图所示,结果(如下)不满足要求。另外,我仍然不知道如何获得泡沫区域。
那么,有人可以告诉我该怎么办?
我认为你应该使用背景减法并尝试简单的分割。您可以使用regionprops来获取气泡区域:
https://www.mathworks.com/help/images/ref/regionprops.html
我觉得它应该工作得很好。如果您很难获得干净的分割,您可以通过选择尽可能暗的背景并使用一些横向照明来利用光的扩散来改善实验设置以增加气泡相对于背景的对比度。泡泡。
最后,应该在感兴趣的区域(ROI)中执行分割,因为您知道气泡被限制在槽内
至于获得精确的腔边缘的问题,计算机视觉系统工具箱具有vision.ForegroundDetector对象,它实现了Stauffer和Grimson的GMM背景减法的变体。实施速度非常快,利用多个核心。看看这个how to use background subtraction的例子。
至于找到泡沫区域的问题,请使用bwarea命令。 https://www.mathworks.com/help/images/ref/bwarea.html,它将总结图像中的所有白色像素。
我相信背景扣除是计算这个泡沫区域的最有效方法。请注意,之后您可能需要使用打开和关闭技术来过滤其他区域,请参阅(imopen imclose):https://uk.mathworks.com/help/images/ref/imopen.html,之后,您可以应用bwarea来计算面积。您还可以使用impixelinfo命令来比较气泡和其他区域的强度级别,从而比较阈值图像以提取气泡。仅当您对所有图像具有相同的阈值级别时,它才有效。此外,可以将所有这些完全依赖于您的图像的技术结合起来,以获得更好的效果。
其他基于形状的技术也可用于提取气泡区域。