资源简介
基于MATLAB的一维码识别系统,对损坏的条码图像时执行光电软仿真,识别率很高。

代码片段和文件信息
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 中国矿业大学信息与电气工程学院 %
% 王灿 %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
clc;
clear all;
close all;
%启动定时器,测试软件性能
[filenamefilepath]=uigetfile(‘*.jpg‘‘打开文件‘);%gui中打开文件
filep=strcat(filepathfilename);
%filep
Image=imread(filep);
tic;
%读取图像并二值化
% Image = imread(‘0081.jpg‘);
level = graythresh(Image); %获取图像二值化的阈值
bw = im2bw(Imagelevel); %二值化处理
imshow(bw);
t = 1;
p = 1;
[m n] = size(bw);
%初步计数黑白条的书目
q = round(m/2);
for i=q
for j=1:n-1
if bw(ij)==0&&bw(ij+1)==1%颜色变化由黑色变成白色,黑条
x(t) = j;
t = t+1;
end
end
end
for i=q
for j=1:n-1
if bw(ij)==1&&bw(ij+1)==0 %颜色变化由白色变成黑色,白条
y(p) = j;
p = p+1;
end
end
end
pin = 0;
while length(x)~=30||length(y)~=30
%%等待提示信息
if pin ==0
display(‘正在扫码,请对准而条形码............‘);
end
pin = pin+1;
%条形码有损坏是逐行扫描
for pp=q:round(5*m/6)
t=1;
p=1;
if length(x)==30&&length(y)==30 %通过判断黑白条数测试当前行有无算坏
break;
end
for i=pp
for j=1:n-1
if bw(ij)==0&&bw(ij+1)==1
x(t) = j;
t = t+1;
end
end
end
for i=pp
for j=1:n-1
if bw(ij)==1&&bw(ij+1)==0
y(p) = j;
p = p+1;
end
end
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;
for i=1:6
r(i)=(d(j+1)+d(j+2)+d(j+3)+d(j+4))/7; %计算左边六个字的基准码的宽度
end
j=32;
for i=7:12
r(i)=(d(j+1)+d(j+2)+d(j+3)+d(j+4))/7; %计算右边五个字的基准码的宽度
end
n=0;%四字计数
i=1;
j1=1;
j=4;%跳过起始符,从左边第一个开始读码
flag0=0;%作为标识符,将样条交替翻译成1或者0
while j<=56
if n==4
n=0;
i=i+1;
end
if d(j)<0.5*r(i)%小于0.5舍去
return;
elseif d(j)<1.5*r(i)&&d(j)>0.5*r(i)%0.5~1.5记为1个值
if flag0==0
bs(j1)={‘0‘};%对于的被译码
else
b
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6746 2015-07-03 14:58 matlab\dimesion_code\one_dimensional_code.m
目录 0 2015-06-29 12:41 matlab\
目录 0 2015-06-29 12:41 matlab\dimesion_code\
文件 74030 2015-01-07 10:03 matlab\dimesion_code\001.jpg
文件 29880 2015-06-19 15:56 matlab\dimesion_code\002.jpg
文件 30880 2015-06-19 15:55 matlab\dimesion_code\003.jpg
文件 29266 2015-06-19 15:56 matlab\dimesion_code\004.jpg
文件 29772 2015-06-19 15:57 matlab\dimesion_code\005.jpg
文件 32289 2015-06-19 15:57 matlab\dimesion_code\006.jpg
文件 32218 2015-06-19 15:57 matlab\dimesion_code\007.jpg
文件 31456 2015-06-19 15:58 matlab\dimesion_code\008.jpg
文件 83578 2015-06-22 21:46 matlab\dimesion_code\0081.jpg
- 上一篇:计算3D结构的分形维数
- 下一篇:turbo码的仿真
相关资源
- 天线阵的波束形成在MATLAB仿真程序及
- 非线性SVM算法-matlab实现
- 《MATLAB 智能算法超级学习手册》-程序
- 组合导航matlab程序
- 读取txt文件内容matlab代码实现
- Matlab实现基于相关的模板匹配程序
- matlab优化工具箱讲解
- 基于MATLAB的快速傅里叶变换
- 光纤传输中的分布傅立叶算法matlab实
- 基于matlab的图像处理源程序
- matlab 椭圆拟合程序
- 算术编码解码matlab源代码
- optical_flow 光流法 matlab 实现程序
- 引导图像滤波器 Matlab实现
- 分形几何中一些经典图形的Matlab画法
- OFDM系统MATLAB仿真代码
- SVM工具箱(matlab中运行)
- 图像小波变换MatLab源代码
- LU分解的MATLAB实现
- 冈萨雷斯数字图像处理matlab版(第三
- 替代数据法的matlab程序
- 用matlab实现的多站定位系统性能仿真
- 通过不同方法进行粗糙集属性约简m
- k近邻算法matlab实现
- matlab识别系统
- 神经网络分类matlab程序
- matlab正弦信号发生器的设计
- matlab程序用Hopfield网络解决TSP
- 实例matlab 编程100个常用程序
- 用MATLAB(BPSK仿真 直接扩频)
评论
共有 条评论