Хотя ваш массив 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)));