重映射

一种优化照片辨识度的HDR自适应颜色映射方法
** @gmail.com
中国
大学 4300**

摘要 现在的照片拍摄,其原始数据可以达到14bit以上的亮度分辨率,也就是214种亮度,而一般的存储格式中,jpg等格式仅能存储8bit即256种亮度,这就涉及到颜色的重映射。普通的映射方法是取一个窗口进行线性映射,但是在逆光(亮度分布过宽)、雾霾(亮度分布过窄)等情况下会出现高光溢出死白、照片发灰辨识度低等情况,丢失重要原始信息。本文描述了一种把亮度或饱和度通过直方图积分进行重映射的方法,可以自动适应各种极端情况,得到最优化的颜色重映射方案,尽可能保留原始重要信息。

关键词 HDR RAW 图像优化

1 绪论
随着CMOS和CCD等光电感应技术的不断发展,现在数码拍照、数码摄影已经变得极其廉价而广泛普及,并随着智能手机的普及成为几乎人人拥有的应用。而我们拍照时,会出现各种原始图片曝光不够准确等造成的图片发灰、辨识度不高的现象。因此,对这些照片进行自动、自适应优化,在不改变图片大小的情况下尽可能保留原始信息、提高图形辨识度,成为一种广泛的需求。
对于分辨率越来越高的数码照片或者影片,基于人体对颜色的辨识能力人们发明了多种照片和影片压缩方案,如JPG、MPEG等。这些压缩方案的常见共同点是把亮度压缩到了8bit,即28=256阶亮度中。把原始数据压缩到256阶亮度的过程中,最常用的算法就是线性截取,即以测光点为平均亮度(最大亮度的128/256倍)上下共256倍的亮度区间,在这个区间内进行均分为256阶亮度的线性映射。其他还有对数映射,或者基于γ值的幂函数等方案,对于人眼而言显然对数映射更为合理,但是计算量较大。

图1 亮度直方图模式下的映射窗口图示 a 缺省映射 b 提高或者降低eV后的映射 c 提高或者降低对比度后的映射 d 改变γ值后的映射

但是这种映射存在窗口过大或者过小的问题。拍摄的原始数据中,即自然界中,亮度变化范围远大于256阶这个范围。在逆光(物体背后即强光光源)等场合,如果把仅仅256倍亮度范围的数据纳入,就会出现低端过暗(亮度小于1或者接近1时对小数点后取整,失去信息)和高端过亮(亮度超过255被截断取整为255失去信息)的情况。而在拍摄雾中天气时,又会出现亮度范围狭窄(如32.5~57.8),原始信息包含小数点后信息,在数字化取整后丢失这些信息,如果映射时未提高对比度,即使后期进行提高对比度等数字操作也无法恢复的问题。

对于最优化拍摄,即获取正确曝光的操作,选测光点、改变曝光时间、光圈、改变eV都仅仅是改变映射窗口的中心点位置。改变对比度,会收窄或者展宽映射窗口。对于大部分情况,可以看到直方图中,亮度呈正态分布,选择中心点就能正确曝光。常见的自动照片优化,则会通过提高对比度来提高这种照片的辨识度,但是提高对比度的算法往往是线性的而不够智能,容易出现高光区溢出死白的现象。而提高饱和度会让照片色彩更为鲜艳靓丽,但是提高饱和度造成饱和度溢出死红丢失细节,则更为常见,如市面的iPhone等手机自带的图片自动优化等。

当亮度分布偏到直方图一边的情况下,我们会发现图片过暗或者过亮。改变gamma值,即对亮度做如公式1的重映射(其中L为亮度除以256做归一化取0~1之间的值),可以让画面更好看,或者说辨识度更高,或者说,在直方图中分布更均匀。当gamma<1时,整体画面变亮,可以让暗部更清晰。当gamma>1时,整体画面变暗,可以让亮部更清晰。我们可以看出,直方图中亮度分布越均匀,相对人眼的辨识度就越高,看起来也就越好看。

公式1 Map(L)=Lgamma

图2 gamma校正后的图像与直方图

2 直方图均衡化算法
从对gamma值调整的结果来看,我们可以看到,通过调节亮度映射的密度,使得让不同亮度的点的数目尽可能一致,能够使得在画面中尽可能保留原始信息。为此我们可以作如下映射:
令 c(x)为亮度为x的点的数目,即直方图所代表的函数。s(x)为亮度小于x的点的数目占画面总像素点的比例,那么假设f(x)为原始亮度为x的像素点在重映射后的亮度(对最大亮度做归一化),则显然有当s(x)=p时,f(x)=p。而s(x)为c(x)的积分除以常数,所以有公式2:

$Map(x)=\frac \Sigma i=0,x Count(i) \Sigma i=0,max Count(i) 0<x<1$

这称为直方图均衡化。(参考文献 钴-60数字辐射成像集装箱检测系统,p111)考虑最简单的情况,对于各种HDR,或者RAW里面的映射,这种简单的映射已经足够。这种映射由于对信息密度做了最大化,因此不管是高动态范围,还是发灰的低动态范围,或者多亮度峰等复杂情况,都能够自动处理而无需人为干预。

3 最优化均匀映射方案,及其他进一步优化的讨论

