1

matlabで画像を処理するときに問題があり、白い画像があり、画像のグレーレベルを印刷して1ずつインクリメントしようとすると、255になり、256にはなりません。コードは次のとおりです。 。カウントは0です。

  function [ count ] = white( I )
    [row,col]=size(I);
    count=0;
    for x=1:row
        for y=1:col
            g=I(x,y);   %the value of the gray level on each pixel
            if((g+1) == 256)
            count=count+1;
            256
        end
    end
  end
4

2 に答える 2

4

画像クラスはおそらくuint8であり、255はこのクラスの最大値です。例えば:

 >>  uint8(inf)

ans =

  255

代わりに、別のクラスにキャストしてみてください。たとえばI=uint32(I)...

@ Aganders3に続いて、forループを使用しないコードの解決策も提供します。

count=sum(I(:)>threshold); % Credit to @Jonas and @Aganders3

ここで、thresholdは、しきい値を設定するグレーレベルです。

于 2012-10-31T23:01:42.603 に答える
2

これが機能しない理由について、ネイトは正しいと思います。

また、問題のはるかに簡単な解決策を検討してください(与えられたIのは整数でいっぱいです):

count = sum(vector(I == intmax(class(I))));

于 2012-10-31T23:05:05.243 に答える