2013-02-14 4 views
1

이미지의 다른 색상 픽셀의 빈도를 플롯하려고합니다. 세 개의 별도의 그림에 세 개의 별도 히스토그램을 그릴 수 있습니다. 그러나 같은 그림에 빨간색을 모두 적색, 녹색을 녹색으로 그려야합니다.이 사이트 및 다른 사이트의 답변에서 알 수있는 것은 다음과 같습니다. 작동해야하지만 그렇지 않으면 두 번째 만 나타납니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?3 개의 히스토그램, 3 가지 색상, 하나의 그림 : 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 on'으로 전환하고 계속 꺼져있을 때까지 계속 유지합니다.

1

보다 간단한 방법으로 모든 히스토그램 (RGB 채널)을 그릴 수 있습니다 :

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

여기서 newImg은 사용자가 만든 [r; g ;b]과 동일한 Nx3 매트릭스로 바뀝니다. 그런 다음 하나의 hist이이를 처리하고 사용자 정의 색상 맵을 사용하여 각 채널을 해당 색상으로 표시합니다.

0

보류 상태가 축 단위로 적용되고 hold on 명령이 현재 축에 적용되므로 hold on을 호출하기 전에 새 도형 (및/또는 축)을 만들어야합니다. 보류 상태를보다 정확하게 제어하려면 축의 NextPlot 특성을 수정하십시오.

또한 여러 히스토그램을 플롯하기 위해 File Exchange의 distributionPlot이 유용 할 수 있습니다. 귀하의 경우, 예 # 7.

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); 
관련 문제