当存在各种影响的时候,我们要给不同的亮度予以不同的权重:(公式3)

$Map(x)=\frac \Sigma i=0,x Count(i)W(i) \Sigma i=0,max Count(i)W(i) 0<x<1$

人眼近似可以看成对于图案,只对其相对亮度比例敏感、而不在乎绝对亮度,所以比重应该是 ln(x)的导数,即1/x,也就是说如果是裸眼看自然物体那么显然对数映射是信息密度最高的。但是由于存在噪声,所以当x接近于零时我们不能得到无穷大的信息密度。假如噪声强度为n,则从独立概率假设,有效信息强度应该近似为ln(\sqrt(x2+n2))的导数。对于数码图像,噪声大小和ISO、CCD大小、工作温度都有关系,常见的小底手机拍照,平均噪点强度大于5/256是很正常的。使用信息密度作为权重显然有利于进一步提高亮度中信息的有效利用。
图3 γ值和对数密度之间的差异

一般而言,我们把这种人眼对低亮度更敏感的特点用gamma值来表示(gamma=0.454),并使用类似gamma值的感光元件,和倒数gamma值(约2.2)的显示器。在日常拍摄中,这个缺省设定已经代表了信息存储的最佳密度,即已经无需调整。但是,gamma值公式和ln(\sqrt(x2+n2))的对数导数推算的信息密度虽然趋势相似、还是有一定差异的,并且在套用公式3时,对于暗部地区,显然先调整gamma值再计算和计算后调整gamma值对最后结果还是有一定影响的。

不过,我们认为仅仅对于人眼gamma值的校正准确程度,对公式3的影响并不值得付出对应的巨大计算量的代价。但是对于显示器则不然。大多数显示器是CRT或者液晶的,对于低光(小于15/255)或者高光(240/255)的像素点,由于已经超出显示器亮度的线性区,并不能完美表现正确的亮度,所以,我们认为应该避开这些区域,具体而言就是给予这个区间的像素更高的权重,让他们占据更多的亮度区间。

另外一个需要考虑的就是直方图均衡化,面积大并不一定总代表重要。当画面背景有大片的纯色背景时,可能少数非背景的图案才是重要的,如果完全靠数量决定,这些非背景的像素亮度宽度可能会被压缩到过小的地步。因此,公式3中的权重应该做截断处理,当Count(i)大于阈值时截断为阈值。作为经验值,我认为阈值每1/255亮度间隔取1%~5%面积比较好。

克服上述现象的另外一个办法,就是使用和相邻点的相对亮度差异作为权重。考虑到每点都进行计算相对差异计算量较大,也容易引进噪点带来的虚假权重,我认为对原图做1/8尺寸比例缩略图进行绝对亮度差异(以10/255为截断上限)为权重的直方图均衡化是一个比较好的选择。

4 伪代码
init();
for i=1 to picsize
begin
lum=pixal[i];//取某点的亮度
d=abs(lum-pixal[next(i)]);//和邻近点的亮度差异
if(d>threshhold_delta)d=10;//亮度差异过高会造成畸形矫正
count[lum]=count[lum]+d;//累计本亮度的重要性
end

for i=0 to max_lum
begin
if(sigma_lum>threshhold_lum)sigma_lum=threshhold_lum;//扣除特殊情况
//也可以对sigma_lum做对数处理以消除过高估计
sigma_lum[i]=sigma_lum[i-1]+count[lum];//
end

total_lum=sigma_lum[max_lum];

for i=0 to max_lum
begin
map_lum[i]=sigma_lum[i]*255/total_lum;
end

如果原始亮度带有小数点后精度,我们首先对亮度取整,用上述方法得到映射表后进行线性插值即可。如果原始亮度是分红绿蓝三原色,可以考虑取三分量中最大值作为上述算法的count的下标亮度值,d作为亮度差异可以选三原色亮度差异的总和。

5 对于饱和度调整的改进

本方法对于亮度的调整,已经有人探讨。但是对于图像饱和度的调整,如果仅仅根据HSL空间做线性增加,很容易出现高光色彩溢出的现象。解决的办法是对饱和度增加,不是采用直接原饱和度乘增加量的方法,而是用一个简单的映射函数,这个函数命名为f的话,有f(0)=0,f(1)=1且单调上升且可参数调整。最简单的函数就是幂函数,即类似亮度的gamma调整,即公式1,可调参数即γ值。
其他可用的函数有倒数函数等,如f(x)=a-c/(x+1)。网页(http://blog.csdn.net/maozefa/article/details/1781208)描述了一种根据photoshop处理结果猜测的算法。
而能够自适应处理,自动做最大饱和度,但是不出现饱和度溢出和亮度溢出,从而使得色彩自然的,上述的直方图均衡化方法显然更为适合,只不过均衡化的不是亮度而是饱和度而已。

6 结论

本方法通过直方图均衡化,可以将灰度图和彩色图的饱和度进行辨识度最高为目标的自适应优化,替代常见的各种照片自动优化方法,避免自动提高亮度和对比度时出现高光溢出现象,和提高过饱和度时的色彩溢出现象。同时,本算法考虑了处理速度的问题,并且对简单的根据亮度分布直方图可能造成的错误调整做了改进,

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容