0

色付きのペンで作成された署名のセグメント化された画像「a」があります。背景は真っ白です。前景ピクセルの RGB コンポーネントの合計と、前景を構成するピクセルの合計を計算する必要があります。これが私のコードです-

r=a(:,:,1);
g=a(:,:,2);
b=a(:,:,3);
rsum=0;
gsum=0;
bsum=0;
count=0;
for i=1:h
    for j=1:w
        if r(i,j)~=255 || g(i,j)~=255 || b(i,j)~=255
            rsum=rsum + r(i,j);   
            gsum=gsum + g(i,j);
            bsum=bsum + b(i,j);
            count=count+1; 
        end
    end
end

count の値は正しく計算されますが、rsum、gsum、bsum はすべて 255 に設定されており、これは明らかに間違っています。行列 r,g,b は正しいです (255 以外のピクセルを示しています)。なぜ機能しないのですか?

4

1 に答える 1

2

のようtypersum、 255gsumで飽和してbsumuint8ます。合計を別の型に明示的にキャストしてみてください。

msk = r < 255 | g < 255 | b < 255;
rsum = sum( double( r(msk) ) );
gsum = sum( double( g(msk) ) );
bsum = sum( double( b(msk) ) );
count = sum(msk(:));

PS、Matlab の変数名としてandを使用しないこと
をお勧めします。ij

于 2014-06-05T13:53:22.297 に答える