2015-11-19 2 views
3

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

Из-за оранжевого смещения (http://photo.net/learn/orange-negative-mask), если я просто говорю redPositive = 255 - redNegative Я получаю окончательное изображение с синим голубым оттенком и очень сильно размывается. Это означает, что ответы даны здесь: Convert negative image to positive: NOT правильный.

Так как я бы ремесло следующие рутина:

struct RGB 
{ 
    unsigned byte red; 
    unsigned byte green; 
    unsigned byte blue; 
}; 

void FilmNegativeToPositive(RGB const &negative, RGB &positive) 
{ 
    // What goes here? 
} 
+0

Есть ли шанс, что вы могли бы предоставить изображения негатива и что правильно рассчитанный положительный результат будет выглядеть? Я боюсь, что просто переезд в Google может не дать точно такого рода негативы, с которыми вы работаете. –

+0

Возьмите «черное» изображение (например, бит перед изображением 1 - не белые, где вы загрузили фильм в камеру и выставили его на свет, но черные биты, которые находятся между выстрелом 1 и лидером, загруженным в пленочный ролик). Сканируйте это, измерьте его значение RGB и «добавьте» [или инвертируйте и «вычитайте», в зависимости от того, на какой стороне преобразования на отрицательный вы делаете это], что для существующих значений. Вероятно, лучше всего сканировать в 16-битной точности, как и в 8-битном, вы, скорее всего, потеряете около одной трети бит. –

+0

Строго говоря, проблема не в преобразовании RGB. Связанные ответы правильны в том смысле, что это просто «255-значение». Проблема заключается в ваших данных. – deviantfan

ответ

0

У меня нет данных, чтобы проверить, но по ссылке, которую вы дали, отрицательный представляет собой смесь голубого, пурпурного и желтого красителей, которые являются нечистыми:

Желтый слой красителя является самым чистым. Цвет пурпурного красителя имеет заметное количество желтого цвета. Голубой слой красителя имеет заметное количество желтого и пурпурного в нем.

Таким образом, вы хотите сделать что-то вроде этого (непроверенных псевдокод):

Let I_MY be the ratio of yellow impurity to pure magenta dye 
Let I_CY be the ratio of yellow impurity to pure cyan dye 
Let I_CM be the ratio of magenta impurity to pure cyan dye 

Given R, G, B in [0, 255] 
Convert to CMY: 
    C = 1.0 - R/255.0 
    M1 = 1.0 - G/255.0 
    Y1 = 1.0 - B/255.0 

Calculate the impurities in the cyan dye and remove them, since we assume no other dye has cyan impurities: 
    M = M1 - I_CM×C 
    Y2 = Y1 - I_CY×C 

Now the amount of magenta dye is correct, so subtract its yellow impurity: 
    Y = Y2 - I_MY×M 

Convert the corrected CMY values back to RGB: 
    R' = 255×(1.0-C) 
    G' = 255×(1.0-M) 
    B' = 255×(1.0-Y) 

Если выясняется, что есть более сложное загрязнение, чем вы получаете линейную задачу алгебры:

[ 1 I_MC I_YC] [C'] [C] 
[I_CM 1 I_YM] × [M'] = [M] 
[I_CY I_MY 1] [Y'] [Y] 

Где вы хотите решить для C ', M' и Y ', а затем конвертировать обратно в цветовое пространство RGB.

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