2013-02-14 253 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。

相關問題