c – 将胶片负RGB转换为正RGB的算法
发布时间:2020-12-16 07:14:24 所属栏目:百科 来源:网络整理
导读:假设我将摄影胶片负片扫描为RGB图像,我试图找到一种将颜色值转换为RGB正片的算法. 由于橙色偏差(http://photo.net/learn/orange-negative-mask),如果我简单地说redPositive = 255 – redNegative我得到一个具有强烈青色色调的最终图像,并且非常褪色.这意味着
假设我将摄影胶片负片扫描为RGB图像,我试图找到一种将颜色值转换为RGB正片的算法.
由于橙色偏差(http://photo.net/learn/orange-negative-mask),如果我简单地说redPositive = 255 – redNegative我得到一个具有强烈青色色调的最终图像,并且非常褪色.这意味着这里给出的答案:Convert negative image to positive不正确. 那么我将如何制作以下例程: struct RGB { unsigned byte red; unsigned byte green; unsigned byte blue; }; void FilmNegativeToPositive(RGB const &negative,RGB &positive) { // What goes here? } 解决方法
我没有要测试的数据,但根据你提供的链接,负片是青色,品红色和黄色染料的混合物,它们是不纯的:
因此,你想做这样的事情(未经测试的伪代码): 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色彩空间. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |