在不修改数据的情况下创建非线性 MATLAB 颜色图

Posted

技术标签:

【中文标题】在不修改数据的情况下创建非线性 MATLAB 颜色图【英文标题】:Create a non-linear MATLAB colormap without modifying the data 【发布时间】:2013-02-19 00:44:47 【问题描述】:

我在创建自定义 MATLAB 颜色图和颜色条时遇到了一些问题。我想显示一个图像(例如imagesc),我想通过 Nx4 矩阵定义一个颜色图

cMap = [ x(1) r(1) g(1) b(1); ...
         x(2) r(2) g(2) b(2); ...
         ...
         x(N) r(N) g(N) b(N)]; 

使x(i)x(i+1) 之间的图像值具有r(i),g(i),b(i) 的颜色。向量x 需要增加,但不一定以线性方式增加。另外,我希望能够用GUI点击图像并查看每个像素的实际图像值,所以我不想在显示之前重新分配像素值。最后,我想要一个颜色条,其中每种颜色都由一个相等长度的段表示。

我可以通过找到diff(x) 的最小公倍数并将几个恒定颜色行连接到一个颜色图中来完成这些事情的 2/3,但是这样生成的颜色条的颜色大小与差异成正比沿着 x,它看起来很糟糕且难以阅读。

为了解决颜色条问题,我尝试在cMap 中制作几个颜色的补丁对象,将它们放在[inf inf],然后在这些对象上调用legend,但设置所有图例和轴属性要使所有尺寸的颜色图看起来都很好,这非常困难,我一直在调试这个,因为多个用户都在使用这个工具。如果可以的话,我很想使用 MATLAB colorbar。

有没有人处理过这样的问题? 谢谢!

【问题讨论】:

【参考方案1】:

您将无法让 MATLAB 颜色条以您想要的方式进行非线性拉伸和压缩。不过,您可以做的一件事是在颜色边界处设置刻度线。您可以像这样更改刻度位置:

>> imagesc(peaks);
>> h = colorbar;
>> set(h, 'YTick', [-5 -1.5 0 1 3.5 6.2]);

另一种选择是将颜色条绘制为另一个图像,这本质上就是 MATLAB 颜色条。

【讨论】:

感谢您的回复,我怀疑这是真的。对于某些范围非常非线性并且您仍想在绘图后探索数据的应用程序来说,这有点令人沮丧。【参考方案2】:

我在想,这样的事情可能会奏效......

       xi=floor(x/max(x));
       cMap = [ r(xi(1)) g(xi(1)) b(xi(1)); ...
                r(xi(2)) g(xi(2)) b(xi(2)); ...
                ...
                r(xi(N)) g(xi(N)) b(xi(N))]; 

【讨论】:

以上是关于在不修改数据的情况下创建非线性 MATLAB 颜色图的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用数据集的情况下在 Matlab 上比较不同的面部图像?

如何在不“杀死” Unity 的情况下在 Ubuntu 14.04 中安装 Matlab MCR?

在不使用渐变的情况下添加两种颜色作为背景

如何在不修改原始drawable的情况下设置vectorDrawable的色调?

如何在不使用 span 标签的情况下将颜色赋予 *

如何在不丢失选择颜色的情况下禁用多选的拖动选择?