2014-01-19 3 views
0

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

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 интенсивностей, и они оба правильны. Однако при использовании вышеуказанного кода для накопления значений интенсивности он работает неправильно.

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

grayscale image

Incorrect graph

Correct graph

ответ

1

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

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

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

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

+0

Спасибо за ответ, я пробовал использовать бит = нули (1,256), но это не помогло. Однако я знаю и о функциях гистограммы, но я пытаюсь создать график, не используя встроенные функции. – EricF

+0

Какой формат 'grayImg'? если это uint8, попробуйте преобразовать его в double, с функцией 'double'. – Adiel

+0

Да, это блок 8. Благодаря вашему ответу я действительно понял это. Я должен был преобразовать в int16, потому что 8-битное число не может иметь значение 256, которое я пытаюсь сделать. – EricF

Смежные вопросы