2017-12-30 26 views
0

バイナリイメージの垂直ヒストグラムを作成しようとしています。私はMATLABの関数を使いたくありません。どうやってするの?MATLABのバイナリイメージのヒストグラム

私はこのコードを試してみましたが、それは正しいですかどうかはわからない:

function H = histogram_binary(image) 
[m,n] = size(image); 
H = zeros(1,256); 
for i = 1:m 
    for j = 1:n 
     H(1,image(i,j)) = H(1,image(i,j))+1; 
    end 
end 

イメージがある:

The picture

結果:

vertical histogram

なぜ値が表示されないのですかヒストグラムの黒のピクセルの?

+0

Javascriptの詳細な実装とデモについては、このリンクhttp://ciphervision.com/をご覧ください。 – flamelite

答えて

1
% Read the binary image... 
img = imread('66He7.png'); 

% Count total, white and black pixels... 
img_vec = img(:); 
total = numel(img_vec); 
white = sum(img_vec); 
black = total - white; 

% Plot the result in the form of an histogram... 
bar([black white]); 
set(gca(),'XTickLabel',{'Black' 'White'}); 
set(gca(),'YLim',[0 total]); 

出力:彼らは1から0の値とあなたのループスタートを持っているので、あなたのコードに関する何のため

BW Histogram

、それは次のように書き換え...黒画素を数えていません:

function H = histogram_binary(img) 
    img_vec = img(:); 
    H = zeros(1,256); 

    for i = 0:255 
     H(i+1) = sum(img_vec == i); 
    end 
end 

ただし、バイナリイメージ上のすべてのバイトの出現回数をカウントすると(conta 0または1の値)はちょっと無意味で、ヒストグラムに読みやすさが欠けます。副読本ではan existing functionを上書きするため、imageを変数名として使用しないでください。

+0

Belluzo:バイナリイメージの垂直ヒストグラムが欲しかったので、ヒストグラムに基づいて写真に何文字含まれているのかを次にカウントできます。あなたの方法で可能でしょうか?ありがとうございます – dEs12ZER

+0

何ですか?文字数?あなたはこのアプローチでそれらを数えることはできません... –

+0

私は実際のバイナリイメージを見ることができる投稿を編集した、それは11 caracteresをカウントする、私はバイナリイメージの垂直ヒストグラムを行う必要がありますそれは、私は画像内のcaracteresの数を数えるメソッドを実装する必要があります、あなたは任意のソリューションを提案できますか? – dEs12ZER

0

上記のコメントで@beakerに記載されているように、このような場合の垂直ヒストグラムは、一般に垂直投影を指します。ここでこれを行う方法です:

I = imread('YcP1o.png'); % Read input image 
I1 = rgb2gray(I); % convert image to grayscale 
I2 = im2bw(I1); % convert grayscale to binary 
I3 = ~I2; % invert the binary image 
I4 = sum(I3,1); % project the inverted binary image vertically 
I5 = (I4>1); % ceil the vector 
plot([1:1:size(I,2)],I5); ylim([0 2]) 

あなたはさらに、この場合、答えとして13与えsum(diff(I5)>0)を使用して文字の数をカウントする0->1遷移を確認することができます。

関連する問題