一、简介
基于matlab啤酒瓶口缺陷检测系统,利用数字图像处理技术实现啤酒瓶口的自动检测,啤酒瓶口的光学特征进行了分析,研究了检测过程中的图像获取、图像预处理、图像分割、缺陷识别、外围设备通信控制等关键技术,实现了一个适用于实验室环境的、基于计算机视觉的小型空瓶缺陷设计。
二、部分源码
clc; clear all; close all;tic
warning off all;
f = imread('缺陷原始图像2.png');%更改这里改图片 缺陷原始图像 无缺陷瓶口原始图像
if (size(f,3) > 1)
f = rgb2gray(f);
else
f = f;
end
f = f(5:end -5,10:end - 20);
imshow(f,[ ]),title('原始图像')
f = medfilt2(f);
T =Otsu(f);
f_bw = f > T;
figure,imshow(f_bw),title('二值化后的图像')
se = strel('disk',2);
f_bw = imclose(imopen(f_bw,se),se);
%f_bw = imerode(f_bw,se);
figure,imshow(f_bw),title('腐蚀之后的图像')
[P1,P2,P3,P4] = eliminate(f_bw,50);%%
if (d < 0.08)
j0 = floor((P1 + P2) / 2);
i0 = floor((P3 + P4) / 2);
f_bw(i0,j0) = 0;
else
disp('有缺陷')
figure,imshow(f_bw),title('缺陷图像')
t = toc
return
end
%%%消除瓶底区域
for i = 1 : size(f_bw,1)
for j = 1:size(f_bw,2)
r = sqrt((i - i0)^2 + (j -j0)^2);
if (r > 56 | r < 42)%%%%%%%%%%%%%参数不好选择
f_bw(i,j) = 0;
else
f_bw(i,j) = f_bw(i,j);
end
end
end
figure,imshow(f_bw),title('消除底部')
%标记连通区域
[L,n] = bwlabel(f_bw,8);
for i = 1:n
ind = find(L == i);
S(i) = numel(ind);
end
f_bw(ind) = 0;
f1 = f_bw(1:i0,1:j0);%左上
f2 = f_bw(1:i0,j0 + 1:end);%右上
f3 = f_bw(i0 + 1:end,1:j0);%左下
f4 = f_bw(i0 + 1:end,j0 + 1:end);%右下
ind1 = find(f1 == 1);
ind2 = find(f2 == 1);
ind3 = find(f3 == 1);
ind4 = find(f4 == 1);
Num = [numel(ind1),numel(ind2),numel(ind3),numel(ind4)];
if ((Max - Min) / Max < 0.1)
disp('没有缺陷')
figure,imshow(f_bw,[ ])
else
disp('有缺陷')
figure,imshow(f_bw,[ ])
end
toc
三、运行结果
四、matlab版本
MATLAB R2019a
五、学习与交流
文中不足之处请大家多多指教,学习与交流可以联系企鹅:3752243968
文中部分源码仅供参考,若需要全部代码可以私信