2013-02-14 281 views
1

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

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; 

回答

0

固定,'hold'需要在绘制第一个图之后出现;我认为这是一个切换 - 你切换'保持',它一直保持直到你关掉它,显然不是...

1

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

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

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

0

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

此外,要绘制多个直方图,文件交换中的distributionPlot可能很有用;在你的情况下,例#7。

相关问题