有没有一种方法可以将RGB图像转换为特定的文本值?

时间:2019-04-09 13:07:40

标签: matlab

我正在尝试创建2D彩色条形码编码器和解码器。对于给定的输入文本,将生成彩色条形码,相反,当上载RGB图像时,会将其解码为文本。我已经完成了编码部分,但是在解码时遇到了困难。 单击“上传”按钮后,我们可以上传RGB图像。现在,需要将该图像解码为出现在文本框中的文本。 字母A,B,C和D分别代表红色,绿色,黄色和蓝色。

Image encoding

编码代码:

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 :(得分:0)

我认为您要问的是一个难题,因为黄色是红色和绿色,那么它代表A + B + C吗?另外,例如确定颜色是红色还是橙色的阈值是多少?我认为QR码是一种颜色是有原因的。但是,您可以使用间距和线宽以常规方式设计条形码,并像这样使用它。

对不起,照片第一次没有加载。
要获取RGB值。例如, img(183, 17, :) 将提取图像的第183行第17列的R,G和B分量(按此顺序)。