0
点赞
收藏
分享

微信扫一扫

【条形码识别】基于形态学实现条形码识别附matlab代码

1 简介

在信息时代的今天,随着计算机技术的发展,条形码作为一种简单、方便、廉价、高速的信息保存和传输技术,在世界各地应用广泛,是商品进入国际市场的通行证。 本论文的研究基于一种全新的购物理念,即无需排队等待收银员,只需要将选购的商品放入"自助购物系统",便可自助购物买单。目前超市中广泛使用的条形码扫描器是基于光电识别原理制作的,虽然技术成熟、简单,但需收银员人工定位条形码区域,且对条形码质量要求严格,若条形码部分发生断裂、有污渍等现象,则不能正确识读条形码所携带的信息。更不能识读应用越来越广泛的二维条形码。而采用数字图像处理的方法,可首先改善图像质量,减少或消除由噪声、光照不均、图像模糊等带来的对条形码识读的影响,自动定位出条形码区域后再对其进行译码识别。采用图像处理的方法不仅能识读一维条码,也能识读二维条码。通过图像处理技术识读条形码是必然的发展方向。 本论文提出了自助购物系统的概念,论述了EAN-13商品条形码的编码规则及技术特点,以及条形码图像识读系统的基本组成。分析了在获取条形码图像过程中存在的问题,针对图像中噪声、光照不均、模糊等问题,提出相应的数字图像处理算法和条形码图像识读方法。

2 部分代码

clc;
close all;
%启动定时器,测试软件性能
[filename,filepath]=uigetfile('*.jpg','打开文件');%gui中打开文件
filep=strcat(filepath,filename);
%filep
Image=imread(filep);
tic;
%读取图像并二值化
% Image = imread('0081.jpg');
level = graythresh(Image); %获取图像二值化的阈值
bw = im2bw(Image,level); %二值化处理
imshow(bw);
t = 1;
p = 1;
[m n] = size(bw);
%初步计数黑白条的书目
q = round(m/2);
for i=q
for j=1:n-1
if bw(i,j)==0&&bw(i,j+1)==1%颜色变化由黑色变成白色,黑条
x(t) = j;
t = t+1;
end
end
end
if length(x)~=30||length(y)~=30
display('扫码错误!');
return;
end
if i~=round(m/2)
display('该条形码已受损,但仍然可以正常扫描');
end
%计算每个条—空的宽度,利用所记录在xy数组中的坐标值,对应相减
for ii=1:30
if ii==1
d(ii)=x(ii)-y(ii); %计算第一个条的宽度
d(ii+1)=y(ii+1)-x(ii); %计算第一个空的宽度
end
if ii>1
if ii>1&&ii<30
d(2*ii) = y(ii+1)-x(ii); %分别计算第2~29个空的宽度
d(2*ii-1)=x(ii)-y(ii); %分别计算第2~29个条的宽度
elseif ii==30
d(ii*2-1)=x(ii)-y(ii); %总共有59个条-空,单独计算第三十个条的宽度
end
end
end
j = 3;
end
if d==gen(13)
coding=gan;
d=1;
end
display(['解码:',num2str(gen)]);
%测试计时结束
toc;

3 仿真结果

【条形码识别】基于形态学实现条形码识别附matlab代码_二值化

4 参考文献

[1]乔连芝. 基于图像处理方式定位识别条形码[D]. 华南理工大学, 2011.

博主简介:擅长智能优化算法、神经网络预测、信号处理、元胞自动机、图像处理、路径规划、无人机等多种领域的Matlab仿真,相关matlab代码问题可私信交流。

部分理论引用网络文献,若有侵权联系博主删除。

【条形码识别】基于形态学实现条形码识别附matlab代码_二值化_02


举报

相关推荐

0 条评论