2013-02-19 62 views
0

我在创建自定义MATLAB颜色图和颜色条时遇到了一些麻烦。我想显示的图像(与imagesc例如),我想通过NX4矩阵在不修改数据的情况下创建非线性MATLAB颜色图

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颜色条。

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

回答

1

您将无法获得MATLAB彩条非直线伸展,在你想要的方式来压缩。不过,你可以做的一件事就是在彩色边界上设置刻度线。您可以更改刻度位置是这样的:

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

另一种选择是绘制颜色条为另一个图像,它本质上是一个MATLAB彩条是什么呢。

+0

感谢您的回复,这是我怀疑是真实的。对于某些范围非常非线性的应用程序而言,如果您想在绘图之后仍然在探索数据,这有些令人沮丧。 – MarkV 2014-02-24 19:17:00

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))]; 
相关问题