Что не так с этим простым кодом 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.