2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Линейное контрастирование в MATLAB
Сообщение26.09.2021, 13:15 


21/09/14
8
Необходимо выполнить линейное контрастирование в MATLAB вручную.

Выражение для изображения в градациях серого
Используется синтаксис Matlab M
lin_eq = (img_gray-I_min)/(I_max-I_min)*(y_max-y_min)+y_min;
дает на выходе бинарное изображение со значениями элементов, соответствующим $y_{\max}$ и $y_{\min}$.

При этом данное выражение
Используется синтаксис Matlab M
lin_eq = (img_gray-I_min)*((y_max-y_min)/(I_max-I_min))+y_min;
дает изображение без изменений, если диапазон значений интенсивности на выходе более узкий, чем исходный. Если диапазон необходимо расширить, работает корректно.

Где может быть допущена ошибка и как возможно достичь корректной работы для случаев и сжатия, и растяжения?

 Профиль  
                  
 
 Re: Линейное контрастирование в MATLAB
Сообщение26.09.2021, 20:33 


18/09/21
1676
Наверно эти значения имеуют целый тип данных (int32 или int64), а не с плавающей точкой (double).
В результате идёт деление целых с округлением.
Попробуйте
Используется синтаксис Matlab M
lin_eq = double(img_gray-I_min)/double(I_max-I_min)*double(y_max-y_min)+double(y_min);

Если надо, то результат можно обратно в целый int32 преобразовть (или int64, если надо)
Используется синтаксис Matlab M
lin_eq = int32(double(img_gray-I_min)/double(I_max-I_min)*double(y_max-y_min)+double(y_min));


А вообще лучше выбрать какую-то стратегию, где у вас целые данные, а где данные с плавающей точкой, чтобы сами переменные были правильного типа.
Ещё есть вариант использовать только целые. Это надо сначала умножить, а потом делить.
Используется синтаксис Matlab M
lin_eq = ((img_gray-I_min)*(y_max-y_min))/(I_max-I_min)+y_min;

Тут правда есть тонкости, чтобы не было переполнения целого. И округление всегда вниз идёт.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 2 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group