нормализующая матрица в Matlab - PullRequest
3 голосов
/ 13 ноября 2011

У меня есть матрица изображений RGB (высота * ширина * 3), представленная в двойных. После некоторых манипуляций с матрицей некоторые значения стали больше 1 или меньше 0. Мне нужно нормализовать эти значения обратно до 1 и 0. Спасибо.

Ответы [ 2 ]

6 голосов
/ 13 ноября 2011

Ну, просто используйте индексацию по условию. Допустим, ваша матрица называется М. Если вы просто хотите установить значения от 1 до 1 и от 0 до нуля, используйте:

M(M > 1) = 1;
M(M < 0) = 0;

Однако, если вы хотите пропорционально нормализовать все значения к интервалу [0; 1], то вы должны сделать что-то похожее на:

mmin = min(M(:));
mmax = max(M(:));
M = (M-mmin) ./ (mmax-mmin); % first subtract mmin to have [0; (mmax-mmin)], then normalize by highest value

Вы должны учитывать случай, когда ваша матрица M уже находится в интервале [0; 1] и нормализация не нужна.

0 голосов
/ 13 ноября 2011

, если вы просто хотите увидеть изображения, которые вы можете использовать

imagesc(M); 

он заботится о самом диапазоне.

Если вы хотите изменить значения вручную и иметь полный контроль над ним,

M = M ./ max(M(:));

поможет, если у вас есть только положительные значения. Чтобы получить полное контрастное изображение, вы можете:

m = m - min(m(:));
m = m ./ max(m(:));
...