pr3
.docxМинистерство цифрового развития, связи и массовых коммуникаций
Российской Федерации
Федеральное государственное бюджетное образовательное
учреждение высшего образования
«Санкт-Петербургский государственный университет телекоммуникаций
им. проф. М. А. Бонч-Бруевича»
_____________________________________________________________________________
Кафедра РАДИОТЕХНИКИ
Дисциплина «Технологии распознавания изображений и компьютерное зрение»
Практическая работа №3
«Сканирование шрих-кода»
Выполнили: студенты группы РТ-22,
бригада № 6
Спица М.А.
Стулин П.А.
Сараева Л.В.
Швецов Ф.П.
Проверил: к.т.н. доцент каф. РТ,
Коровин К.О.
________________________
Санкт-Петербург
2026
Задание 1: Считывание штрих-кода
European Article Number, EAN (европейский номер товара), в дальнейшем после распространения известный также как международный артикул (International Article Number) — европейский стандарт штрихкода, предназначенный для кодирования идентификатора товара и производителя. Является надмножеством американского стандарта UPC.
EAN-13 — кодируется 13 цифр (12 значащих + 1 контрольная сумма).
Первая цифра определяется первой (левой) группой, кодирование приведено на рисунке:
Графические
различия L-кода, R-кода и G-кода состоят
в следующем. Для каждой цифры это одна
и та же комбинация чёрно-белых штрихов,
L-код отличается от R-кода лишь фотографически
негативным исполнением, а G-код отличается
от R-кода реверсивным (зеркальным)
исполнением. Кодирование цифр приведено
в таблице
Исходные данные:
Рис.1 Штрихкод EAN-13 данный для сканирования
Результат работы скрипта:
Группа: 1 Левая часть: 8 3 9 5 6 8 Правая часть часть: 3 5 9 1 5 7
Рис.2 Перевернутый штрихкод EAN-13 данный для сканирования
Результат работы скрипта:
Группа: 1 Левая часть: 8 3 9 5 6 8 Правая часть часть: 3 5 9 1 5 7
Рис.3 Альтернативный штрихкод EAN-13 данный для сканирования
Результат работы скрипта:
Группа: 3 Левая часть: 5 6 4 8 7 3 Правая часть часть: 1 1 6 7 5 8
Листинг кода MATLAB:
clc
clear all
close all
%%% Задание 1: считывание штрих кода и раскодирование
a=imread('barcode.jpg');
a=rgb2gray(a);
r=size(a,1)/2;
g=0;
for i=1:size(a,2)
if a(r,i)<=5
g=g+1;
end
if (g>0)&(a(r,i)>0)
break
end
end
for u=1:size(a,2)
if a(r,u)<=5
b=u;
break
end
end
for u=1:size(a,2)
if a(r,u)<=5
d=u;
end
end
c=0;
for ii=(b+3*g):g:((d-3*g))
if a(r,ii)<=5
c=c+1;
m(c)=1;
else
c=c+1;
m(c)=0;
end
end
n=6;
v=n*7;
m1=reshape(m(1:v),7,n);
m2=reshape(m(v+6:end),7,n);
hh=0;
herr=0;
while hh<2
for k=1:size(m1,2)
num1=strjoin(arrayfun(@num2str,m1(:,k), 'UniformOutput', false), '');
switch (num1)
case '0001101'
f=0; h='L';
case '0011001'
f=1; h='L';
case '0010011'
f=2; h='L';
case '0111101'
f=3; h='L';
case '0100011'
f=4; h='L';
case '0110001'
f=5; h='L';
case '0101111'
f=6; h='L';
case '0111011'
f=7; h='L';
case '0110111'
f=8; h='L';
case '0001011'
f=9; h='L';
case '0100111'
f=0; h='G';
case '0110011'
f=1; h='G';
case '0011011'
f=2; h='G';
case '0100001'
f=3; h='G';
case '0011101'
f=4; h='G';
case '0111001'
f=5; h='G';
case '0000101'
f=6; h='G';
case '0010001'
f=7; h='G';
case '0001001'
f=8; h='G';
case '0010111'
f=9; h='G';
end
fitog1(k)=f;
type(k)=h;
end
switch (type)
case 'LLLLLL'
c=0; hh=0;
case 'LLGLGG'
c=1; hh=0;
case 'LLGGLG'
c=2; hh=0;
case 'LLGGGL'
c=3; hh=0;
case 'LGLLGG'
c=4; hh=0;
case 'LGGLLG'
c=5; hh=0;
case 'LGGGLL'
c=6; hh=0;
case 'LGLGLG'
c=7; hh=0;
case 'LGLGGL'
c=8; hh=0;
case 'LGGLGL'
c=9; hh=0;
otherwise
hh=1;
end
for kk=1:size(m2,2)
num2=strjoin(arrayfun(@num2str,m2(:,kk), 'UniformOutput', false), '');
switch (num2)
case '1110010'
f=0;
case '1100110'
f=1;
case '1101100'
f=2;
case '1000010'
f=3;
case '1011100'
f=4;
case '1001110'
f=5;
case '1010000'
f=6;
case '1000100'
f=7;
case '1001000'
f=8;
case '1110100'
f=9;
end
fitog2(kk)=f;
end
if hh==1
mb=fliplr(m);
m1=reshape(mb(1:v),7,n);
m2=reshape(mb(v+6:end),7,n);
herr=herr+1
else
break
end
if herr>1
disp('переворот не сработал')
break
end
end
disp('Группа: ')
disp(c)
disp('Левая часть: ')
disp(fitog1)
disp('Правая часть часть: ')
disp(fitog2)
%%% Графики
figure(10),
imshow(a); title('Штрих-код')
