2016-10-11 2 views
1

Какая функция линейного отображения требуется для отображения серого изображения с [30-200] до [0, 255]?Какая функция линейного сопоставления

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

min : 30, want to map to 0 
mid : 85, want to map to 128 
max : 200, want to map to 255 

if (i <= mid), M(i) = 127*(i - min)/(mid - min) 
if (i > mid), M(i) = 128 + (255 - 128)*(i - mid - 1)/(max - mid - 1); 

Это кажется правильным для меня, потому что :

if i = 30, it should map to 0. Plugging the information in: 
M(30) = 127*(30-30)/(85 - 30) = 0 
If i = 85, it should map to 127: 
M(85) = 127*(85 - 30)/(85 - 30) = 127 
If i = 200, it should map to 200: 
M(200) = 128 + (255 - 128)*(200 - 85 - 1)/(200 - 85 - 1) = 255 

спасибо.

+2

Это может быть способ сделать это , В этом случае он линейный. Я предлагаю вам взглянуть на «выравнивание гистограммы». Это то, что вы пытаетесь сделать. Существует множество разных сопоставлений в зависимости от причины, по которой вы хотите изменить контраст вашего изображения. – Eskapp

ответ

1

Если вы применяете линейное отображение, то середина первого интервала будет автоматически отображена на середину второго интервала (вы можете видеть его как принцип Фалеса). Поэтому вам нужно применить только одно уравнение: y = a.x + b

Для решения этого уравнения у вас есть две информации: a.30 + b = 0 и a.200 + b = 255.

Затем вы решаете это, и получаете: a = 1,5 и b = -45.

И будьте осторожны, середина [30, 200] не 85, а 115 (= 30 + 85).

Наконец, вы можете проверить, если применить 1,5 * х-45 = у, вы успешно получить: 30-> 0, 200-> 255, и 115-> 127,5

Смежные вопросы