Есть ли способ конвертировать изображения RGB в конкретные значения текста? - PullRequest
0 голосов
/ 09 апреля 2019

Я пытаюсь создать 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);

Image Decoding

Код для декодирования:

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 не будет работать каждый раз.Это единственное, что еще предстоит сделать.

1 Ответ

0 голосов
/ 09 апреля 2019

Я думаю, что вы задаете сложный вопрос, поскольку желтый - это красный, а зеленый - это А + В + С?Также какой порог при принятии решения, если цвет, например, красный или оранжевый?Я думаю, что есть причина, почему QR-коды, например, 1 цвет.Однако вы можете создать штрих-код обычным способом, используя интервалы и толщину линий, и использовать его следующим образом.

Извините, фотография не загружалась в первый раз.Чтобы получить значения RGB.Например, img(183, 17, :) извлечет компоненты R, G и B (в указанном порядке) строки 183 столбца 17 изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...