如何从rgb图像中提取原始数据可视化与已知colormap吗?

55视图(30天)
你好,每个人,
我有一个rgb图像,它与一个已知的colormap可视化。现在我想提取原始二维矩阵数据而不是RGB值的图像映射到colormap之前。我该怎么办?
这是一个例子:
raw_data =兰德(256256);
图;
显示亮度图像(raw_data);
形象了;
colormap(飞机);
colorbar;
标题(“保存图片”);
然后我保存这个可视化图像,名称,例如“保存image.jpg”。
我该如何从“saved_img.jpg”检索“raw_data”根据已知的“喷气机”colormap吗?
谢谢你!

答案(3)

Sameer Pujari
Sameer Pujari 2022年10月27日
你好刘新
从给定的信息,我知道你想拿回RGB图像呈现在你与一个已知的colormap。
去做,你必须首先得到的colormap及rgb图像
RGB = imread (“image.jpg”);
[X,提出]= rgb2ind (RGB, 65536);
然后你可以使用原始图像
X = ind2rgb (X,提出);
同样可以通过使用“colormap”功能图
RGB = imread (“image.jpg”);
[X,地图]= rgb2ind (RGB, 65536);
图像(X)
图像
colormap (parula)%的形象将可视化parula colormap
colormap城市规划机构(cmap)%将可视化及rgb colormap形象
我希望这些信息可以帮助你!
3评论
鑫刘
鑫刘 2022年10月27日
编辑:鑫刘 2022年10月27日
嗨Sameer,
谢谢你的代码。你可能误解了我的目的。我的目的是让原来的2 d 矩阵数据 而不是原始图像。我救了这个数字作为一个jpg文件,然后我想要原始的2 d 矩阵数据 从这个根据其colormap jpg文件。
例如,在原始的某些元素 矩阵数据 是0.5,映射到一个rgb值(0.3,0.5,0.8)的保存jpg文件根据colormap“喷气机”。我的目的是获取从rgb值0.5(0.3,0.5,0.8)根据飞机colormap。

登录置评。


赛义德
赛义德 2023年5月17日21:12
嗨,刘,
你找到的解决方案吗?
4评论

登录置评。


为副总经理
为副总经理 2023年5月18日13分
移动:为副总经理 2023年5月18日23:09
记住,如果你是一个 截图 绘制数据,你只会得到一些插值表示 量化 数据。有损,污染任何刻度线和网格线,数组你回来也不一定是相同的大小和长宽比与原始数据。
一个例子
%假设了一些代码一小时前对一些其他的事情
%,我们现在正在做的是完全无关的。
z =峰(100);
冲浪(z)
colormap (jet (16))
%……但我们就删除,因为我们不需要它了
clf
%现在情节有些2 d数据与pcolor()和捕捉它!
%的原始条件
一个=兰德(100);
actualmap = parula ();
actualrange = (0.02 - 0.98);
%显示与给定的矩阵映射和范围
pcolor (A)
caxis (actualrange)
colormap (actualmap)
colorbar
%截图
%这是更好的比是典型的场景
%,因为截图为我们已经裁剪
截图= frame2im (getframe (gca));
imshow(截图,“边界”,“紧”)%显示它
%的恢复数据!
%嗯我使用什么设置?
assumedmap = parula ();%哦我叫parula ()
assumedrange = [0 1];%,它看起来像colorbar从0到1
B = flipud(截图);%根据ydir翻转图像用于情节
B = rgb2ind (B, assumedmap);%转换为量化灰度
B = interp1([0大小(assumedmap,1)], assumedrange,双(B),“线性”);%重新调节
%假设你希望这是原始大小
%,假设你知道原始大小
B = imresize (B、大小(一个),“双三次的”);
imshow (a - b + 0.5,“边界”,“紧”)%错误地图
%的范围超过数据的错误
[min (:) - b(:))马克斯((:)- b (:)))
ans = 1×2
-0.5297 - 0.9930
这些都是实际的缺陷。的宽高比显示表示纯粹是一个工件图/轴的几何、使用pcolor不是数据()意味着数据表示的顶点,而不是脸。默认情况下,pcolor()还增加了边缘线,将污染恢复数据。
如果你获得caxis colorbar限制从目视检查,你往往猜测。
同样,即使你知道哪个colormap,常见的行为也会让很多用户甚至误解自己的回忆。你也许会奇怪,为什么有一个冲浪()情节在这个例子。注意喷射的方式()和parula()调用。在第一部分中,飞机()显式地给出一个长度参数。所以在这一点上,这个数字的默认地图长度是16。在下一次调用parula(),没有长度参数,所以它是继承了图。第二个调用parula()是相同的,但因为它是colormap财产的分配一个新的图,默认地图使用长度为256。两个 相同的 调用parula ();给16色图,另一个给256 -彩色地图。你知道你吗 实际 地图长度是什么?我认为,很多人不喜欢。
长度有关系吗?当其他误差来源这个坏的,不是真的。如果两个映射的长度是交换,它可能被认为是更糟。
尤其是pcolor ()
如何使用pcolor()而不是显示亮度图像()?会改变什么吗?取决于规模。你是法官。
%的原始条件
一个=魔法(4);% 4 x4的形象
actualmap = parula (16);
actualrange = 16 [1];
%显示与给定的矩阵映射和范围
pcolor (A)%在顶点数据,不是脸!
caxis (actualrange)
colormap (actualmap)
colorbar
%裁剪截图
截图= frame2im (getframe (gca));
%嗯我使用什么设置?
assumedmap = parula (16);相同的百分比
assumedrange = 16 [1];相同的百分比
B = flipud(截图);
B = rgb2ind (B, assumedmap);
B = interp1([0大小(assumedmap,1)], assumedrange,双(B),“线性”);
%假设你希望这是原始大小
B = imresize (B、大小(一个),“双三次的”);
%比较两个并排
图像([B])
caxis (actualrange)
colormap (actualmap)
colorbar
看起来像完整的垃圾。我们可以尝试出顶点数据从颜色吗? 也许? 网格线可以抑制吗?可能是的。
我提到的规模很重要。如果我们这样做同样的事情,但一个更大的阴谋?假设我们绘制64 x64矩阵。还说我们关闭边缘着色,不污染捕获的图像。
那么大规模的特性得到保留,但小细节和确切位置丢失。
博士TL;
这里的要点是,使用截图的数据应该看起来像一个很可怜的修复问题,首先应该是可以避免的。

类别

找到更多的在Colormaps帮助中心文件交换

s manbetx 845

社区寻宝

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

开始狩猎!