调整一张图像的曝光/白平衡以匹配另一张(用PIL?)
我有一个便宜的立体相机设备,用来潜水。有时候,每个相机的白平衡或者曝光设置会不一样。比如说:
http://www.chrisevans3d.com/temp/forums/left.jpg
http://www.chrisevans3d.com/temp/forums/right.jpg
有没有办法通过获取每张图片的直方图(im.histogram()),然后做个差异对比或者查找表(LUT),再把一张图片转换成另一张?Photoshop里的“匹配颜色”功能是怎么工作的?
我想发布一个免费的软件包,让gopro立体相机更好用,所以任何帮助都非常感谢。
2 个回答
可以参考这个链接:http://en.wikipedia.org/wiki/Histogram_matching。这个内容主要讲的是灰度图像的直方图匹配,不过你也可以对RGB图像的每个颜色通道进行处理。
我这里有一个实现,基本上就是这个功能:
给定一张左图和一张右图,它会计算出这两张图的“平均”直方图,然后调整每张图的亮度和对比度,使它们的效果更接近这个平均值。你也可以选择让左图匹配右图,或者右图匹配左图,但我个人更喜欢不需要做这个选择。
匹配白平衡并不是一件简单的事情。一个很基本的方法是把世界假设成灰色,然后调整一张图片的RGB颜色通道,使其与另一张图片的平均RGB值相匹配。不过,如果场景的颜色偏向某种颜色(而不是灰色),这个方法就容易失败。你可以通过排除太暗或太亮的像素来进一步改善这个过程。关于白平衡的研究有很多,找一个算法来估计图片的色温,然后判断哪个设置更适合场景或相机,并对图片进行标准化处理。
曝光的情况也是类似的,也就是说,自适应算法会识别图片中的重点区域,并匹配平均亮度。
我建议你从一个简单的算法开始,然后在遇到问题时逐步改进。同时也要允许手动调整。
补充说明:
值得一试的开始:HP自适应白平衡
用于读取原始图片和基本后期处理的工具:dcraw