实验名称:条码缺陷检测
-
实验内容
条码中可能存在的断码、白点、黑点等影响条码外观的瑕疵,检测这些瑕疵,并用红色矩形框将其标出。 -
分析过程
需要用到图像形态学知识,先确定条码目标,再对ROI区域内进行缺陷检测。步骤如下:
① 预处理:对图形进行二值化;
② 确定ROI:图形取反,膨胀,得到最大的两个连通域目标,即为两个条码区域ROI;
③ 取条码图形:将ROI区域与原图形做逻辑与操作,得到只有原条码的图片;
④ 去噪:中值滤波,去除过小的噪声,并让过小的缺陷横向特征更明显;
⑤ 去条码:再次取反,进行开运算,先通过腐蚀操作使用长横条形状内核去除竖码条,再通过膨胀操作让缺陷部分更突出;
⑥ 确定缺陷块:将去除了竖条码区域的图像和ROI区域做与运算,得到缺陷小块集合;
⑦ 优化:不同内核的多次中值滤波,进一步滤去未消除干净的竖条码,再次膨胀突出缺陷;
⑧ 标记:使用红色矩形框对各连通域进行标记。 -
实验效果图
可以看到,大多数缺陷都已经可以检测出,但依旧有些地方检测不到,有待改进。 -
实验代码(Matlab)
Main.m
clear;
close all;
clc;
%% Binarize the input image
im = imread('images/barcode_7.png');
im_gray = rgb2gray(im);
level = graythresh(im_gray)
bw = im2bw(im_gray, level);
figure;
subplot(3, 2, 1); imshow(im_gray)