当前位置:文档之家› 数字图像处理实验

数字图像处理实验

研究性实验五
一、实验说明:
一个用瓶子装各种工业化学品的装瓶公司听说你成功解决了成像问题,并雇佣你设计一种检测瓶子未装满的方法。

当瓶子在传送带上运动,并通过自动装填机和封盖机进行包装时有如下图所示的情景。

当液体平面低于瓶颈底部和瓶子肩部的中间点时,认为瓶子未装满。

瓶子的横断面上的倾斜部分及侧面定义为瓶子的肩部。

瓶子在不断移动,但公司有一个图像系统,装备了有效捕捉静止图像的前端闪光照明设备。

所以你可以得到非常清晰的图像。

基于以上你得到的资料,提出一个检测未完全装满的瓶子的解决方案。

清楚地表述你做的所有设想和很可能对你提出的解决方案产生影响的假设。

二、实验思路分析:
三、实验步骤
步骤一:读入原始图像
步骤二:将图像进行二值化处理
BW = im2bw(I,0.7);
由于原始图像中白色比较明显,瓶身的颜色和背景比较相近,所以直接进行二值化处理,将未装满液体的信息提取出来。

步骤三:将图像聚类后进行连通域的膨胀。

将图像二值化后发现图中存在噪声,选择将图像进行模糊膨胀后再二值化处理,从而去掉小连通域的干扰。

步骤四:重新二值化膨胀后的图像
步骤五:标记连通域,并统计每个连通域的面积。

经统计得到从左到右的连通域面积分别为3495 4398 11212 4398 2573,限定范围,可知11212对应的连通域所对应的瓶子是不符合要求的。

四、实验代码
功能:找出图像中灌装不合格的瓶子。

说明:(1)输入的图像必须是灰度图,否则需要将之格式转换。

(2)图像处理的步骤是:①对灰度图像glass.jpg进行二值化,②进行形态学处理,
③计算白色连通区域的面积和质心等,④通过判断质心的坐标和未装灌的面积得出是否合格。

图像处理后五个白色区域面积为:
[2374, 2739, 8381, 2739, 1660;]
五个质心的坐标数据:
[20.6251,48.0434,138.6046,46.6575,256.2667,84.9748,376.6046,46.6575,484.6181,47.9084;]
通过没有装灌部分的面积大于2900来判定装灌不合格,两个合格的值为2739,其余未照全的部分判断还可以
根据其质心判断,合格的瓶子为46.6575,坐标过大也不合格,这里取50。

源代码:
clear all;
close all;
T = 200; % 全局阈值200时效果要好一些,手动选出的值
%step1 读取和显示原始图像,显示原始图像的直方图
picOP = imread('glass.jpg'); % 读入图像
figure,imshow(picOP),title('原始灰度图像'); % 显示图像
figure, imhist(picOP), title('原始灰度图像直方图'); % 显示原始图像的直方图
% step2 转化为二值图像
picB = picOP; % 复制灰度图像到picB
picBW = im2bw(picB,T/255); % 采用全局阈值进行灰度图像转变为二值图像
figure,imshow(picBW),title('全局阈值下二值图像'); % 显示二值图像
% step3 进行形态学操作,转化为有利于处理的图像
picMORPHOLOGY = picBW ; % 复制准备形态学处理
se = strel('square',10); % 结构化元素
fo = imopen(picMORPHOLOGY,se); % 开操作
figure,imshow(fo),title('开运算之后图像'); % 输出开运算之后图像
% step4 计算出各个白色连通区域(未装灌区域)面积和质心坐标
[L,num] = bwlabel(fo,4); % 为白色连通区域做标签
stats = regionprops(L,'basic'); % 利用regionprops()函数计算面积、质心和边界等
s = [stats.Area]; % 矩阵S 中保存所有白色连通区域的面积
zx = [stats.Centroid]; % zx保存白色连通区域质心的坐标
% step5 根据面积和质心坐标计算结果判断那个装灌不合格
for indexnum = 1:num % 有实际几个连通区域就做几个循环,实际就是小于等于5个
if ( (s(indexnum) > 2900) | (zx(2* indexnum) > 50 ) ) % 如果面积大于2900或者质心大于50则为不合格
msgbox({'不合格的瓶子是',num2str(indexnum)}); % 显示第几个瓶子不合格
end
end。

相关主题