Ir para conteúdo
Fórum Script Brasil
  • 0

Ajuda para deteccção de códigos de barras EAN13 MATLAB


BS29

Pergunta

boas pessoal, precisava de uma ajuda para detectar códigos de barras EAN13 e não consigo, tenho o código que detecta códigos de barras dos USA(12 digitos) e não consigo fazer as alterações para funcionar com o código de barras do tipo EAN13.

código:

clear all;

close all;

I = imread('barcode1.jpg');

I2 = im2bw(I, 0.75); %convert to binary

bi = ~I2; %invert

figure(1);

imshow(bi)

bi2 = imcrop; %crop desired section of barcode to be processed

hist = sum(bi2,1); %sum the columns

rows = size(bi2,1); %image size values to be used later

columns = size(bi2,2);

for i=1:columns

if((hist(i)/rows)>=0.6) %threshold the columns

bi2(:,i)=1;

else

bi2(:,i)=0;

end

end

count = 0;

index=1;

for i=1:columns-1 %run length encoding of the image

if((bi2(1,i) ~= bi2(1,i+1)))

rle(index)=count;

count=0;

index=index+1;

else

count=count+1;

end

end

scale = max([rle(2) rle(3) rle(4)]); %pick the biggest value of '1 1 1' start code

for j=1:size(rle,2)

x=rle(j)/scale; %scale everything by the biggest '1'

if((x>0) && (x<1.5)) %choose the upc code value from these different bins

rle(j) = 1;

elseif((x>=1.5) && (x<=3))

rle(j) = 2;

elseif((x>3) && (x<=4))

rle(j) = 3;

elseif((x>4))

rle(j) = 4;

end

end

invalid = 0; %invalid flag

if(isequal([rle(2) rle(3) rle(4)],[1 1 1])==0 || isequal([rle(58) rle(59) rle(60)],[1 1 1])==0)

invalid = 1; %make sure the code stops and starts as it should

end

ri = [5 9 13 17 21 25 34 38 42 46 50 54]; %array of starting positions of 4-digit codes

zero_code = [3 2 1 1]; %the codes that correspsond to numbers

one_code = [2 2 2 1];

two_code = [2 1 2 2];

three_code = [1 4 1 1];

four_code = [1 1 3 2];

five_code = [1 2 3 1];

six_code = [1 1 1 4];

seven_code = [1 3 1 2];

eight_code = [1 2 1 3];

nine_code = [3 1 1 2];

for i=1:12 %check our encoded array and match the codes to digits

check = [rle(ri(i)) rle(ri(i)+1) rle(ri(i)+2) rle(ri(i)+3)];

if(isequal(check, zero_code)==1)

code(i)=0;

elseif(isequal(check, one_code)==1)

code(i)=1;

elseif(isequal(check, two_code)==1)

code(i)=2;

elseif(isequal(check, three_code)==1)

code(i)=3;

elseif(isequal(check, four_code)==1)

code(i)=4;

elseif(isequal(check, five_code)==1)

code(i)=5;

elseif(isequal(check, six_code)==1)

code(i)=6;

elseif(isequal(check, seven_code)==1)

code(i)=7;

elseif(isequal(check, eight_code)==1)

code(i)=8;

elseif(isequal(check, nine_code)==1)

code(i)=9;

else

code(i)=111;

invalid = 1;

end

end

figure(2) %display the result

imshow(bi2)

if(invalid==1)

text((columns/2), (rows-15), 'INVALIDO', 'FontSize', 16, 'BackgroundColor',[1 1 1], 'HorizontalAlignment', 'center')

else

str = int2str(code);

text((columns/2), (rows-15), str, 'FontSize', 12, 'BackgroundColor',[1 1 1], 'HorizontalAlignment', 'center')

end

**********************************************************+

funciona se ler a imagem com código de barras dos USA, se alguém me puder ajudar nas alterações agradecia

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,9k
×
×
  • Criar Novo...