Странное поведение с массивом 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(:))
, это может спасти вас все это, и дать хороший сюжет.