Jaya Shankar MathWorks
获取一幅图像,进行图像分析,寻找小物体,计数,并根据颜色区分它们。
你好,欢迎。在这个视频中,我们将使用图像采集工具箱™来捕获图像到MATLAB中®。然后我们将使用image Processing Toolbox™进行图像分析和其他操作。例如,我设置了相机来捕捉不同颜色的糖果。我们将确定图像中糖果的总数,并计算某一种颜色的糖果的数量。
在本例中,我将对获取的图像执行各种图像处理算法,如阈值化、形态学操作和颜色分割。第一步是将我的相机连接到MATLAB。为了查看MATLAB是否识别出我的相机可用,我使用imaqhwinfo命令获得计算机上可用的硬件适配器和特定设备的列表。我现在连接的摄像头可以通过winvideo适配器访问。因此我使用imaqhwinfo命令获取它的设备ID。
有了这些信息,我可以使用video input命令创建一个图像采集对象的实例,该对象可以从我的相机获取视频。使用这个视频输入对象,我可以为我捕获的视频打开一个预览窗口。然后,我使用getsnapshot命令从我获得的视频中捕获一个图像帧。我可以在MATLAB中使用imshow命令显示这个图像帧。让我把这个图像框停靠在这里。
让我们先用阈值法识别图像中的所有物体。因此,我分离图像的R、G和B分量,并使用graythresh命令分别为它们计算一个阈值。然后,我使用im2bw命令分别对这些组件设置阈值,然后将它们组合在一起,得到一个具有明确标识对象的二进制图像。
为了移除图像中的任何伪影,我使用形态操作,如imfill来移除所有洞,imclearborder来移除边界上的任何外来物体。现在很容易清楚地计算出图像中物体的数量。我使用bwlabel命令来唯一标记每个对象,并计算图像中对象的总数。
为了稳健地选择特定颜色的糖果,我们需要考虑到由不均匀的光照条件和相机噪声等问题引起的物体颜色值的变化。所以我需要构建一个图像,用每个糖果的中间颜色替换实际的RGB值。
为了做到这一点,我使用逻辑索引来获得我想要的像素,然后计算它们的中值。例如,我可以在逻辑上索引图像标签矩阵,并只提取标签为1的像素。让我举个例子。
然后我就可以计算出属于这个分割区域的提取像素的中值。因此,在这个for循环中,我已经计算出了每个标签的三个颜色平面的中值。在循环的最后,我重新组合颜色组件,以知道每个糖果的中等颜色值。
使用图像处理工具箱中的impixelinfo命令,我可以看到我刚刚为每个糖果计算的R、G和B值的中值。我现在想要选择所需的颜色,并计算特定颜色的糖果数量。因为我已经有了每个标记区域的中值颜色,所以我需要简单地找到具有接近所选颜色的中值颜色的区域。
对于基于颜色的选择,最好使用实验室颜色空间,因为它将发光信息从颜色信息中分离出来。该空间中的颜色值之间的欧氏距离比RGB颜色空间中的颜色相似度更有效。所以我使用了makecform和applycform注释将我的图像和所选颜色从RGB转换为实验室空间。
这样,我就可以保留A和B成分,因为我不需要任何发光信息。为了找到具有相同颜色的区域,我首先对A和B分量使用hypot命令计算颜色值之间的欧几里得距离。然后我使用一个适当的阈值来选择那些靠近所选颜色的区域。然后,我可以使用bwlabel命令获取所选区域的帐户。
因此,这个演示演示了如何结合图像处理工具箱和图像采集工具箱来执行图像分析操作。将这个示例进一步,您可以添加一个带有指南的GUI,甚至可以使用MATLAB Compiler™构建一个独立的可执行文件。欲了解更多图像获取和处理演示,请访问我们网站上的产品页面。谢谢你!
您也可以从以下列表中选择一个网站:
选择中国网站(中文或英文)以获得最佳的网站性能。其他MathWorks国家网站没有针对您所在位置的访问进行优化。