三个直方图,三种不同的颜色,一个图:matlab

时间:2013-02-14 16:53:32

标签: matlab histogram

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

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 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

以下是关于如何用透明度叠加多个直方图的一些很好的解释,我认为它会对你有所帮助: http://desk.stinkpot.org:8080/tricks/index.php/2006/07/how-to-make-a-transparent-histogram-in-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);

答案 2 :(得分:0)

修正了'抓住'需要在绘制第一张图之后出现;我认为它是一个切换 - 你切换'保持'并且它一直保持直到你关闭它,显然不是......

答案 3 :(得分:0)

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

另外,要绘制多个直方图,来自文件交换的distributionPlot可能很有用;在你的例子中,例如#7。