我可以在一个图像RGB像素值转换成字母吗?

12个视图(30天)
我已经分类图像使用 imsegkmeans 5类和在RGB显示它。我想将这5种颜色转换成字母,如“W”、“A”、“B”等来表示landcover分类和显示它们作为文本图像像老时间landcover分类地图用来做。矩阵的样子:
AAAAWBBB
AAAWBBBB
AAWBBBBB
字母填满每个像素值在生成的“图像”
谢谢
2的评论
杰森·布朗
杰森·布朗 2022年3月24日
该方法产生MxNx3 uint8图像显示为5和5种颜色RGB图像类

登录置评。

接受的答案

沃斯
沃斯 2022年3月24日
编辑:沃斯 2022年3月24日
我不确定这是你要的,但如果不是,也可能包含一些有用的东西。它只是以字母标记每个像素根据像素的颜色。
%’类的名字:
类=“WRGBO”;
%对应的颜色:
颜色= uint8 ([
255 255 255;白色(W)
255 0 0;红色(右)
255年0 0;绿色(G)
0 0 255;蓝色(B)
255 128 0;橙色(O)
]);
%创建一个随机MxNx3 uint8 RGB图像组成的只有5种颜色:
M = 10;
N = 7;
我=重塑(排列(颜色(randi (5 M * N 1):), [1 3 2]), [M N 3]);
imshow (im);
%现在,考虑到图像,发现该指数在“颜色”的颜色
%像素(1 - >白色,2 - >红色,3 - >绿色,4 - >蓝色,5 - >橙色):
[~,idx] = ismember(重塑(im, [M * N 3]),颜色,“行”);
idx =重塑(idx, M, N)
idx = 10×7
2 4 5 1 1 2 3 4 5 1 2 4 3 2 4 4 4 1 3 1 1 5 4 3 2 2 5 2 3 5 4 3 3 3 2 2 2 3 3 1 2 2 3 1 5 3 1 2 3 5 5 5 1 2 4 2 1 3 4 5 1 2 4 1 1 4 2 4
%和指数“类”的指数矩阵:
pixel_classes =类(idx)
pixel_classes =10×7字符数组
‘RBOOWWG’‘RBWRBGR’‘BBBWGWW’‘BGROROR’‘GOBGGGR’‘RRGWGWR’‘RWOGWRG’‘OGOOWRR’‘WGBBORW’‘RBWWBRB’
%最后创建一个文本集中在每个像素,像素标签:
(X, Y) = meshgrid (1: N, 1: M);
arrayfun (@ (x, y)文本(x, y, pixel_classes (y, x)
“HorizontalAlignment”,“中心”,“VerticalAlignment”,“中间”),X, Y);

答案(1)

为副总经理
为副总经理 2022年3月24日
编辑:为副总经理 2022年3月25日
我不确定这就是你,但你可以用不同的方法生成图像的文本。记住,麦根输入,输出将至少M * glyphheight x N * glyphwidth。这意味着输出可能会相当大。这也意味着,人物的比例会影响图像中物体的长宽比。
计算机视觉的工具箱insertText(),可以将文本插入一个光栅图像。你必须找到一个方法处理对齐和放置。人物一般是大型和方阵。
有许多text-to-image工具文件交换。 MIMT textim () ,这是建立在使用遗留点阵字体和一些强调创造紧凑的图像文本。Textim()可以创建文本的小于insertText ()。
假设我们有一个5 x5图像是用一个已知colormap:
inpict = imread (“mappict.png”);% RGB图像
提出= hsv (6);%用于创建地图上面的图像
inpict = rgb2ind (inpict提出)+ 1;
类= {“一个”,“B”,“C”,' D ',“E”};
intext =重塑([类{inpict。'}), fliplr(大小(inpict)))。
%建立的文本
问=大小(intext, 1);
outpict ={问1};
n = 1:问
% outpict {n} = textim (intext (n:),“micronum”);% 5 x4字体
% outpict {n} = textim (intext (n:),”惠普- 100 x - 8×8 ');% 8×8字体
outpict {n} = textim (intext (n,:)“美国慧智公司- 700 b”);% 32 x16字体
结束
%将它们合并为一个数组
outpict = imstacker (outpict,“重力”,' w ',“填充”0,“暗”1);
% wyse - 700 b是一个两层高的字体,所以它可以新广场
%不做任何字体不是两层高的!
outpict = imresize (outpict,大小(outpict, - 1) / 2大小(outpict, 2)),“最近的”);
%添加一些填充边缘
outpict = addborder (outpict 5);
imshow (outpict)
较小的图像使用的hp - 100 x - 8×8的字体在本地解决
大图使用美国慧智公司- 700 b的字体一半原生垂直分辨率。
你提到的输出应该是RGB。如果有一些彩色化,你必须描述应该是什么。,是一个单通道图像的输出。你总是能做一些事:
inpict = imread (“mappict.png”);% RGB图像
提出= hsv (6);%用于创建地图上面的图像
indpict = rgb2ind (inpict提出)+ 1;
类= {“一个”,“B”,“C”,' D ',“E”};
intext =重塑([类{indpict。'}), fliplr(大小(indpict)))。
%建立的文本
问=大小(intext, 1);
outpict ={问1};
n = 1:问
% outpict {n} = textim (intext (n:),”惠普- 100 x - 8×8 ');% 8×8字体
outpict {n} = textim (intext (n,:)“美国慧智公司- 700 b”);% 32 x16字体
结束
%将它们合并为一个数组
outpict = imstacker (outpict,“重力”,' w ',“填充”0,“暗”1);
% wyse - 700 b是一个两层高的字体,所以它可以新广场
%不做任何字体不是两层高的!
outpict = imresize (outpict,大小(outpict, - 1) / 2大小(outpict, 2)),“最近的”);
%颜色应用到输出图像
colorpict = repelem (1) inpict 16 16日;%使用当前字符大小
outpict = im2double (colorpict)。* outpict;
%添加一些填充边缘
outpict = addborder (outpict 5);
imshow (outpict)
或者你可以反转前的图像组成:

类别

找到更多的在图像类型转换帮助中心文件交换

s manbetx 845


释放

R2020b

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!