matlab - 在 matlab 中以 z 顺序绘制玫瑰图

标签 matlab image-processing plot

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

元素的范围是:

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

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

我想要这样的东西:

根据像素的色调数量、从中心到周边 [0 100] 的饱和度以及在 z 顺序中具有特定色调和饱和度的像素数量,围绕圆从 0 到 360 进行色调调整。

例如,如果我们有 250 个像素,它们的色调 = 90,饱和度 = 50 距原点 90 度且距圆心 50 度的点在 z 顺序中的值为 250。

最佳答案

因为我不太喜欢 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该文件将绘制它。

关于matlab - 在 matlab 中以 z 顺序绘制玫瑰图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32027284/

相关文章:

opencv - 如何使用x,y坐标在另一个图像上添加图像?

r - 在glmnet中绘制ROC曲线

arrays - 复杂表达式的简化

matlab - 仿射变换缩放

java - 在java中调色板交换BufferedImage

java - 在android中使用opencv检测玩具车后面

python - 如何在带有误差条的条形图中绘制 Pandas 数据框的特定行和列(基于行名和列名)?

python - matplotlib 曲面图超出轴限制

matlab - openCV DFT 和 Matlab FFT 结果值不同

java - 如何获取Java堆的内存地址?