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