Image Matlab,图像函数的求逆

Image Matlab,图像函数的求逆,image,matlab,Image,Matlab,我有一个关于.png图像的系列,它是由Matlab在mxn矩阵的系列上运行“image”创建的。在此过程中,它应用了默认的颜色映射(jet)。 我现在需要从图像中获取数据(数据本身丢失)。据我所知,image函数获取我的mxn矩阵和一个colormap,并使用它生成一个mxnx3张量(RGB值)。有没有可能(除了像查找表一样搜索颜色映射之外),从图像中获取Matlab,并基于用于生成颜色映射的颜色映射重建数据 这当然可以做到,因为从原始数据到RGB值的映射是基于colormap的线性映射,但我只

我有一个关于.png图像的系列,它是由Matlab在mxn矩阵的系列上运行“image”创建的。在此过程中,它应用了默认的颜色映射(jet)。 我现在需要从图像中获取数据(数据本身丢失)。据我所知,image函数获取我的mxn矩阵和一个colormap,并使用它生成一个mxnx3张量(RGB值)。有没有可能(除了像查找表一样搜索颜色映射之外),从图像中获取Matlab,并基于用于生成颜色映射的颜色映射重建数据

这当然可以做到,因为从原始数据到RGB值的映射是基于colormap的线性映射,但我只能考虑将colormap用作查找表。是否有一种反转图像功能


谢谢。

使用
ismember
的第二个输出和一些
重塑
,您可以非常轻松地进行查找:

[~,x] = ismember(reshape(Img,[],3), jet, 'rows');
reshape(x, size(Img(:,:,1)))

从任意
m
-by-
n
矩阵到“图像”的转换过程中,数据丢失:
Matlab将数据移动到[0..255]范围,并将其量化到256个离散级别。
即使您愿意忽略量化误差,为了将映射的彩色图像转换为原始矩阵,仍然需要恢复未知的偏移和比例因子

您可以使用将图像转换为量化的[0..255]值:

 [x map] = rgb2ind( img, 256 ); 

但是您无法将
x
转换为原始数据,因为您不知道正确的比例和移位。

我不知道有哪种工具可以准确地执行您的操作。有些数据确实丢失了,Png每像素最多有48位(实际上,由于受彩色贴图的限制,数据量要少得多),而Matlab使用的double有64位。但在我看来,如果你使用默认的
jet
colormap,那么你就只有64级了


实际上,我认为你可以得到有用的结果。Jet应该是HSV彩色地图。因此,
rgb2hsv
可能会给您一个可映射的色调值。使用插值函数,应该可以进行反向计算。但这基本上是一个查找

您能说明这256个离散级别的定义位置吗?阅读文档时,我认为默认值应该是64级。如果您可能是正确的,我想您也可以使用
rgb2ind(img,jet)
@bdecaf。我没有完全调查这个案例,我假设Matlab从索引图像中使用8位/像素,但我可能在这里错了。@Dan这主意不错。对于本例,更具体的解决方案可能会产生更稳健的结果。图像确实有一个颜色条,因此缩放不会有问题。数据都是正的,最小值为零(我能记得这么多),所以偏移也不应该是个问题。不过,我知道任何重建的数据都会被量化。