机器视觉(硬币分割与边缘提取) 您所在的位置:网站首页 对二值图像进行标记处理是对二值图像 机器视觉(硬币分割与边缘提取)

机器视觉(硬币分割与边缘提取)

2023-12-21 09:59| 来源: 网络整理| 查看: 265

硬币分割与边缘提取

本次的图像硬币分割是在Matlab平台上采用基于阈值的图像分割法实现。总体步骤分为中值滤波去噪、图像二值化、开操作、闭操作、连通区域提取、BoundingBox提取标记六步完成。 可以看到原始图像中含有一定的噪声,因此采用中值滤波算法进行降噪处理。经过代码的调试与实验结果对比,本次采用的是6*6窗口的中值滤波算法,可以很好的看到图片去噪后的效果。首先是获取原始图片的路径,然后对原始图片进行降噪处理,降噪处理就是去除图片中多余的白点噪声,为下一步的二值化处理进行先前准备工作。 在这里插入图片描述 原始图像 在这里插入图片描述 滤波后图像

通过上步降噪过程的完成,接下来就是对图像进行二值化处理。一开始采用的是用ostu方法获取默认二值化阈值,进行二值化操作,得到的效果如下图所示: 在这里插入图片描述 二值化图像

我们可以看到图片的左上角出现大块面积的噪声区域,因此得到的效果非常不理想。所以接下看我采用了另一种通过自定义调节的阈值二值化图像方法对图像重新二值化操作。具体过程是:首先通过设定一个初始化阈值,然后构造一个与图片等大的零矩阵,对每个像素点进行加255的操作使其变为白色图片,最后通过for循环将原图各点像素与阈值对比,并在对应的矩阵中使小于阈值的像素点变为黑色。最终看待的效果比较理想。运行结果如下图所示: 在这里插入图片描述 二值化图像 在得到较好的二值化图像后,接下来在对图像进行开、闭操作。开运算相当于先腐蚀运算,再膨胀运算(效果就是上去把细微连在一起的两块目标分开)开运算的效果图如下图所示:

在这里插入图片描述 (1)开运算能够除去孤立的小点,毛刺和小桥,而总的位置和形状不便。 (2)开运算是一个基于几何运算的滤波器。 (3)结构元素大小的不同将导致滤波效果的不同。 (4)不同的结构元素的选择导致了不同的分割,即提取出不同的特征。 我们看到图像经过开运算后有些硬币区域分散的较开,因此要对图像进一步作闭运算操作,使得硬币分散区域能够较好的连载在一起。闭运算相当于先膨胀运算,再腐蚀运算(效果是将两个细微连接的图块封闭在一起) 闭运算的效果图如下图所示:

在这里插入图片描述 (1)闭运算能够填平小湖(即小孔),弥合小裂缝,而总的位置和形状不变。 (2)闭运算是通过填充图像的凹角来滤波图像的。 (3)结构元素大小的不同将导致滤波效果的不同。 (4)不同结构元素的选择导致了不同的分割。 经过上面几步的完成,接下来就是对图片连通区域的提出同时将图像用rgb颜色标记不同区域。所谓的连通区域标记是指对二值图像中白色像色而言,即值为1的像素进行标记,而黑色像素看作是背景颜色。这步主要是采用bwlabel函数实现。这个函数的作用是用来找这个二值图像中的连通区域的,对于不同的符合条件的连通区域(4连通,8连通)分别用不同的标号加以区别,结果保存在矩阵当中,而num里保存的是输入图像中连通区域的总数。运行后的结果如下图所示: 在这里插入图片描述 现在我们确定了哪些是硬币的区域,哪些是背景等等。因此,我们再进行BoundingBox提取并标记出硬币所在位置。BoundingBox是用来度量图像区域属性的函数。同时我们再用“红色矩形线框”标记连通区域并用数字记录硬币的个数。运行结果如下图所示,较好地标记出了硬币所在位置,实现了硬币从图片中分割出来的效果。 在这里插入图片描述

完整代码

代码如下:

clc; clear; close all; fprintf('=======中值滤波=====\n'); img=imread('E:\pictures\coin.jpg'); figure;imshow(img);title('原始图像'); % 使用[3,3]的窗口 img_med2 = medfilt2(img, [6,6]); figure;imshow(img_med2);title('6*6中值滤波'); subplot(2,2,1),imshow(img_med2),title('滤波后图像') [m,n] = size(img_med2); value = 129.01; %设定阈值 bw = zeros(m,n)+255; %与img_med2等大的全0矩阵,+255就是把所有像素值都设置成白色 for i = 2:m-1 for j = 2:n-1 if img_med2(i,j)


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有