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)を持つように。ベクトルは増加する必要がありますが、必ずしも線形である必要はありません。さらに、GUIで画像をクリックして、各ピクセルの実際の画像値を確認できるようにしたいので、表示する前にピクセル値を再割り当てしたくありません。最後に、各色が同じ長さのセグメントで表されるカラーバーが必要です。 x(i+1)r(i),g(i),b(i)x

の最小公倍数を見つけ、diff(x)いくつかの一定の色の行を1つのカラーマップに連結することで、これらの2/3を実行できますが、これによって作成されるカラーバーの色のサイズはxに沿った差に比例し、見た目は悪くて読みにくい。

カラーバーの問題を回避するために、色のパッチオブジェクトをいくつか作成しcMap、それらを配置してからこれらのオブジェクト[inf inf]を呼び出しlegendてみましたが、これをすべてのサイズのカラーマップで見栄えよくするために必要なすべての凡例と軸のプロパティを設定することは非常に重要です複数のユーザーがこのツールを使用しているため、私は常にこれをデバッグしています。可能であれば、MATLABカラーバーを使用したいと思います。

誰かがこのような問題に対処したことがありますか?ありがとう!

4

2 に答える 2

1

MATLABカラーバーを希望どおりに非線形に伸縮させることはできません。ただし、できることの1つは、色の境界に目盛りを設定することです。次のように目盛りの位置を変更できます。

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

もう1つのオプションは、カラーバーを別の画像としてプロットすることです。これは、基本的に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 に答える