2015-08-15 75 views
3

我需要绘制图片的2d直方图。 图片在HSL系统中。在HS1系统中使用色度,饱和度和亮度代替红色,绿色,蓝色。用z命令在matlab中绘制玫瑰图

元素的范围是:

  • 色调[0 360];
  • 饱和度[0 100];
  • 亮度[0 100];

我将图像从RGB转换为HSL。现在我想绘制HSL颜色系统中图像的圆形直方图。

我想是这样的:

色相周围一圈从0到360基于像素的色调量,从中心饱和到周边[0 100]和具有像素的数量z顺序的特定色调和饱和度。

例如,如果我们有250个像素,它们的色调= 90,饱和度= 50,则从原点起90度的点和距圆心的距离为250的点的z值为250。

+1

你试过用玫瑰吗? – Daniel

+0

在你原来的问题中,图像没有链接,Erik以某种方式注意到隐藏的链接并修复了它。有了这些信息,我不认为'玫瑰'是正确的选择。 – Daniel

+0

我投票重新提出这个问题,现在很清楚你想要什么。 – Daniel

回答

1

由于我不太喜欢Matlab的极坐标绘图仪,我通常将它们写成笛卡尔坐标系。所以说,你是存储每一项(计数,色调,饱和度)的列向量:基于在z

hue = floor(rand(1000,1) * 361); 
saturation = floor(rand(1000,1) * 100); 
vals = [hue, saturation]; 
sorted = sortrows(vals); 
[C, ia, ic] = unique(sorted, 'rows'); 
counts = diff(ia); 
counts(end + 1) = ia(end) - length(vals) + 1; 
% Not a big fan of this method so changed to find counts 
% by pre-sorting and then using the index 
%[C, ia , ic] = unique(vals, 'rows'); 
%counts = zeros(length(C), 1); 
%for x = 1:length(C) 
% counts(x) = numel(find(vals(:,1) == C(x,1) & vals(:,2) == C(x,2))); 
%end 
x = C(:,2) .* cos(pi*C(:,1)/180); 
y = C(:,2) .* sin(pi * C(:,1)/180); 
plot3(x, y, counts, '.') 

有一种方法来改变颜色:

hue = 90; 
saturation = 50; 
count = 250; 
x = saturation * cos(pi * hue/180); 
y = saturation * cos(pi * hue/180); 
plot3(x, y, count, '.') 

对于一个更实际的例子价值,如果你想要,但会变得更复杂一点。您可以使用网格网格和轮廓或http://www.mathworks.com/matlabcentral/fileexchange/14677此文件将绘制它。