带有z顺序的matlab中的玫瑰图

时间:2015-08-15 17:22:09

标签: matlab image-processing plot

我需要绘制图片的二维直方图。 图片在HSL系统中。 在HSl系统中,使用饱和度和亮度代替红色,绿色,蓝色。

元素范围是:

  • hue [0 360];
  • 饱和度[0 100];
  • 亮度[0 100];

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

我想要这样的事情:

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

例如,如果我们有250个像素,其色调= 90且饱和度= 50 从原点开始的90度和距离圆心50的距离按z顺序有250个值。

1 个答案:

答案 0 :(得分:2)

因为我不喜欢Matlab的极坐标绘图仪,所以我通常将它们写成笛卡尔坐标。所以说你将这些中的每一个(计数,色调,饱和度)存储为列向量:

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

更实际的例子:

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, '.')

如果你想要的话,有一种方法可以根据z值改变颜色,但这会变得有点复杂。您可以使用网格网格和轮廓,或http://www.mathworks.com/matlabcentral/fileexchange/14677此文件将绘制它。