0

我在创建自定义 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。

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

4

2 回答 2

1

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

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

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

于 2014-02-20T15:43:48.933 回答
0

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

       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))]; 
于 2013-02-19T05:34:08.093 回答