Я пытаюсь создать 2D кодер и декодер цветных штрих-кодов.Для заданного входного текста генерируется цветной штрих-код, и, наоборот, при загрузке изображения RGB он декодируется в текст.Я сделал часть кодирования, но нашел трудности в декодировании.Нажав кнопку «Загрузить», мы можем загрузить изображение RGB.Теперь это изображение необходимо декодировать в текст, который появляется в текстовом поле.Буквы A, B, C и D соответственно для красного, зеленого, желтого и синего цветов.
Кодировка изображения
Код для кодирования:
function encode_Callback(hObject, eventdata, handles)
inputstring=get(handles.inp,'string'); %take input
letters='ABCD'; %initialise the letters to be used
lettercolours=uint8([255,0,0; ... for A
0,255,0; ...for B
255,255,0; ... for C
0,0,255]); % for D
[found, whichrow] = ismember(inputstring, letters); %find which colour goes with each letter of the input
assert(all(found), 'Some letters in input are not valid');
letterswidth = diff(round(linspace(0, 1024, numel(inputstring)+1))); %compute width of each letter colour patch.
colouredimage = repelem(permute(lettercolours(whichrow, :), [3 1 2]), 1024, letterswidth, 1); %replicate each colour patch according to calculate width and a 1024 height.
imshow(colouredimage);
Код для декодирования:
function decode_Callback(hObject, eventdata, handles)
global img %using the global variable 'img' from the "upload" function
index=1; %initialise index of 'text' variable to 1
for i=150:200:1024
red=img(500,i,1); %extract value of 'R' at (500,i)
green=img(500,i,2); %extract value of 'G' at (500,i)
blue=img(500,i,3); %extract value of 'B' at (500,i)
if(red==255&&green==0&&blue==0)
text(index)='A'; %store the letter 'A' in array 'text'
index=index+1; %increment the index for next colour
set(handles.out,'string',text);
elseif(red==0&&green==255&&blue==0)
text(index)='B'; %store the letter 'B' in array 'text'
index=index+1; %increment the index for next colour
set(handles.out,'string',text);
elseif(red==255&&green==255&&blue==0)
text(index)='C'; %store the letter 'C' in array 'text'
index=index+1; %increment the index for next colour
set(handles.out,'string',text);
elseif(red==0&&green==0&&blue==255)
text(index)='D'; %store the letter 'D' in array 'text'
index=index+1; %increment the index for next colour
set(handles.out,'string',text);
end
end
Это то, что я пытался сделать для декодирования изображения в текст.Я получаю вывод, как ожидалось.Единственное, чего мне не хватает в моем коде, это дать автоматический интервал между цветами.В моем коде я выбрал интервал 200 пикселей.Это хорошо работает, только если есть 5 столбцов (цветов).Если нетстолбцов увеличивается, их ширина будет уменьшаться, а если нет.столбцов уменьшается, их ширина будет увеличиваться.Таким образом, идея увеличения x-координаты на 200 не будет работать каждый раз.Это единственное, что еще предстоит сделать.