1

画像内のさまざまな色のピクセルの頻度をプロットしようとしています。3 つの別々の図に 3 つの別々のヒストグラムを描くことができますが、同じ図にすべてを描きたいと思います。赤は赤、緑は緑などです。このサイトや他のサイトの回答からわかることから、次のようになります。動作するはずですが、動作しません。2 番目のみが表示されます。私は何を間違っていますか?

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

透明度のある複数のヒストグラムを重ね合わせる方法についてのいくつかの素晴らしい説明を次に示します。これが役立つと思います。 -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);
于 2015-06-05T06:42:04.963 に答える
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 に答える
0

hold onhold-state は軸ごとにhold on適用され、コマンドは現在の軸に適用されるため、を呼び出す前に新しい Figure (および/または軸) を作成する必要があります。NextPlot保持状態をより正確に制御したい場合は、軸のプロパティを変更します。

また、複数のヒストグラムをプロットするには、File Exchange のdistributionPlotが役立ちます。あなたの場合、例#7。

于 2013-02-14T18:06:39.707 に答える
0

最初のグラフが描画された後に「保留」する必要がある問題を修正しました。私はそれがトグルであると仮定しました-あなたは「ホールドオン」に切り替え、オフにするまで保持し続けますが、明らかにそうではありません...

于 2013-02-14T16:59:44.973 に答える