Странное поведение с массивом Matlab

У меня возникли проблемы с созданием гистограммы значений интенсивности из изображения в градациях серого. Ниже приведен код, который я использую для создания графиков для графика, который я хочу создать. Код отлично работает для каждого бина, кроме двух последних. По какой-то причине, если интенсивность равна 254 или 255, она помещает оба значения в блок 254, а в блоке 255 значения не накапливаются.

bins= zeros(1,256);
[x,y]=size(grayImg);
for i = 1:x
    for j = 1:y
        current = grayImg(i,j);
        bins(current+1) = bins(current+1) + 1;
    end
end
plot(bins);

Я не понимаю, почему такое поведение происходит. Я распечатал счет 254 интенсивностей и 255 интенсивностей, и они оба верны. Однако при использовании вышеуказанного кода для накопления значений интенсивности он работает некорректно.

Изменить: Добавил изображение, которое я использую, неправильный график (тот, который я получаю с кодом выше), и правильный

изображение в градациях серого

Неверный график

Правильный график

1 ответ

Решение

A. Первая проблема с вашим кодом - это начальное определение bins, Кажется, вы пришли из C или что-то в этом роде, но определение должно быть bins=zeros(1,256);

Б. Второй момент заключается в том, что вам не нужен вложенный цикл, у вас есть функция Matlab специально для этого:

bins=hist(grayImg(:),1:256);     % now, you don't need the pre-definition for 'bins'.
plot(bins);

C. Попробуйте использовать такие функции, как bar или же imhist или же hist(grayImg(:)), это может спасти вас все это, и дать хороший сюжет.

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