12.4.3 图像识别(2)
(4)图像经过滤波处理后,图像的预处理过程结束,已经获得了比较清晰的原始图像的灰度图。下面将对图像进行图像分割处理,提取所需目标的特征。由于目标图像与背景有较大区别,可以利用灰度的梯度信息来实现图像分割。通过图像分割,将原始图像中目标药丸显示为黑色,背景区域显示为白色。在MATLAB命令窗口中输入如下代码:
- >> level=graythresh(Ft);
- >> BW=im2bw(Ft,level);
- >> imshow(BW);
程序运行,处理后的图像如图12.12所示。
(5)执行程序后,从图12.12可以看出,目标图像间存在连接状态,这不利于实现正确计数,故在图像分割时所取阈值并不合适。可以从MATLAB的Workspace中读取阈值level的值为0.4353,通过给定这个阈值来获得更好的图像分割效果。需要采取实验的方法评估level的值增加或者减小对图像的影响,通过实验取值分析,最后获得合适的阈值为level=0.3,图像效果如图12.13所示。
|
| 图12.12 图像分割处理后图像 |
|
| 图12.13 更改阈值后分割图像 |
(6)边缘检测,通过阈值分割后,下面将对图像进行边缘检测,将采用sobel算子进行边缘检测。在MATLAB命令窗口输入如下代码:
- >> BW1=edge(BW,'sobel',0.3);
- >> imshow(BW1);
程序运行后,检测后的图像如图12.14所示。
|
| 图12.14 图像边缘检测图像 |
(7)从图像边缘检测图像可以看出,药丸的形状不是标准的圆形,且在图像边缘处存在不完整的图形,需要将图像中药丸的形状进行调整,并且删去图像边缘不完整的图形。具体要通过膨胀和填充操作实现,即对图像边缘进行膨胀处理,补全药丸的缺口,然后利用填充命令进行闭合区域的填充。在MATLAB命令窗口中输入如下代码:
- >> se90=strel('line',7,90);
- >> se0=strel('line',7,0);
- >> BW2=imdilate(BW1,[se90,se0]);
- >> figure,imshow(BW2);
- >>BW3=imfill(BW2,'holes');
- >>figure,imshow(BW3);