Почему мой массив в MATLAB насыщается значением 255? - PullRequest
3 голосов
/ 11 августа 2010

Это мой код:

arr = zeros(fx-10,1);
frm = frams(x).cdata;
for k=1:fx-10
    for i=1:10
        for j=1:fy
            arr(k) = arr(k)+ abs(frm(k+i-1,j)-model(i,j))
        end
    end
end

Почему массив получает только до 255 значений?

Я пытаюсь определить:

 arr = zeros(fx-10,1,'int64');

и кодне удалось:

???Неопределенная функция или метод «плюс» для входных аргументов типа «int64».

1 Ответ

5 голосов
/ 11 августа 2010

Хотя ваш массив arr имеет тип double, я считаю, что одно или несколько значений, которые вы получаете от frm или model, имеет тип UINT8 , который имеет максимальное значение из 255. Когда арифметика выполнена для добавления этих значений к arr, я считаю, что вычисление выполняется с использованием целочисленной арифметики, а результат конвертируется в двойное число, которое помещается в arr. По мере того, как вы продолжаете добавлять значения UINT8 вместе, значение в конечном итоге насыщается максимум 255.

Чтобы обойти это, вы можете использовать функцию DOUBLE для преобразования значений из frm или model в тип double перед выполнением арифметики. Примерно так должно работать:

arr(k) = arr(k) + abs(double(frm(k+i-1,j))-double(model(i,j)));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...