注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

highspeedlogic

FPGA/MATLAB/Simulink

 
 
 

日志

 
 

【案例15】条码检测程序  

2017-03-25 15:33:51|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

条码检测程序

条码技术是如今应用最广泛的识别和输入技术之一,由于其包含的信息量大,识别错误率低而在各个方面得到很大的重视。它发展迅速并被广泛应用于于工业、商业、图书出版、医疗卫生等各行各业。由我国目前发展现状来看,条码的正常使用受到条形码印刷质量和商品运输过程的影响,并且传统的条码识读方式是采用光电识读器,条码图像对光的不同反射效果也必然会对条码的识读产生影响。

不同的条码有着不同的识读过程。本设计研究一种基于图像处理方式的识读方法,通过计算机辨识来解决条码印刷质量不佳和条码变形等问题。该方法是采用摄像头采集条码图像,通过照相,一次性采集条码图像的方法避免了线性扫描器逐行扫描所产生的问题,同时简化了扫描条码图像的操作。然后通过一定的数字图像处理算法处理进行译码。译码算法主要分为两部分:第一部分首先对采集的条码图像进行预处理,这将为后面实现正确译码打下基础;第二部分就是对预处理后的条码图像进行译码,我们将利用统计方法、根据相似边距离来判别条码字符,再通过译码、校验、纠错处理来识读条码,得到条码所表示的文本信息。与用条码识读器硬件进行译码相比,软件译码具有更大的灵活性和较低的成本,因此具有很大的发展潜力。本设计在Matlab软件语言环境下实现。

lc;
clear;
close all;
warning off;





%% 读取图片并模拟实际情况,添加噪声并滤波
%% 读取图片并模拟实际情况,添加噪声并滤波
%% 读取图片并模拟实际情况,添加噪声并滤波
%噪声的大小
noise_level = 0.02;
%滤波参数
filter_area = 3;
figure;
%读取图片
bar_image       = imread('images\2.bmp');  %读输入条形码图片
subplot(221);imshow(bar_image);title('原始图像');
%图片转换为灰度图
if isrgb(bar_image) == 1
bar_image       = rgb2gray(bar_image);
else
bar_image       = bar_image;    
end
subplot(222);imshow(bar_image);title('原始图像的灰度图');
%添加噪声
bar_image_noise = imnoise(bar_image,'salt & pepper',noise_level);
subplot(223);imshow(bar_image_noise);title('加入噪声后的图像');
%进行中值滤波
bar_image_filter= medfilt2(bar_image_noise,[filter_area filter_area]);
subplot(224);imshow(bar_image_filter);title('滤波之后的图像');



%% 参数初始化
%% 参数初始化
%% 参数初始化
%二值化参数
level = 0.8;
%左边和右边数据编码
codes = [3211,2221,2122,1411,1132,1231,1114,1312,1213,3112;
         1123,1222,2212,1141,2311,1321,4111,2131,3121,2113];
%第一位数据编码     
first_codes = [31,20,18,17,12,6,3,10,9,5];   
%求灰度图的大小
[height,width]      = size(bar_image_filter); 
%二值化参数
bar_image_filter_10 = im2bw(bar_image_filter,level);


%% 条码检测
%% 条码检测
%% 条码检测

%检测59根条形码
l = 0;   
for i=1:height
    k = 1;
    l = l+1;
    
    for j=1:width-1
        %比较同一行相邻两点的颜色是否一致
        if bar_image_filter_10(i,j)>bar_image_filter_10(i,j+1) | bar_image_filter_10(i,j)< bar_image_filter_10(i,j+1)  
            Y_position(l,k) = j; %记录坐标
            k = k+1;        
        end
        if k>61 
            l = l-1;
            break
        end
    end
    
    if k<61
        l = l-1;
    end
end


[height,width] = size(Y_position);

if height<=1 
    disp('无效的条形码');
else
    %条形码的宽度
    bar_width = func_Tiaox_width(Y_position,height,width);
    %条形码的宽度
    [bar_sum2,Left_bar_number,Right_bar_number]=func_eachwidth(bar_width,height);

    bar_number      = '';
    bar_fist_number = 0;
    first           = 2;
    %左边编码查出条形码编码
    [bar_fist_number,bar_number] = func_leftnumber(bar_sum2,codes,bar_fist_number,Left_bar_number,bar_number,first);
    %右边编码查出条形码编码   
    bar_number = func_rightnumber(codes,bar_number,Right_bar_number);
    %从第一位数据编码表中查出第一位数字
    bar_number = func_findnumber(bar_fist_number,first_codes,bar_number);
    %校验码
    check_code = func_codecheck(bar_number);

    if check_code==str2num(bar_number(13))
       disp('条形码为:'); 
       for i=1:length(bar_number)
           final{i} = bar_number(i);  
       end 
    end
    final
end


非中介,所有课题均由本团队自己完成,承接课题不转包,可以淘宝交易,
 
技术类问题可语音或电话交流,大型课题可当面交易,确保技术实力真实可靠。
 
业内唯一一家专业代做MATLAB/FPGA方面的团队,技术专业可靠。
 
联系方式QQ    :1224848052
联系邮箱Email:1224848052@qq.com
技术网站          :http://www.hslogic.com
 
matlab硕士代做|matlab博士代做|非中介|淘宝交易|MATLAB SCI代写|MATLA期刊代写
FPGA硕士代做|FPGA博士代做|非中介|淘宝交易|FPGA SCI代写|FPGA期刊代写
Simulink硕士代做|Simulink博士代做|非中介|淘宝交易|Simulink SCI代写|Simulink期刊代写
  评论这张
 
阅读(42879)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017