2012-06-29 4 views
5

Я хочу получить значения RGB изображения во многих условиях освещения. Чтобы получить нейтральный сценарий, я хочу нормализовать значения RGB со значениями RGB для некоторых предопределенных изображений.Как нормализовать значение RGB со справочными значениями RGB

Позвольте мне объяснить. У меня 6 предопределенных изображений, и я знаю их точные средние значения RGB. Теперь я сделаю снимок неизвестного изображения в разных условиях освещения. Я также сделаю снимки предопределенных 6 изображений в тех же условиях. Теперь моя цель состоит в том, чтобы определить формулу нормализации, сравнив известные ссылочные значения rgb предопределенных изображений с значениями, вычисленными из изображения камеры. с этим параметром нормализации я откалибрую значение RGB неизвестного изображения. Так что я могу получить среднее значение RGB от неизвестного изображения нейтральным образом, независимо от состояния освещения.

Как я могу достичь этого легко в Java.

ответ

0

Для различных ситуаций освещения требуется линейная коррекция RGB. Просто умножьте каждое из значений R, G, B на константу, полученную для каждого канала.

Если бы был только один контрольный цвет, это было бы легко - умножить на контрольный цвет и разделить на захваченный цвет. Например, если ваш контрольный цвет был (240,200,120), но ваше изображение было измерено (250, 190 150) - вы умножаете красный на 240/250, зеленый на 200/190 и синий на 120/150. Используйте те же константы для каждого пикселя в изображении.

При использовании нескольких цветов для соответствия вам придется усреднять поправочные коэффициенты, чтобы получить один набор констант. Большее взвешивание нужно придавать более ярким цветам, например, если у вас есть ссылка (200,150,20), и он измеряется (190,140,10), вы пытаетесь удвоить количество синего, которое может быть очень далеким. Простейшим методом было бы суммирование всех эталонных значений и деление на сумму измеренных значений.

+0

Привет, я использую ваш метод. Теперь вместо значений RGB я использую цветовое пространство HSI и только нормализацию матрицы интенсивности. –

+0

@P basak - Иными словами, вы по существу делаете то, что я предлагал, но с HSI вместо YUV.Иными словами, вы просто хотели нормализовать что-то очень похожее на канал яркости !!! – trumpetlicks

+0

@Mark. Таким образом, по существу, вы предлагаете средние значения для каждого канала, а затем используя эти средние в качестве коэффициента нормировки для новых изображений. – trumpetlicks

1

Является ли причина, по которой вы это делаете, чтобы по-настоящему нормализовать RGB, или вы пытаетесь нормализовать изображения с одинаковой яркостью. Потому что, если ваша цель - просто яркость, тогда я бы преобразовал в стандарт цвета, который имеет компонент яркости, и нормализует только компонент яркости.

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

шаги (но не в Java):

1) Convert - RGBImage --> YUVImage 
2) Normalize RGBImage using the Y component 
3) Convert - Normalized(YUVImage) --> Normalized(RGBImage) 

Таким образом, вы можете осуществлять нормализацию по яркости с помощью algorithm described here.

ELSE, вы можете усреднять средние значения для каждого канала и использовать их в качестве числителя для коэффициентов нормализации для ваших новых изображений, вычисляющих каждый канал отдельно.

+0

Привет, я хочу по-настоящему нормализовать rgb. –

+0

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

+0

Я перешел в цветовое пространство HSI. Теперь я ищу способ нормализации индекса I со ссылкой. –

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