Что не так с этим простым кодом Matlab?

У меня есть сегментированное изображение "а" подписи, сделанное цветной ручкой. Фон чисто белый. Мне нужно вычислить сумму компонентов 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). Почему не работает?

1 ответ

Решение

Кажется, что type из rsum, gsum а также bsum является uint8 и он насыщен на 255. Попробуйте явно привести сумму к другому типу.

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,
Лучше не использовать i а также j в качестве имен переменных в Matlab.

Другие вопросы по тегам