нормализующая матрица в matlab

#matlab #matrix #normalize

#matlab #матрица #нормализовать

Вопрос:

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

Ответ №1:

Ну, просто используйте индексацию по условию. Допустим, ваша матрица называется M. Если вы просто хотите установить значения больше, чем от 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] и нормализация не требуется.

Комментарии:

1. Спасибо, действительно, это делает то, что я просил. Но результат недостаточно хорош, поэтому я предполагаю, что мне действительно нужно нормализовать матрицу. наибольшее значение должно быть равно 1, наименьшее 0 , а все остальное пропорционально betwin.

2. Извините, я не понял это правильно. Я отредактировал свой ответ. Надеюсь, это то, что вы хотели.

3. @Curdeius: Если вы хотите обрезать значения в диапазоне [0,1] (ваше первое решение), вы также можете записать его векторизованным как: M = min(max(M,0),1)

4. @Curdeius: Может быть, последнее действие должно быть (M = (M-mmin) ./ (mmax-mmin); )? (вместо .*)

Ответ №2:

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

 imagesc(M); 
  

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

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

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

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

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