2012-03-26 2 views
1

背景がRGBの色で塗りつぶされた三角形を生成したい。これは、色の値を表示するために使用されます。カラートライアングルを生成

私は

function [x,y] = RGBtoCartCoordXY(R, G, B) 
RGB = R + G + B; 
r = R/RGB; g = G/RGB; b = B/RGB; 
XYr = [-0.5; -0.5]; XYb = [+0.5; -0.5]; XYg = [+0.0; +0.5]; 
xy = (r * XYr + b * XYb + g * XYg)/(r + g + b); 
x = xy(1); y = xy(2); 

、このような三角形の位置をcalcualeする方法を見つけることができますが、プロットの点で、このような三角形を描くために、私のアプローチは非常に成功しなかった、それはの便利な数のために非常に長い時間がかかりますポイント(ここでは> 100000)

enter image description here

ポイントが影を持っていると私は、背景には空白を希望しないかのように思われます。私が上に簡単な曲線をプロットしたいので、このプロットをできるだけ速くしたいと思っています。プロットの実際の情報です。 EDIT:

プロットは、このコードに基づいています。

for r = linspace(0,1,points) 
    for g = linspace(0,1,points) 
     for b = linspace(0,1,points) 
      index = index + 1;    
      RBGtriple(index, :) = [r g b]; 
     end 
    end 
end 

for k = 1:size(RBGtriple,1) 
    R = RBGtriple(k,1); 
    G = RBGtriple(k,2); 
    B = RBGtriple(k,3); 
    [x y] = RGBtoCartCoordXY(R,G,B); 
    xaxis(k) = x; 
    data(k) = y; 
end 

hold on; 
for k = 1:size(RBGtriple,1) 
    hplot = plot (xaxis(k), data(k)); 
    set(hplot, ... 
     'Marker', 'square', ... 
     'LineStyle','none' , ... 
     'MarkerSize' ,3 , ... 
     'LineWidth' , 0.1, ... 
     'MarkerEdgeColor',RBGtriple(k, :) , ... 
     'MarkerFaceColor',RBGtriple(k, :)); 
end 
hold off; 
+1

プロット?あなたのR、G、B入力値は? –

+0

強化された質問に示されているように、rgb値は0と1の間で等しく分布し、プロットは 'plot'で行われます。 –

答えて

3

あなたが平面内のすべてのポイントの色値を持つようにしたい場合は、なぜあなたは各ポイントを取るAN色の値を計算していません、代わりに色の値をとり、表示されるべき点を計算しますか?どうやら、あなたのカラー入力値のどれもxy [ - 49、 - 。49]を生成しないので、[-.5、 - 。5]の赤いマーカーはその領域だけにあります。

また、個々の点を連続してプロットしていますが、もちろん高速ではありません。 (投稿したコードの最初の2/3にループ内で行列が成長していますが、もっとも遅い部分が最終セクションです)。最初に表示する値の行列を作成して表示してみてください。

は、このコードを試してください。私にとって

imgsize = 500; 
for i=1:length(xaxis), 
    m(1+floor((xaxis+0.5)*imgsize),1+floor((data+0.5)*imgsize),:)=RGBtriple(i,:); 
end 
image(m); 

を、この(またはあなたから適応同様のコード)が類似した色分布を有する三角形を生成するが、90°回転し、デフォルト黒い背景を有します。

+0

+1を逆にサンプリングする+1 –

+0

これは50x50ピクセルの青い正方形しか表示しません。 mは値0または1のみを含み、RGBtripleは色の値を含む。 –

+0

私は読者のための練習として非常に小さなエラーを残しました;-) –

0

それについて疑問に誰があれば、私はRGBの三角形をプロットするために「MATLAB使って計算色彩科学」を本の中で信じられないほど簡単な解決策を見つけた:

あなたが使用しない機能
xy=[0 0; 1 0; 0.5 sqrt(3)/2]; 
col=[1 0 0; 0 1 0; 0 0 1]; 
patch('Vertices',xy, 'Faces',[1:size(xy,1)], 'EdgeColor','none','FaceVertexCData', col,'FaceColor','interp'); 
axis off 
text(xy(1,1), xy(1,2)-0.05,'Vertice 1','HorizontalAlignment', 'center') 
text(xy(2,1), xy(2,2)-0.05,'Vertice 2','HorizontalAlignment', 'center') 
text(xy(3,1), xy(3,2)+0.05,'Vertice 3','HorizontalAlignment', 'center') 

RGB color triangle matlab

関連する問題