生成颜色三角形

时间:2012-03-26 08:56:26

标签: matlab plot

我想生成一个背景色为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);

但我在绘图中用点绘制这样一个三角形的方法并不是很成功,并且需要很长时间才能获得有用的点数(此处> 100000)

enter image description here

好像这些点有阴影,我想在背景中没有空白区域。我希望这个情节尽可能快,因为我想在顶部绘制一条简单的曲线 - 这是情节中的实际信息。 编辑:

该图基于以下代码:

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;  

2 个答案:

答案 0 :(得分:3)

如果想要为平面中的所有点设置颜色值,为什么不对每个点计算颜色值,而是采用颜色值并计算应该出现的点?显然,你的颜色输入值都不会产生xy [ - 49, - 。49],因此[-.5, - 。5]中的红色标记在其区域中是唯一的。

此外,您正在连续绘制各个点,这当然不是很快。 (在你发布的代码的前三分之二中,你的循环内部有矩阵增长,但我猜最慢的部分是最后一部分)。尝试创建要首先显示的值的矩阵,然后显示它。

试试这段代码:

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°,并带有默认的黑色背景。

答案 1 :(得分:0)

如果有人想知道它,我在书中使用MATLAB'计算色彩科学找到了一个非常简单的解决方案。绘制RGB三角形:

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