具体实施方式
以下说明为完成发明的优选实现方式,其目的在于描述本发明的基本精神,但并不用以限定本发明。实际的发明内容必须参考之后的权利要求范围。
必须了解的是,使用于本说明书中的“包含”、“包括”等词,用以表示存在特定的技术特征、数值、方法步骤、作业处理、元件和/或组件,但并不排除可加上更多的技术特征、数值、方法步骤、作业处理、元件、组件,或以上的任意组合。
在权利要求中使用如“第一”、“第二”、“第三”等词用来修饰权利要求中的元件,并非用来表示之间具有优先权顺序,先行关系,或者是一个元件先于另一个元件,或者是执行方法步骤时的时间先后顺序,仅用来区别具有相同名字的元件。
图1是依据本发明实施例的运算装置的系统架构图。此系统架构可实施于桌上型计算机、笔记型计算机、平板计算机、手机、数字相机、数字录像机等,至少包含处理单元110。处理单元110可使用多种方式实施,例如以专用硬件电路或通用硬件(例如,单一处理器、具平行处理能力的多处理器、图形处理器或其他具运算能力的处理器),并且在执行固件或软件时,提供之后所描述的功能。处理单元110可通过相机模块控制器170控制相机模块190捕捉多个低动态范围帧(LDR,Low-Dynamic-Range frame)并存储在帧缓存区(frame buffer)130。相机模块190可包含图像传感器,例如,互补式金属氧化物半导体(complementary metal-oxide-semiconductor,CMOS)、电荷耦合元件(charge-coupled device,CCD)等传感器,用以感测由红、绿、蓝光强度所形成的图像,以及包含读取电子电路,用以从图像传感器搜集感测到的数据。处理单元110可从帧缓存器130取得至少三个低动态范围帧(LDR frame),在一实施例中,前述至少三个LDR帧是12位,其中一个LDR帧是在最佳曝光设置(exposure setting)下取得,由自动曝光算法(AE,Automatic Exposurealgorithm)计算而得,以下称第0帧。由此须注意的是,第0帧取得时使用的曝光设置,包括快门速度(shutter speed)、模拟增益(analog gain)以及数字增益(digital gain),这些设定参数也会记录在帧缓存器130或易失性存储器140。易失性存储器140,例如动态随机随取存储器(DRAM,Dynamic RandomAccess Memory),用以存储执行过程中需要的数据,例如,变量、数据表(datatables)等。另一个LDR帧为一个低曝光帧,以下称第1帧。再另一个LDR帧为一个高曝光帧,以下称第2帧。处理单元110使用高动态范围融合算法(HDRM,High-Dynamic-Range Merging Algorithm)融合第0~2帧以产生高动态范围帧(HDR,High-Dynamic-Range frame),并存储至帧缓存器150。在一实施例中,该输出的HDR帧是18位。
图2是依据本发明实施例由处理单元执行的高动态范围融合方法的方法流程图。此流程开始在从帧缓存器130取得第0帧(步骤S200)。接着,处理单元110获得第0帧数据的帧统计信息(frame statistics information)(步骤S201),其中上述帧统计信息拥有第0帧的一暗区中包含的第一像素数目(pixelnumber)以及第0帧的一亮区中包含的第二像素数目。处理单元110再依据上述第一像素数目及第二像素数目计算一比值(步骤S202)。之后处理单元110依据比值以及第0帧数据的曝光设置(exposure setting)计算第一扩展因子及第二扩展因子(步骤S203)。关于步骤S201~S203的细节后面会再详述。处理单元110使用第一扩展因子将第0帧数据扩展至高动态范围(HDR)(步骤S204)。接着,处理单元110从帧缓存器130取得第1帧(步骤S205)并使用第二扩展因子将第1帧数据扩展至高动态范围(HDR)(步骤S206),在一实施例中,该扩展的步骤是将上述第0/1帧的各像素值乘以第一/二扩展因子。最后,处理单元110融合扩展后第0帧数据及扩展后第1帧数据(步骤S207)。在一实施例中,至此,本发明的处理单元110将正常曝光的第0帧与低曝光的第1帧扩展至高动态范围并实现融合。
图3是依据本发明另一实施例由处理单元执行的高动态范围融合方法的方法流程图。此流程开始在从帧缓存器130取得第0帧(步骤S211)。接着,处理单元110获得第0帧中每一块的统计信息(步骤S213)。详细来说,第0帧可切分为mxn块,每块例如包含32x32像素,以及计算每个像素的亮度值。每个像素的亮度值可使用公式(1)计算:
V=0.3x R+0.6x G+0.1x B (1)
其中,R代表红色值,G代表绿色值,B代表蓝色值,V代表亮度值。处理单元110计算每块的平均亮度值AveLum以及亮度直方图(histogram)。图4是依据本发明实施例的直方图区间示意图。本发明以亮度值为12位举例,当然本发明不限于此,以12位表示的亮度值区间为0~4095。直方图划分为例如16个区(bins),Bin8包含的最小亮度值V8设为2047.5(=4095/2)。Bin7及Bin9包含的最小亮度值V7及V9可分别使用公式(2)及(3)计算:
V7=4095x r (2)
V9=4095x(1-r) (3)
其中,r可为0~0.5之间的任意数值。假设r设为0.25,则V7为1023.75,而V9为3071.25。将亮度值区间0~V7平均分为7区(Bin0~Bin6),将亮度值区间V9~4095平均分为7区(Bin9~Bin15),第8区(Bin7)的亮度值区间为V7~V8,第9区(Bin8)的亮度值区间为V8~V9。针对每个块,处理单元110将该块的各像素按照其亮度值划分至对应的区间(Bin),并统计每一区间中包含几个像素。产生直方图的范例虚拟码如下所示:
其中,bestExpBlockInfor是一个结构阵列,每一个结构存储一块的统计信息,包含平均亮度值block_averVal以及Bin0~Bin15的像素数目block_hist。
接着,处理单元110依据前述经由分析每块的平均亮度值及直方图得到的统计信息,辨认其类型为低曝光、正常曝光或高曝光(步骤S215)。详细来说,先计算该块的直方图的下限区值(low-bin threshold)及上限区值(high-binthreshold)。下限区值及上限区值可分别使用公式(4)及(5)计算:
threBinLow≒(BinNum/2-1)/r x 0.18 (4)
threBinHigh≒BinNum–(BinNum/2-1)/r x 0.18 (5)
其中,threBinLow代表下限区值,threBinHigh代表上限区值,BinNum代表该块的直方图被划分的区(bin)的数目,如前举例,BinNum=16,r可为0~0.5之间的任意数值。假设r设为0.25,则下限区值为5,而上限区值为11,则对于每个块,像素属于(Bin0至Bin5)的区为暗区,像素属于(Bin11至Bin15)的区为亮区。针对每块,累计暗区(Bin0至Bin5)的像素数目pixNumLow,以及累计亮区(Bin11至Bin15)的像素数目pixNumHigh。处理单元110藉由以下条件来辨认其类型为低曝光、正常曝光或高曝光。若任一块的累计暗区的像素数目pixNumLow大于一块亮度阈值(blocklumthres),则将此块的类型标示为低曝光。若任一块的累计亮区的像素数目pixNumHigh大于该块亮度阈值,则将此块的类型标示为高曝光。在一实施例中,前述块亮度阈值与该块中包含的像素数目有关,例如blocklumthres=blocksize*ratio。在另一实施例中,处理单元110还提供一平均亮度下限值AveLumLow(例如为256)以及一平均亮度上限值AveLumHigh(例如为3840)。若该块的平均亮度值AveLum小于或等于AveLumLow,则将此块的类型标示为低曝光,若该块的平均亮度值AveLum大于或等于AveLumHigh,则将此块的类型标示为低曝光。若任一块未标示为低曝光或高曝光,则将此块的类型标示为正常曝光。辨认每块类型的范例虚拟码如下所示:
其中,blockLabel是一个阵列,每一个存储格存储一块的类型标示,例如低曝光“LOW”、正常曝光“NORMAL”以及高曝光“HIGH”。在一些实施例中,本领域技术人员也可修改皆考虑累计暗区或亮区的像素数目以及该块的平均亮度值AveLum来辨认其类型为低曝光、正常曝光或高曝光。例如,若任一块的累计暗区的像素数目pixNumLow大于该块亮度阈值blocklumthres以及该块的平均亮度值AveLum小于或等于AveLumLow,则将此块的类型标示为低曝光。若任一块的累计亮区的像素数目pixNumHigh大于该块亮度阈值blocklumthres以及该块的平均亮度值AveLum大于或等于AveLumHigh,则将此块的类型标示为高曝光。若任一块未标示为低曝光或高曝光,则将此块的类型标示为正常曝光。
接着,处理单元110根据每块的类型设定权重(步骤S217),以及计算第0帧中每个像素的权重(步骤S219)。在步骤S217,详细来说,当此块的类型标示为低曝光时,将该块的权重设定为0;当此块的类型标示为正常曝光时,将该块的权重设定为1;以及此块的类型标示为高曝光时,将该块的权重设定为2。在步骤S219,详细来说,除了边界及角落块的像素外,处理单元110依据相邻四块的权重以及与与相邻四块间的距离计算第0帧中每个像素的权重。图6是依据本发明实施例的相邻四块示意图。相邻四块的中心点WUL、WUR、WLL及WLR围成一个矩形,以及此矩形包含四边E1至E4。每个像素权重Wp的计算可使用公式(6)计算:
Wp=D1x D2x WUL+D1x D4x WUR+D3x D2x WLL+D3x D4x WLR
(6)
WUL代表左上块的权重,WUR代表右上块的权重,WLL代表左下块的权重,WLR代表右下块的权重,D1代表像素P与下边E1间的距离,D2代表像素P与右边E2间的距离,D3代表像素P与上边E3间的距离,以及D4代表像素P与左边E4间的距离。步骤S219所计算得到的第0帧中每个像素的权重将在与第1帧和第2帧融合时使用,详见后面的叙述。
现在返回参考图3的初始步骤S211,处理单元110在取得第0帧后(步骤S211),获得第0帧的帧统计信息(步骤S251以及S231)。在步骤S211,处理单元110可将第0帧的RGB颜色空间转换成HSV颜色空间。对于步骤S251及S231,详细来说,处理单元110计算第0帧的亮度直方图。图5是依据本发明实施例的直方图区间示意图。暗区(Bin0)的亮度值范围从0~C1,而亮区(Bin3)的亮度值范围从C3~C4。这里仍以亮度值为12位举例,当然本发明不限于此,以12位表示的亮度值区间为0~4095,则C1=511,C3=3583,C4=4096。针对整个第0帧,处理单元110计算每一区中包含几个像素,以及暗区所包含的第一像素数目相对亮区所包含的第二像素数目的比值shiftRatio。暗区相对亮区的像素数目的比值可使用公式(7)计算:
shiftRatio=pixelNumBin0/pixelNumBin3 (7)
其中,pixelNumBin0代表暗区的第一像素数目,以及pixelNumBin3代表亮区的第二像素数目。接着,处理单元110根据暗区相对亮区比值计算扩充倍数exp_times。当暗区相对亮区比值小于8时,可使用公式(8)计算扩充倍数exp_times。当暗区相对亮区比值大于或等于8时,可使用公式(9)计算扩充倍数exp_times。
exp_times=a x shiftRatio x shiftRatio+b x shiftRatio+c (8)
exp_times=d x shiftRatio x shiftRatio+e x shiftRatio+f (9)
其中,a、b、c、d、e以及f为浮点数。接着,处理单元110根据第0帧的帧统计信息所计算的上述比值shiftRatio以及第0帧的曝光设置(exposuresettings)计算后续处理第1帧数据所需的第一曝光参数(步骤S253)以及计算后续处理第2帧数据所需的第二曝光参数(步骤S233)。其中,前述曝光设置包括快门速度(shutter speed,sht)、模拟增益(analog gain,ag)以及数字增益(digital gain,dg),sht、ag及dg三者的乘积可为第0帧的曝光设置(exposuresettings)。第一曝光参数Para1以及第二曝光参数Para2可分别使用公式(10)以及公式(11)计算:
Para1=sht x ag x dg x exp_times/expValue (10)
Para2=sht x ag x dg x exp_times (11)
其中,expValue代表固定扩展值,其为第二曝光参数与第一曝光参数的比值,在要将12bit的LDR帧扩展并融合后输出为18bit的HDR帧的实施例中,固定扩展值expValue=64。
处理单元110在计算出第二曝光参数Para2后(步骤S233),将第0帧扩展至高动态范围空间(步骤S221),在步骤S221,计算扩展第0帧的第一扩展因子的范例虚拟码如下所示:
curveMapValNormal=curveTable_AVR[0]*sht*ag*dg+curveTable_AVR[1];
curveMapValHigh=curveTable_AVR[0]*Para2+curveTable_AVR[1];
slope_Normal=curveMapValHigh/curveMapValNormal;
其中,slope_Normal代表第0帧的第一扩展因子,curveTable_AVR[0]为关联于相机模块190的图像传感器的校准后的斜率因子,curveTable_AVR[1]为关联于相机模块190的图像传感器的校准后的y-截距因子,sht x ag x dg代表上述第0帧的曝光设置(其中,sht代表第0帧的快门速度,ag代表第0帧的模拟增益,以及dg代表第0帧的数字增益),Para2代表前述依据公式(11)所计算的第二曝光参数。处理单元110将第0帧中的每个像素的HSV值乘以该第一扩展因子slope_Normal,用以将第0帧数据扩展至高动态范围空间。
处理单元110在计算出第一曝光参数Para1后(步骤S253),指示相机模块控制器170依据计算出的第一曝光参数Para1所代表的曝光设置拍摄一个低曝光帧(以下称第1帧)并存储至帧缓存器130;此外,处理单元110在计算出第二曝光参数Para2后(步骤S233),指示相机模块控制器170依据计算出的第二曝光参数Para2所代表的曝光设置拍摄一个高曝光帧(以下称第2帧)并存储至帧缓存器130。处理单元110在计算出第一曝光参数Para1后(步骤S253)及第二曝光参数Para2后(步骤S233),计算第二扩展因子以将第1帧扩展至高动态范围(步骤S257)。在步骤S257,计算该第二扩展因子的范例虚拟码如下所示:
curveMapValLow=curveTable_AVR[0]*Para1+curveTable_AVR[1];
curveMapValHigh=curveTable_AVR[0]*Para2+curveTable_AVR[1];
slope_Low=curveMapValHigh/curveMapValLow;
其中,slope_Low代表第1帧的该第二扩展因子,curveTable_AVR[0]为关联于相机模块190的图像传感器的校准后的斜率因子(slope factor),curveTable_AVR[1]为关联于相机模块190的图像传感器的校准后的y-截距因子(y-intercept factor),Para1是在步骤S253依据公式(10)计算得到的第一曝光参数,Para2是在步骤S233依据公式(11)计算得到的第二曝光参数。处理单元110将第1帧中的每个像素的HSV值乘以该第二扩展因子slope_Low,用以将第1帧的数据扩展至高动态范围空间。
在步骤S259,对扩展后的第0帧、扩展后的第1帧及前述取得的第2帧的数据进行曝光补偿。详细而言,处理单元110使用第一曝光补偿方法修正扩展后第0帧中属于过高曝光的像素(saturate pixel)及过低曝光的像素(darkpixel),第一曝光补偿方法详言之为检测扩展后第0帧中属于过低曝光的像素(dark pixel),例如,如果一个像素的亮度值落入0至128x slope_Normal间,则过低曝光的像素,则使用第2帧中相同位置的原始亮度值取代扩展后第0帧检测到的该过低曝光像素的亮度值;第一曝光补偿方法更检测扩展后第0帧中属于过高曝光的像素(saturate pixel),例如,如果一个像素的亮度值落入3967x slope_Normal至4095之间,则过高曝光的像素,则使用扩展后第1帧中相同位置的亮度值取代扩展后第0帧检测到的过低曝光像素的亮度值。此外,处理单元110使用第二曝光补偿方法修正扩展后第1帧中属于过低曝光的像素(dark pixel),第二曝光补偿方法详言之为:检测扩展后第1帧中属于过低曝光的像素(dark pixel),例如,如果一个像素的亮度值落入0至128x slope_Low间,则是过低曝光的像素,则使用扩展后第0帧中相同位置的亮度值取代扩展后第1帧中检测到的过低曝光像素的亮度值。此外,处理单元110使用第三曝光补偿方法修正第2帧中属于过高曝光的像素(saturate pixel),第三曝光补偿方法详言之为:检测第2帧中过高曝光的像素(saturate pixel),例如,如果一个像素的亮度值落入3967至4095间则是过高曝光的像素,使用扩展后第0帧中相同位置的亮度值取代第2帧中检测到的过高曝光像素的亮度值。
处理单元110依据步骤S219所计算得到的第0帧中每个像素权重融合补偿后第0帧以及补偿后第1帧,用以产生第3帧,并且将第3帧存储至帧缓存器150(步骤S271)。在步骤S271,详细来说,当第0帧的一个像素的权重小于等于一阈值(例如为64),处理单元110将第0帧此像素的HSV值融合补偿后第1帧中相同位置像素的HSV值,用以产生第3帧中相同位置像素的HSV值。当第0帧的一个像素的权重大于该阈值,处理单元110直接将第0帧此像素的HSV值当作第3帧中相同位置像素的HSV值。图像融合的范例虚拟码如下所示:
其中,pixelweight[index1]代表第index1像素的权重,inputImg代表补偿后第1帧,refImg代表补偿后第0帧,以及dst代表第3帧。
处理单元110依据步骤S219所计算得到的第0帧中每个像素的权重融合第3帧以及补偿后的第2帧,用以产生第4帧,并且将第4帧存储至帧缓存器150(步骤S273)。第4帧为最终结果的高动态范围图像。在步骤S273,详细来说,当第0帧的一个像素的权重大于一阈值,处理单元110将第3帧中相同位置像素的HSV值融合补偿后第2帧中相同位置像素的HSV值,用以产生第4帧中相同位置像素的HSV值。当第0帧的一个像素的权重不大于该阈值,处理单元110直接将第3帧中相同位置像素的HSV值当作第4帧中相同位置像素的HSV值。图像融合的范例虚拟码如下所示:
其中,pixelweight[index1]代表第index1像素的权重,inputImg代表补偿后第2帧,refImg代表第3帧,以及dst代表第4帧。
本发明所提出的上述高动态范围图像产生方法及其装置利用正常曝光帧(如第0帧)帧内的亮区和暗区的像素数目比值以及该正常曝光帧的曝光设置计算出扩展因子,并依据计算出的扩展因子直接将其它不同曝光条件下拍摄的低动态范围帧LDR frame(如第1帧和第2帧)的像素值映射至高动态范围空间,而无需耗费大量硬件资源来标定相机响应函数(camera responsefunction),从而降低了功耗和成本。
虽然图1中包含了以上描述的元件,但不排除在不违反发明的精神下,使用更多其他的附加元件,已达成更佳的技术效果。此外,虽然图2、3的处理步骤采用特定的顺序来执行,但是在不违法发明精神的情况下,本领域技术人员可以在达到相同效果的前提下,修改这些步骤间的顺序,所以,本发明并不局限于仅使用如上所述的顺序。
虽然本发明使用以上实施例进行说明,但需要注意的是,这些描述并非用以限缩本发明。相反地,此发明涵盖了本领域技术人员显而易见的修改与相似设置。所以,申请权利要求范围须以最宽广的方式解释来包含所有显而易见的修改与相似设置。