在Matlab R2014b中引入了colormap Parula,在将RGB colormap转换为另一个RGB colormap时,可以使用rgb2hsv、rgb2ind、rgb2lab和rgb2xyz等函数。
但是,我找不到任何解决方案来将RGB colormap转换为Parula,即当前默认的Matlab colormap。
我可以将colormap设置为与图形一起使用,但不能如下转换图像。
我开始思考Parula相对于HSV的好处,它可以在一个部分去除图片中的黑色及其相邻颜色,例如here。
伪命令
im = imread('http://i.stack.imgur.com/cFOSp.png');
hsv = rgb2parula(im); % Pseudocommand similar for HSV: hsv = rgb2hsv(im);
imshow(hsv);
它给予
这是造成图像处理后期量化噪声和形态学去除不良的原因之一,如前一个线程所示。
如何在Matlab中将RGB映射到Parula?
自制小瓶
我想我们需要一个定制的Parula,因为rgb2parula函数不可用。
建议hereGnuplot关于colormap的一个变体。
你怎么能把这段代码转换成Matlab呢?
最佳答案
这实际上是不可能的,因为Parula
不包含所有可能的RGB值如果你仔细想想,每个MatlabColorMap只是RGB集合的一个子集用数学术语来说,rgb2hsv
是一个同构,但是RGB和colormap之间不可能存在这样的同构(甚至hsv
colormap也不可能包含所有可能的HSV值)。
然后,对于给定的RGB三元组,可以尝试在Parula colormap中找到最近的RGB三元组类似于:
cm = parula(256);
RGB = rand(1,3);
d2 = (cm(:,1)-RGB(1)).^2 + (cm(:,2)-RGB(2)).^2 + (cm(:,3)-RGB(3)).^2;
[~, mi] = min(d2);
根据这个度量,
cm(mi,:)
将是最接近Parula中RGB的颜色但当然,这是一个不完美的解决方案。