我需要绘制图片的二维直方图。 图片在HSL系统中。 在HSl系统中,使用饱和度和亮度代替红色,绿色,蓝色。
元素范围是:
我将图像从RGB转换为HSL。现在我想在HSL颜色系统中绘制图像的圆形直方图。
我想要这样的事情:
基于像素的色调量,从中心到周边的饱和度[0 100]以及按z顺序具有特定色调和饱和度的像素数量,从0到360的圆周围的色调。
例如,如果我们有250个像素,其色调= 90且饱和度= 50 从原点开始的90度和距离圆心50的距离按z顺序有250个值。
答案 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此文件将绘制它。