1

我正在尝试绘制图像中不同颜色像素的频率。我可以在三个单独的数字上绘制三个单独的直方图,但我想将它们全部绘制在同一个数字上,红色代表红色,绿色代表绿色等。从我在这个和其他网站上的答案中可以看出,以下应该工作,但它没有,只有第二个出现。我究竟做错了什么?

hold on;

x = 0:1:255;
figure ('name', 'red') ;
red = (newImg(:,:,1));
r = red(:)';
r = cast(r,'double');
[graph1,graph2] = hist (r,x);
bar(graph2,graph1, 'FaceColor', 'r','EdgeColor','r')
alpha(0.3);

green = (newImg(:,:,2));
g = green(:)';
g = cast(g,'double');
[graph1,graph2] = hist (g,x);
bar(graph2,graph1, 'FaceColor', 'b','EdgeColor','b')

hold off;
4

4 回答 4

1

您可以以更简单的方式绘制所有直方图(RGB 通道),例如:

hist(reshape(newImg,[],3),x);
colormap([1 0 0 ; 0 1 0; 0 0 1]); %RGB

在这里,我将其重塑newImg为 Nx3 矩阵,相当于[r; g ;b]您创建的矩阵。然后一个人hist可以处理它们,并使用自定义颜色图,用它代表的正确颜色绘制每个通道。

于 2013-02-14T17:07:47.663 回答
1

这里有一些关于如何用透明度叠加几个直方图的很好的解释,我认为它会对你有所帮助: http ://desk.stinkpot.org:8080/tricks/index.php/2006/07/how-to-make-a -matlab中的透明直方图/

figure;
hist(data1,20);
h = findobj(gca,’Type’,'patch’);
set(h,’FaceColor’,'r’,'EdgeColor’,'w’,'facealpha’,0.75);
hold on
hist(data2,20);
h = findobj(gca,’Type’,'patch’);
set(h,’facealpha’,0.75);
于 2015-06-05T06:42:04.963 回答
0

已修复,在绘制第一张图后需要“等待”;我以为这是一个切换开关-您打开“按住”并一直按住直到您将其关闭,显然不是...

于 2013-02-14T16:59:44.973 回答
0

您需要在调用之前创建一个新图形(和/或轴)hold on,因为保持状态适用于每个轴,并且该命令hold on适用于当前轴。如果您想更精确地控制保持状态,请修改NextPlot轴的属性。

此外,要绘制多个直方图,来自 File Exchange 的distributionPlot可能很有用;在您的情况下,例如#7。

于 2013-02-14T18:06:39.707 回答