Вы проверили тип данных изображения?
Это правда, что если ваше среднее изображение I
meanvalue = mean(I(:)) = 155.9335
и вы добавили 20 к каждому пикселю
Ipt = I + 20
у вас должно быть
meanept = mean(Ipt(:)) = meanvalue + 20 = 175.9335
Но не забывайте, что тип данных изображения - это uint8, что ограничивает значение пикселей 0-255 . Это означает, что если вы добавили 20 к пикселю, а его значение больше 255, его значение будет равно 255, и то же самое, если вы вычесть какое-то значение и оно будет меньше 0.
Возможно, некоторые из ваших пикселей ограничены 255, когда обычно у вас будет больше 255.
Например:
У меня вектор X в двойном
X = [1 1 1; ...
1 1 1; ...
1 1 240];
Среднее значение X равно
mean(X(:)) = 27.5556
с
( 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 240)/9 = 27.5556
Если бы я добавил 20 к каждому пикселю
X20 = X + 20
= [(1 + 20) (1 + 20) (1 + 20); ...
(1 + 20) (1 + 20) (1 + 20); ...
(1 + 20) (1 + 20) (240 + 20)];
= [21 21 21; ...
21 21 21; ...
21 21 255];
Обратите внимание, что X20 (3,3) составляет 255, а не 260. Это вызывает
meanX20 = mean(X20(:)) = 47
но если я изменю тип данных X на удвоенный
X_double = double(X)
и добавил 20 к каждому пикселю
X20_double = X_double + 20
= [(1 + 20) (1 + 20) (1 + 20); ...
(1 + 20) (1 + 20) (1 + 20); ...
(1 + 20) (1 + 20) (240 + 20)];
= [21 21 21; ...
21 21 21; ...
21 21 260];
, а среднее значение X20_double -
X20_double_mean = mean(X20_double(:)) = 47.5556
Видите разницу?
Среднее двойное значение X20 составляет 47,5556, а среднее значение x20 для uint8 - 47.
Я надеюсь, что это поможет:)