具体实施方式
具有动态背光控制(DBLC)的新显示器
许多新显示板系统应用了动态背光控制(DBLC)功能的一些形式。这些功能允许进行功率节省和图像质量的控制。伴随改变背光水平的能力,需要来智能地调整背光水平和其它显示参数从而避免在图像质量上产生烦人的人工噪声(artifact)。
大多显示器制造商都关心显示板功率消耗的增加,这些功率消耗是与显示板所在平台如移动电话的功率消耗共享的。同样,显示器制造商正在所有显示模块中寻求减小背光功率消耗,包括传统RGB条纹系统。在此描述的技术应用到这些传统RGB条纹系统的同时,它们也可以应用到具有多基色(multiprimary)面板(例如RGBW)的新系统,这些系统具有比红、绿和蓝色更多的可能为不同的——彩色滤波器。当考虑在屏幕上显示给定图像的最优方式以最小化背光功率消耗,同时最小化由降低背光功率引起的对于用户可以注意到的视觉误差时,这些系统实际上展现了额外的自由度。
当然,如果背光功率总是在100%,则不会产生由于背光控制导致的误差。如果背光功率减小50%,产生图像并不困难,例如有些具有明亮的饱和色的区域,可能会产生一些对于用户可以注意到的视觉误差和人工噪声。当图像着色控制方法依靠光阀控制和背光功率的数量的智能合成来对显示屏幕的图像着色时,可能会希望考虑一种基于帧中的分离的像素的亮度“需要”的展开的统计方法来决定如何最优化地为图像数据的指定帧或多个帧设置背光功率。
图1示出了显示器100的实施例,其中应用了本申请的技术。显示系统的接口102可以应用于输入或产生图像数据。可选的输入伽玛模块104可以应用于显示系统,尤其如果显示器应用了需要伽玛调整的技术,例如LCD显示器。图像数据有两条路径:一个用于控制背光而另一个用于控制显示器。图像测量108可以收集某些图像数据统计以决定是否当前帧(或其一部分)是相同或相似的场景的部分或表现场景中的变化,该改变可能需要背光照度(illumination)的大变化。
Calc LED和增益函数模块110可以用于决定用于给定帧(或其一部分)的目标背光照度和决定平滑函数(可能来自一组合适的函数)以将背光照度从当前值变化到目标值,用这种办法最小化视觉人工噪声。延迟/衰减模块112可以提供进一步的背光信号的控制。这一进一步的控制可以反馈给背光122和后缩放模块114,如将进一步讨论的。
来自模块112的背光照度信号用于驱动背光122。可以认为背光122可以是可用的多种不同类型中的任一种,例如LED背光,CCFL背光或类似的背光。背光也可以构造成任何已知的构造,例如分离发射器的2-D阵列或一组边缘发光发射器或任何已知的构造。
图像数据也可以在成像通道中处理,如下面要讨论的,开始于输入伽玛模块104。GMA106可以提供从一个源色彩空间到目标色彩空间的色域映射,如果需要这种功能,例如,如果输入色彩数据为RGB且显示器120包括多基色或RGBW布置。后色彩转换处理可以通过后缩放模块114提供,如下面将进一步讨论的。如果数据将在显示器上进行子像素着色,则模块106可以包括可选的子像素着色处理(SPR)模块。如果显示器包括任一新的子像素重复组,如前面描述的多个专利申请中详述的,则可能发生这种情况。SPR处理在前面提及的引入作为参考的多个专利申请中被讨论。最后,在信号被送到显示器120之前在可选的输出伽玛模块118中处理图像数据,例如在显示器120上驱动分离的子像素。
虽然当前的发明基本上在此描述为应用到RGBW显示系统,也可以认为本发明的系统和技术可以通过合适的调整应用到多基色系统(例如RGBY,RGBC,CMYW,等等)。许多这样的系统可以输入传统的RGB图像数据并在这些多基色系统显示器上执行色域映射(GMA)操作(比如RGB到RGBW映射)。许多这样的系统可以使用提供提高视觉分辨率的机会的子像素着色(SPR)技术(例如尤其在如ClairVoyante开发的新的子像素布置上)。还可以认为本发明的技术不一定要依靠使用GMA或SPR处理,当前的技术也可以用于没有GMA或SPR的通用的RGB条纹显示系统。然而,应该知道,本技术可以在那些先进的多基色系统工作得很好且可以为除此之外的可能的传统RGB条纹显示器带来好处。
输入伽玛抖动
对于传统显示系统的改进可以在图像传输通道中早早地进行,早到输入伽玛处理。示例显示系统100可能用输入伽玛104开始处理输入图像数据。如大家熟知的,输入伽玛处理可以用于线性化输入图像数据202,通常采用输入伽玛LUT。然而,当对通过通道的数据流进行计算时显示系统经常会引入量化误差。在通道的输入侧引入一些抖动可以减少量化误差。在带有SPR(尤其带有如‘612申请公开的区域重复采样)的系统,形成图案的(patterned)输入抖动基本被滤除,以致减小的量化噪声不带副作用。
根据图2,可能处理多个伽玛曲线。这种情况下,为分别由载于LUT204的表206处理的具有功率系数为1.0、1.8、2.2和2.5的4个输入伽玛曲线。另一种情况,1.0表可以被复用器(未示出)代替以将输入选择到高位而将零补入低位。
一种折衷存在于非单一伽玛曲线的输入伽玛线性化后的处理通道的位深度中。位深度越大,线性数据表达得越精确。当然,这会导致门电路和容纳这些门电路的芯片开销增加。但特别的问题存在于非常暗的区域。通用做法是使用具有很低斜率的处于暗值(低值)的线性部分(section)以允许暗值的单一表达。后输入伽玛处理通道的位深度越低,线性部分应当越长(越高)以维持一对一的映射和单一表达。这会导致线性部分的值比期望的高,从而使图像的暗的非零部分变亮并减小对比度。当用高的位深度表示值时,线性部分会更短、斜率更低、更暗,这样来维持更高对比度。
另一个选择可通过在输入伽玛函数或表中选择两个或多个输入值来映射到相同的输出值来引入量化,从而选择在以一对一的代价损失时维护对比度和精度。这非一对一的映射可能在图像的暗区引入视觉人工噪声。在输入函数或表中使用更深的位深度然后在低的位深度后接抖动的量化可以避免这样的折衷。对每个伽玛功率曲线,表中存储一个额外的输出位,比后输入伽玛处理通道多一个位,它能用于完成抖动(例如空间抖动)。抖动的值在接下来的处理通道允许低位深度的同时保持原来的精度。
这样的抖动可以通过简单的棋盘图案实现,例如208和210。在一个实施例中,有用于每一功率曲线的一个表,相同曲线可以用于R、G和B,或无论输入数据格式怎样。由于这可以使用单独的地址解码器和可以分别用于R、G和B的表,可能要有分别用于R、G和B的存储器。如果这被证明是事实,不增加门电路以允许R、G和B表具有单独的值,则可以用它来做白色点调整。如果对于每个色彩(或色彩子集)有单独的表,则三个表为不同的可能性会允许使用它们来调整白色点设置。这样,允许系统校正,比如,LED背光的蓝色色调以及使图像的白色看起来更暖色些。
抖动棋盘图案从输入像素的x和y位置的低位计算得来。抖动用于输入像素,该输入像素最终导致显示器的特定子像素布置的相同的相位,比如在上面引入作为参考的‘574和‘575申请公开的RG/BW棋盘。为了防止发生这样的情况,可能在棋盘的一个相位上抖动输入R和B值,而在相反的相位上抖动G值,如图2中能见到的一样。当然希望根据显示板的子像素布置具有不同的抖动图案和对于一个或多个色彩有不同的抖动图案以防止这样的相位关系。
在公开的实施例中,R*G*B值从LUT回到12位值。通过将x和y位置的低位进行异或来得到偶/奇棋盘位。这些棋盘位加到12位值,有时候导致低位溢出到下一位。这一增加(增量)有时会导致整数溢出。这需要检测且结果应钳位到12位。12位值通过丢掉低位被截为11位。这11位值是来自输入伽玛模块的输出。
基于直方图的DBLC
另一传统显示器的改进可以采用下述方式发生:在图像数据上执行动态背光控制(DBLC)。拿示例RGBW系统来说,具有GMA的系统典型地具有RGB到RGBW的色域映射算法,该算法用于将白色和非饱和色转换为落入有效范围(0%-100%)的RGBW值。假设RGBW系统(或其它多基色显示器)的透射率为RGB条纹参考系统的两倍,在很多或绝大多数场合只需要50%的背光功率来表达那些非饱和色。
然而,高饱和输入RGB色彩映射到超出100%的RGBW值使得这些值无效或“超出色域”。纯色典型地映射到其中至少一个色彩通道达到200%的RGBW值。为了正确地着色这些纯色,数据必须同时压缩50%以达到有效的数据范围,背光功率可能加倍到100%。这一同时压缩数据值(它们变换为光阀透射率的度数)和增加背光值就是DBLC系统和算法怎样精确地重构和着色色彩;算法总是着眼于产生有效的数据值和调整背光水平以维持精确的照度值。
如果算法总是将数据值压缩50%并总是将背光值增加到100%,所有色彩都能精确着色但是没有任何功率节省的好处。为了节省背光能量,DBLC着眼于测量帧中的所有像素的RGBW数据值,然后确定最低的背光水平(和最大的数据扩展因子)以精确地着色即使是帧中最坏情况的色彩。通常当明亮的纯色如明亮的黄色出现在帧中时,背光可能趋于达到100%。当出现明亮的白色和明亮的非饱和色时,背光水平趋于达到50%。当出现暗的非饱和色时,背光水平趋于稍低于50%。
在一个实施例中,DBLC可能由两部分组成:第一部分测量或统计当前帧中所有像素的背光需要,第二部分做出背光决定并根据背光决定来增减数据值。如下面将要讨论的,测量有效地构成直方图数据结构然后通过遍历直方图数据结构做出背光决定。
测量和直方图产生
在本系统的一个实施例中,在一帧接一帧的基础上统计图像数据。可以期望这样的图像统计可以在图像处理系统的任何地方得到。这样,图像数据统计可以不对输入图像数据进行,无论输入图像数据是传统的收敛RGB数据还是任何其它格式。另外,当前系统不对任何可选的后GMA图像数据进行统计,例如图像数据进行了例如从RGB到RGBW的映射。再有,对进行了在显示器上着色处理的(可选的SOR)滤波的图像数据不进行统计。本发明的范围不局限于统计的精确放置和/或测量处理模块。
仅仅对一些例子,因为存在更少的输入基色(如RGB为3而RGBW为4),在输入数据上做测量需要更少的门电路。另一方面,在GMA之后进行测量需要更少的门电路,因为一些测量所需的计算已经进行了。另一方面,在SPR模块之后进行测量允许DBLC应用于在一个时刻仅更新一部分显示的系统。
在一个实施例中,分析图像数据的一个便利结构为直方图形式。可以期望其它任何已知的数据结构适合于背光和光阀系统控制目的且本发明的范畴不应当限于直方图或特别的形式以及这里讨论的直方图的应用。
当图像数据输入并处理过,显示系统可以在测量108进行统计(当然,如上面讨论的,测量108的位置可以在任何给定显示系统中变化)。由于考虑了每一像素图像,这样的像素可以以“段(bin)”计数(或处理),其中以这样的段计数和/或处理相似的像素。
这样的图像数据的假定帧的直方图和段集合的例子见于图3A。图3A是段计数相对于所需的背光分别在y和x轴上的图。通常来说,图像数据可能在逐个像素的基础上进行分析。然后决定这样像素要求(或需要)什么水平的背光照度。在例如全红像素值(也就是R=255,G=B=0)的情况下,则这一全红像素要求/需要背光完全打开。如果背光不是完全打开的,则这一全红像素在显示器上重现时会出现误差。
如图3A所示的,x轴上离原点最远的段是要求背光为100%的段。这样的全红像素数据将段计数器增加一,该段保持要求背光为100%图像数据值计数的数值。虽然示出了16个不同的段,但段的数目是可变的。事实上,如果背光具有离散数目的照度值(如256),可能有如离散照度水平一样多的段(256段)。
对于另外的实施例,段的计数器可能被限于某一水平(不对帧中所有可能的图像数据值提供全计数)。例如,假定讨论中的显示器是具有超过300K图像数据值的VGA屏,则对具有例如16段的直方图,每个段可能在丢掉在那个值的任何图像数据点之前被限于某一数(比如16K值)。由于16K大约为VGA的整帧的图像数据值的总数的5%,这样会有足够数据来做出背光值和光阀值的智能选择。
重新参考图3A,可以创建直方图阵列hist[i],其中索引i与背光水平要求成比例,并且在一个实施例中将背光范围分成一系列非重叠的种类或“背光段”。因此每个单元hist[i]目标在于存储对于给定帧中落在第i个背光段范围内的像素数成比例的值。
为了填充各个段,要应用将给定像素值和背光亮度值相关联的度量(metric)。在这样度量的实施例中,对于正显示的像素的最小的背光需求BL-req可以被认为与其分量R,G,B,W值的最大值成比例。具有最大值的通道如下规定背光需求:
仅仅作为例子,在线性RGBW空间设置如下:
BL_req=max(R,G,B,W)/2
当给定帧中每个像素都处理过时,每一像素的最小背光需求被计算并用于选择合适的背光段并如下增加段计数值:
背光段i=(BL_req/最大背光值)*(段的总数)
如果当前像素落在由背光段i定义的类别中,增加背光段的计数值:
hist[i]=hist[i]+1
如上所讨论的,给定段的每个计数器可以不被限制或限于对于要显示的当前图像的背光需求的有意义的测量的特定值。在一个实施例中,图像中像素的总数目的2-5%的限制范围是合理的。当然,其它的限制范围也是可能的。
虽然上述的BL-req等式对给定的像素给出了一个示例的背光需求的测量,别的测量也是可能的。另一实施例中,可能应用色彩权重项,可以在基于测量(如max(R,G,B,W)/2)来计算背光需求的之前或之后。例如,色彩通道数据R,G,B,W可以分别乘以包含例如小于1的值组成的色彩权重项,RWT、GWT和BWT,由此纯色的背光需求可以减小到小于100%。当然,这可能导致某些有意的色彩照度下降,但色彩权重可以作为如期望的调整DBLC系统或算法以或多或少地进行功率节省的可选特性。
例如,在显示蓝色时的误差通常对于人类视觉系统难以察觉。将BWT值设为50%可以允许背光下降50%低于所需以正确地显示蓝色像素。蓝值可能需要被缩放或被非饱和以使它们回到色域,但在蓝色的情况下,这种误差可能不会太明显。在没有引入不可接受的误差的情况下,红和绿要缩放得少一些,接近100%。
另外,其它色彩(比如黄色,红紫色或蓝绿色)的权重项(比如分别为YWT,MWT,CWT)可以如希望的或多或少地保守。例如,在所有纯色中为最亮的且对于可觉察照度误差最易被感受到的黄色需要更保守。黄色权重可能进一步提高红色权重的值,这样亮红和亮绿都出现时提高了背光需求。作为另一选择,白色权重项,WWT,可以被包括并典型地设置为单位一(unity),但对于积极设置被调整为稍小于1以使背光水平小于50%,积极设置允许在峰值白色照度存在一定的损失。这样,在一个实施例中,得到的色彩权重的表达(给定于线性RGBW空间)和背光需求计算如下:
R=R*(RWT+(YWT-RWT))*G (其中YWT>=RWT)
G=G*GWT
B=B*GWT
W=W*WWT
BL_req=max(R,G,B,W)/2
直方图移动和背光决定
一旦直方图(或其它合适的数据结构)对于当前图像帧已经完成,DBLC系统就使用这个结构及其数据来智能设置背光照度以寻求最小化背光功率消耗的目标,同时最小化至少为用户所接受的图像着色误差量。在一个实施例中,首先分析表示最高背光功率需求的段以确定是否在没有明显危害图像帧中大多数像素的背光需要情况下背光功率能够被减小到低于最大值的水平。当然,应该知道,段或数据处理的顺序可以改变而不脱离本发明的范畴。
在处理直方图中的数据的过程中,当误差测量达到某个或某些可能的阈值时,可能维持误差测量以用于停止进一步的处理。这个或这些阈值可以根据人类视觉规律来试探性决定或通过用户在改变背光照度的情况下浏览图像的经验性选择而定。
在一个实施例中,直方图计数值可以用于产生误差函数,E_sum,如图3B中可以看到的一样,该误差函数可用于累积可觉察的照度误差量,该误差量是在从表示最高的背光功率需求的类型的段持续到表示最低的背光功率需求的类型的段中的每个段的背光功率需求被主动忽视时而引入的。另一选择,从最小背光功率需求的段持续到最高背光功率需求的段维持和处理减小误差的累积直到误差降低到特定阈值。
在从直方图的最高功率需求段后向移动的情况下,如果可觉察的累积误差、与hist[i]关联的E_sum[i]超过可接受的误差阈值TH1,则段i的相关的背光需求要保存且背光决定从索引i得出。
在一个实施例中,如果移动持续到下一个最低的功率段,可觉察的累积误差函数E_sum[i]可以考虑折衷的像素数目。另外,也可以包括乘法混合因子(典型地大于1)来表示当移向较低背光段移动时可觉察误差的非线性增加。
重新参考图3B,仅仅作为示例的说明,可以看到在段i=14或i=15没有像素,因此DBLC可以使背光功率安全地回到至少数字值232(在这个例子中超出可能的255)而没有视觉误差引入。现在,从段i=13开始,在段的某处的少量采样像素要求或需要背光功率水平,这个例子中在数字值208和231之间的某处。如可以看到的,误差水平低于阈值,因此DBLC继续考虑更低的背光功率的可能性。DBLC持续这种方式直到当误差阈值最终被超过时的段i=10。在一个实施例中,背光功率的选择可能在段i=10的右手侧被选择,在这个例子中是数字值i=176。对误差来说,这个可能是“安全”的选择,对于功率节省来说,这个选择可能更加地积极。
一旦超过误差阈值,DBLC会继续进一步的处理来从段索引i中决定背光值。附加的处理会用附加的fine_adjust_offset函数用于选择由这个段表示的背光值范围中的仅一个背光水平。在一个实施例中,为零的fine_adjust_offset会将背光值保持在范围的下限,fine_adjust_offset函数的最大值加上使背光值达到范围的上限的分量。
E_sum[hist_size]=0
For i=hist_size-1 down to 0 (hist_size是段的总数)
E_sum[i]=(compound_factor*E_sum[i+1])+hist[i]
(compound factor可能大于或等于1)
If E_sum[i]>=TH1 then
Backlight=i/(hist size)*maximum backlight value+fine_adjust_offset
假定E_sum[i]超过阈值TH1,并推定反向移动的前一E_sum[i+1](在上面的例子中)不超过阈值,那么E_sum趋势线(trend line)如图4A所示的从E_sum[i+1]划到E_sum[i]。fine_adjust_offset理论上与E_sum趋线穿过阈值的点匹配。理想的fine_adjust_offset可以如下计算:
fine_adjust_offset=((E_sum[i]-TH1)/(E_sum[i]-E_sum[i+1]))*(最大背光值/段数)
图4A描述了微调偏置处理的一个实施例。如可以看到的一样,两条线,其中的一条线由两个相邻的段404和409的下边界点定义,而第二条线由TH1误差阈值406来定义,可以同时求解且截点408会落到x轴以决定微调偏置409。
然而可以有多个简化用以使fine_adjust_offset在硬件中计算更容易并且产生理想值的合理逼近。一个可能的简化会采用由E_sum[i]-TH1决定的剩余误差并将其与可能为2的幂的第二阈值TH2相比。这种情况下,商很容易计算且类似于理想值的fine_adjust_offset产生于下:
fine_adjust_offset=((E_sum[i]-TH1)/TH2*(最大背光值/段数)
图4B还描述了微调偏置处理的另一实施例。如可以看到的,两条线,其中一条线由两个相邻的段(假定两个误差阈值为TH1和TH2测量的)的边界点422和424定义,而第二条线由E_sum[i]定义,可以同时求解且截点430会降到x轴以决定微调偏置432。
对背光的内部限定允许从25%到100%的范围。在这个范围中,背光决定可能会进一步钳位到向由MNBL和MXBL寄存器设置决定的下限和上限钳位。如果图像全黑(全零数据),则最小的背光设置也被忽略且DBLC背光水平达到零。
背光=max(背光,MNBL,25%)或当图像全黑时为0%
背光=min(背光,MXBL,100%)
测量模块
下面描述在此示出的用于处理模块的可能的实施例。比如,图5描述了测量模块108的一个实施例。图像数据可能在模块502中输入,例如RGBW(或其它格式)。RGB和W值可以被(在506)截到它们的高(比如8)位。这些高位可能包括色域外(OOG)的位,因此色域外的值仍被表示。假如希望全局可变缩放,可以对每个像素计算最大的RGBW截值(在508)而对于整个图像可以在8位gpeakval寄存器(在514)中累积(在512)全局最大值。
如果输入值被截,峰值不再是全黑图像的可靠的指示。例如通过将所有像素中所有基色的所有位进行或运算或用其它方式可以检测它(在504)。在下面的伪代码中,图像中所有像素的基色的或运算可以被存储在下面将描述的名字为black_detect的11位寄存器中并在calc LED和增益模块中检测它为零。
在截值后,RGBW值可以由单独的色彩权重分别缩放(在510)。在一个实施例中,R乘以0.85、G乘以0.70、B乘以0.50、W乘以1.00。这可以通过将每个基色乘以0到256之间的寄存器值然后向右移位8位而有效地得到。Y权重值加权从基色色彩中分离出来的黄色值。这可以用作作为绿色值函数的红色权重值的修正。在这个例子中,基色值现在已经都被截为8位,这只需要8位的计算。
可以对每个像素选择加权后的4个RGBW基色值的最大值(在516),然后对于整帧的最大的加权后的基色可以在8位的wpeakval寄存器中(在516,518和522)进行累积。
加权后的RGBW的最大值也可以用于在直方图中(在520和524)进行累积计数。最大的加权后的RGBW值可以通过抽取高4位而被转换为索引。这可以实现具有16段的直方图,即使由于我们没有将LED功率设置为低于25%而低4段不会被执行。被索引的段被加1并被钳位到截止(cutoff)最大值。
截止最大值可能是2的幂(减去1)。比如,如果直方图的计数限制为14位,该截止应该为16K。
下面是代表仅仅是作为示例的测量模块的伪代码(以Lua代码)。该仿真允许将直方图的大小设为hist_bits,在伽玛传输通道中的位数设为GAMBITS(当前为11),在权值中的位数设为SBITS(8),并且在直方图计数器中的位数设为截止(14)。在硬件的任何特定实施方式中这些参数可以是固定的位的大小:
function dohisto(x,y)--扫描一个像素并且累计统计值
local r,g,b,w=spr.fetch(pipeline,x,y)--获取后GMA数据
--将所有像素中所有基色的所有位进行或运算
black_detect=spr.bor(black_detect,r,g,b,w)
r=math.floor(r/(2^(GAMBITS+1-SBITS)))--只取出高8位
g=math.floor(g/(2^(GAMBITS+1-SBITS)))
b=math.floor(b/(2^(GAMBITS+1-SBITS)))
w=math.floor(w/(2^(GAMBITS+1-SBITS)))
local peak=math.max(r,g,b,w)
gpeakval=math.max(gpeakval,peak) --记录全局最大值
if weighted_color==1 then --加权公式:
--Rweight增加以影响黄色
local Xweight=Rweight+((Yweight-Rweight)*g/(2^SBITS))
r=math.floor(r*Xweight/256)
g=math.floor(g*Gweight/256)
b=math.floor(b*Bweight/256)
w=math.floor(w*Wweight/256)
end
local maxp=math.max(r,g,b,w)
wpeakval=math.max(wpeakval,maxp)--记录加权的最大值
--建maxp值的直方图
--maxp的高hist_bits位为索引
local i=math.floor(maxp/(2^(SBITS-hist_bits)))
hist[i]=math.min(cutoff,hist[i]+1)-对其计数但钳位
end-函数dohisto
Calc LED和增益模块
在这示意实施例中,Calc LED和增益模块110,如图6所示,使用测量模块在一帧中收集的统计值并在垂直回扫(retrace)时间中执行计算。
直方图表被扫描(在602)来计算修改的峰值(在604)。直方图的段从最高开始向下被加起来直到其和超过命名为THH1的值。该和在每一个循环中可以通过将其之前值(previous value)乘以小的在1.0附近的数来复合(compound)。来自CMP寄存器的3位固定点片段可以用来设置该复合因子。3个比特允许将以前的和乘以介于1.0和1.875之间的8个值。
直方图中的计数器可以有固定的位数,典型地为14从而可以不能计数到高于(2^14)或16383。当直方图计数器达到这个界限时,它停止计数并且总是保持这个最大值。这个最大值在伪代码执行中被叫做“截止”。直方图阈值是介于0和这个截止之间的数。为0的THH1值是保守的并且将趋于选择高的背光值。更大的THH1值更积极并且将趋于选择较低的背光值以节省功耗。全段可以停止寻找并设置功耗水平。
在一个实施例中(图7),选择的直方图索引(在702)可以被用来计算新的峰值(如712和714表示的)。然而,如果只用直方图索引,则只有16个(或hist_size可以是的任何值)值可以被选择。可以用下述方式构成峰值的低位:当直方图的搜索停止时,和(704)总是比阈值(706)大。从和中减去阈值则将产生介于1和截止+1之间的值,如果复合乘数大则可能更大。减法的结果被命名为THH2(在708)的移位计数器向右移位。如果复合乘数是1.0并且THH1大,则10位的THH2值将会导致4位的数,该4位的数能被用作填到新peakval的低4位。这些设置的一些组合能引起这个值溢出,因此经THH2右移的结果必须被钳位到15(0x0f)(在710)这个最大值。在一个实施例中,可能有一些在THH1,THH2和复合乘数CMP的值之间的相互作用。例如,随着复合乘数值的增大或THH1值的减小,THH2值应当增大(例如不大于12或一些其它合适的值)。
对于替代的实施例,对更暗的色彩(例如THL)使用与那些更亮的色彩(例如THH)不同的阈值可能有优势。变量THH1和THH2在检查半路点之上的直方图段时被使用。变量TH1和TH2被用在半路点之下的直方图中。执行这个的Lua代码是下面的docalc函数的一部分。
在当峰值大小(SBITS)等于LED功率设置的大小(LEDBITS)的情况时,结果的峰值可以直接作为LED功率设置使用。
作为可选的实施例,希望有一种方法强制LED功率为固定值。这个特点可能对于硬件测试或产生要求的功耗水平是有用的。
如果LED功率在四分之一以下,它可能上升回到四分之一设置。当图像是黑色时,如由来自测量模块的black_detect bit指示的,LED功率可以被强制为1。
function docalc()--计算垂直回扫中的LEDy和增益
function docalc()--计算垂直回扫中的LEDy和增益
local hpeakval=wpeakval--如果hist_ena==0则缺省
if hist_ena==1 then--使用直方图来进一步减小功率
local sum=0
local hist_thresh1,hist_thresh2=THH1*1024+63,2^(THH2+4)
for i=HISTSIZE-1,0,-1 do
--累加以前的段,将段复合起来
sum=sum+math.floor(sum*(CMP+8)/8)+hist[i]
if sum>=hist_thresh 1 then --如果它穿越阈值
--新peakval是索引加上低位
Hpeakval=i*2^(SBITS-HISTBITS) --索引为高位
--低位来自和的余量
Local lower=math.floor((sum-hist_hresh1)/hist_thresh2)
lower=math.min(2^(SBIT-HISTBITS))-1,lower)
hpeakval=hpeakval+lower
break
end --如果和超过阈值
ifi==(2^(HISTBITS-1))then --切换到较低阈值
hist_thresh1,hist_thresh2=THL1*1024+63,2^(THL2+4)
end
end--对于所有直方图段,从顶至底
end --结束hist_ena
--转换峰值至LED功率水平
LEDy=hpeakval --LED值只是hpeakval
LEDy=math.max(MNBL,LEDy) --钳位在25%(缺省)功率水平
LEDy=math.min(MNBL,LEDy) --并且在最大水平
if(black_detect==0)then --使用特殊的黑色检测器
LEDy=1 --如果图像为黑色,几乎为0
end
if DBLC==0 then --允许强制功率为固定水平
LEDy=FXBL
end
end-docalc
衰减延迟模块
当背光亮度中的较大改变和补偿LCD值发生时,暂时的人工噪声可以是可见的。当图像的给定部分从一个帧到另一个帧改变亮度或饱和度,使得期望改变背光亮度为更亮或者更暗时,该图像的另一部分可能没有改变。从而,背光亮度中的改变可能伴随着LCD值的相反变化。然而,虽然LCD被命令立刻改变,但是液晶材料的实际响应缓慢响应。这可能产生一种可能造成视觉的亮和暗“闪烁”的光滞后情况。例如,考虑当背光亮度从低到高时,LCD透射命令从高值到低值来保持同样的色彩/亮度给观看者。类似地,当背光亮度从高到低时,LCD透射命令从低值到高值来保持同样的色彩/亮度给观看者。然而,LCD透射的实际响应可能是慢的,典型地展示一种近似对数渐进方法给新LCD透射命令值。LCD透射的实际响应和背光亮度之间的差异可能造成可见的暂时的色彩/亮度误差。
这些视觉影响之前在共有的PCT/US2007/069933(‘933 PCT申请)中已被描述,在此引入作为参考。本申请的图8和9在那个PCT参考中分别被图28和29公开。
对数延迟算法非常简单,它使用之前值(previous value)和下一值(next value)的加权平均并且用该结果代替之前值。这个最简单的形式是previous=(previous+next)/2,当previous和next之间的差是8bit数时,这将在最大8步中收敛到新值上。这是“二进制衰减”公式,因为它在每一步移动剩下距离的一半。更通用的形式是加权(weight)对数衰减:previous=(previous*(1-weight)+next*weight)。如果权重值是二分之一,这正好和前面的公式一样。在整数(硬件)环境中,你将不得不将权重表示为定点二进制数。如果在权重寄存器中位数是WBITS并且WMUL=2WBITS,则公式为:
previous=(previous*(WMUL-weight)+next*weight)+round)/WMUL
(其中weight是从1到WMUL的值。Weight=WMUL/2是二进制衰减情况)
当在执行整数算法时,上述公式有几个问题。如果循环变量(roundvariable)有零的值,则该公式从不会收敛在比之前值(previous value)高的恒定的下一值(next value)上。如果循环变量是WMUL-1,则该公式不会收敛在比之前值低的恒定的下一值上。基于之前值和下一值的差来将解设置循环值:
if next>previous then
round=WMUL-1
else
round=0
end
如果预先做测试,则该公式在任一方向正确收敛。在图8中,比较器(有输入形式805和803)将下一值和来自之前锁存器803的输出相比较,并且当下一值更大时选择WMUL-1,当下一值更小时选择0。上述公式的另一问题是它不能步进(step in)LED功率水平的片段,因此衰减的斜率也绝不会变成小于1.0。解决方法是加额外的比特到从帧到帧存储但从不发送给LED背光的之前值上。如果位数是XBITS并且XMUL=2XBITS,则公式变成:
previous=(previous*(WMUL-weight)+next*XMUL*weight+round)/WMUL
之前的锁存器803现在可以足够大来存储XBITS额外比特。由于下一值输入没有这些比特,可以在比较器中将下一值输入和之前锁存比较之前通过桶形移位器805对下一值输入进行修改。但是输出到LED背光控制器的值现在是:
previous>>XBITS
下面,可以进行另外的测试来比较next>previous,其可以在(next<<XBITS)>previous时进行。
将XBITS加一可能增加大概5帧时间到有小权重的大改变的响应。当weight等于2/15时,XBITS=0,从0衰减到127大概花26帧的时间。如果XBITS=4,则衰减花46帧时间。
注意在上述公式中有许多最优化。当然,被WMUL除是右移位(806)。两个乘法在大小上可以是(LEDBITS+XBITS)*WBITS,但是既然next*XMUL的低位可以是零,这个乘数可以只是在大小上是(LEDBITS)*WBITS,然后左移。(WMUL-weight)的值能通过在权重值中反转每个比特来容易地计算。
考虑到门电路的数量,权重值中的位数可以被减少。这只减少我们不得不从其中选择的不同衰减率的数目。例如,如果权重值只有4位,则只有从16个权重值中选择,循环值将被设成15以收敛起来,并且乘法器将只要乘以4位的值并且丢弃后面的4位。注意这在衰减斜率上没有影响,只有XBIT对衰减斜率有影响。
由于LCD关闭器(shutter)当上升时比当下降时以不同的速率收敛到新值,有两个单独的寄存器包含与下降分开的上升的衰减速率是可能的(例如810和811)。既然循环值已经基于改变的方向被计算,权重值可以基于相同的测试结果来从两个不同的寄存器中选择。
背光值中任何改变的衰减可能有两个原因。一个是当输入图像快速改变时为了减少闪烁。另一个是当他们被大量改变时补偿LCD关闭器的慢响应。为了实现二者,图9示出包含两个单独的衰减模块908和914的衰减延迟模块的可能的实施例,每一个衰减模块和上面描述的一样。LED功率水平被CALC模块902计算并被发送到衰减模块908和914。每一个衰减模块可以有它自己可设的、分别用于上和下衰减的寄存器904,906和910,912。来自衰减模块中的一个的输出可以到背光控制916。来自第二衰减模块的输出在被INVLUT918反转后可以到X/XI模块918来影响系统的其余LCD路径。注意两个衰减模块是衰减LED功率值,其趋向于比上面描述的INVy LUT值或伽玛传输通道中的值具有更少的位。反转第二衰减模块的输出以在X/XL模块中使用是可能的。
如在‘933 PCT申请中的进一步描述,X/XI可以作为标准化函数来执行。对于用于RGB到RGBW显示系统的示例,首先通过输入伽玛函数之后的每个输入的RGB值的亮度和从背光阵列的给定像素可用的RGB光的实际数量之间的关系来改变输入图像RGB数据,如由背光内插函数提供的。这个改变通过比率X/XL在X/XL函数中实现,这里X是R,G,或B的输入值,XL是在RL,GL或BL的那个像素的背光亮度值。从而给定的RGB到RGBW的色域映射算法可以有输入值R/RL,G/GL,B/BL。
尽管这个设计的所有灵活性,仍然期望对不同的应用有不同的衰减率。例如,幻灯片显示可能要求快的衰减率而电影需要慢的衰减率。如果系统被告知现在被用来显示什么,衰减率能被改变,但是这个信息不是总被传送。另一个要使用的可能的解决方法是自适应转换速率,如图10所示。自适应权重可以在1004中被计算。转换速率从之前和下一LCD背光功率速率之间的差计算。
weight=math.floor(math.abs(next-previous/XMUL)/(2^(LEDBITS-WBITS))))+1
上述权重计算可以采用之前和下一LED值之间的差的绝对值。只使用结果的高位是可能的。1可能被加上,这样零权重可能不被选择,这可以避免收敛在新LED设置上。结果权重现在用于在LED和LED衰减模块上的上/下权重。这可能大大减小整个延迟/衰减模块中门电路的数目并且将它简化到如图10的结构。
一旦LED功率有该衰减值,它可以被反转来为X/XI模块产生乘法器。这可以在预先计算的反转LUT中完成。既然该值的第一个四分之一可以是固定值,硬件的一些节省可以通过将它们作为特殊情况它们并使LUT更小来实现。当LED功率为零时,反转值可以是零。对于四分之一功率值,反转值可以是:
INVy=math.floor(LEDMAX*INVMUL/((LEDquart+1)*2))
当LEDMAX=255,INVMUL=256并且LEDquart=63时,则INVy=510(虽然511也是合理的)。对于反转表的其余部分,该值可以是:
OverXL[LEDy]=math.floor(LEDMAX*INVMUL/(LEDy*2))
LEDy是LED功率水平,典型地介于64和255之间。可能注意到这些是介于510和128之间的值。高位可以始终是开,这样可以允许表格大小的减小。
全局峰值(globle peak value)可以用来为后缩放模块计算可变的gmin值。首先,可能预测图像在X/XI缩放后有多远将会是OOG。这可以通过将gpeakval乘以INVy(并右移8位)并在vpeakval中存储这个值来实现。
如果vpeakval值比SMAX大(127有8位LED设置),则图像中的一些像素可以是OOG并且计算的低位指示最远去OOG有多远。这个值可以被线性内插来产生介于256(1.0预缩放因子)和128(1/2预缩放因子)之间的var_gain值。该结果可以被后缩放器使用以将饱和色乘以介于1和1/2之间的值而将其大部分带回到色域中。
在一个实施例中,如果gmin值是被线性计算的,该后缩放器可以不将所有色彩带回到色域中。这可能对全饱和色给出正确答案,并对非饱和色的边缘给出正确答案,但是可能由稍微高的值对之间的色彩缩放。一个实施例可以使用“校正”公式但是它需要除法,或查找表和乘法。然而,其他实施例可以使用更低成本的近似法。下面的第一行是当前的用于计算var_gmin的线性公式,下面的第二行代表“校正”公式。
var_gmin=256-math.floor(128*(vpeakval-SMAX-1)/(SMAX+1))
var_gmin=math.floor(255*(SMAX+1)/vpeakval)
既然这个可以使用更少的门电路,这可能是希望的。这可能留下一些色彩”OOG但是这些OOG色彩可以在最后通过可以是后缩放器的可选部分的色域钳位模块抓住。
后缩放模块
在一些实施例中,可能引入涉及通过不同数量对值进行缩放的模块。例如,基于饱和度的预缩放器可以向下缩放饱和色来保持它们在色域中。DBLC设计中的X/XL模块通过和背光强度相关的值向上或向下缩放像素值。GMA经常引入向下缩放色域外的色彩的色域钳位模块。这些模块的每一个可以将3或4个像素基色值乘以缩放因子。像素值通常相当大,为11或12位宽。这些缩放因子通常是稍微小一些,在8或9位。在具有单独预缩放器、X/XL模块和色域钳位器的显示器中,这些步骤的每一步可以使用许多门电路来执行乘法器。
当前的后缩放器可以通过在末端的一个组合来代替所有这些大的乘法器。这些缩放因子结合成单个的缩放因子并且在后缩放器中每个基色只需要大的乘法器。将这些缩放因子结合在一起可能也需要乘法器,但是这些可以是小一些的8×8位的乘法器并且这些计算每个像素只做一次,而不是在每个像素中每个基色一次。另外,优化可以减掉这些缩放因子乘运算中的一些并且用简单的比较代替它们。
可能有具备一些最优化的后缩放器的许多不同的实施例以允许用简单的最小函数来取代乘法器。这些最优化可以工作于例如正被向下缩放的亮图像。对于每个积极模式和在X/XL中被向上缩放的暗图像,其他不同的优化也是可能的。例如,图11B示出了一个实施例,采用更少的乘法器和最小函数来充分执行如图11所示的同样操作。
在一个实施例中,这些最优化中的一些可以根据若干假设来完成。例如,一个假设可以是不使用50%以下的背光设置。另一个假设可以是不在50%以下的图像上使用积极模式。还有一个假设可以是在暗图像上使用硬钳位并且接受色调误差。
在一个实施例中,如下所述,在暗色上有可能具有更好的性能。将所有的增益项(除了非线性)看作是1附近的缩放因子。将它们所有乘在一起产生单个缩放因子,这和分别将每一项乘以像素是一样的。下面乘运算的每一个通常后来被256除来达到使定点二进制缩放因子再在1附近的结果。
基于饱和度的缩放是对OOG值的一个响应。当前,饱和度在输入伽玛以后从输入RGB值计算。Calc Sat增益模块计算增益,基本和之前预缩放模块做的方式一样。这样的基于饱和度的缩放在共有PCT/US2006/040272(‘272PCT申请)中进行了讨论,在此引入作为参考。
基于饱和度的预缩放
正如在‘272 PCT申请中讨论的预缩减的一个实施例,不将输入RGB值缩减固定量,而是缩减作为饱和度函数的量。有几个适合的饱和度函数的不同实施例,例如,当饱和度接近0时具有接近1.0的值的函数具有如下优势:将输入RGB白色值近似映射到输出RGBW白色值。这比上面的可能达不到最大可能白色值的预缩减算法更具优势。在另一个实施例里,最大值可能小于1.0,以减小同时的照度对比度误差。当饱和度处于最大值时,饱和度函数会降低至某个百分比的Pmax。如果该Pmax值大于M2,即W的亮度与显示器中的R+G+B子像素的亮度和的比率,就会出现一些OOG色彩。这样,仍然需要使用如上所述的色域钳位模块。
该饱和度函数的一个可能的曲线是高斯曲线,但这在计算上难于在硬件中实现。直线可能是合适的,分段线性函数也会产生令人满意的图像。将来自该函数的值乘以输入RGB值。这样,乘以1.0不会引起具有低饱和度的输入值的缩减,乘以Pmax或小于1的其它分数会降低具有高饱和度的输入值。所有这些乘以分数值的乘法都可以通过乘以定点二进制数字并接着进行适当的向右移位从而在硬件中实现。通过移位和相加实现乘法的其它方法也作为本发明的范围的一部分包括进来。
饱和度可以认为是距离灰度线的垂直距离,通常在色域的表面缩放到从0到1.0的范围。虽然饱和度计算的任何数值都可以被使用,但业内有公知的近似来计算该数值,例如,
饱和度=(max(r,g,b)-min(r,g,b))/max(r,g,b)
得到的饱和度值可以接着用来产生如图17的曲线中的一个。例如,可以通过下述等式产生具有0.75的Pmax值的分段线性线1703:
预缩减=min(1,1-((饱和度-0.25)/(1-0.25)))。
然后输入的红色绿色和蓝色值分别乘以上述任一实施例中产生的预缩减值:
R=R*预缩减
G=G*预缩减,以及
B=B*预缩减。
最后,可以将这些R,G和B值通过GMA算法将RGB转换为RGBW。
在另一个实施例中,该预缩减函数也可以是色调的函数。在上述引入作为参考的专利申请中,公开了可用于这个目的的色调值的计算方法。例如,脸部和其它皮肤色调的色调范围很窄,从而对具备这些特征的图像使用不同的预缩减函数可能更具优势。
在另一个实施例中,该预缩减饱和度函数也可以是亮度的函数。因此对于给定的饱和度的值,会基于接近黑色的程度进行缩放而不是使用恒定的缩放值。这就像伽玛函数,其允许将输出像素分布更逼近(或更远离)RGBW色域外壳的地方。还应该意识到预缩减函数也可以基于色度,饱和度和亮度的一些组合的函数。
在上述讨论中,一个实施例可以对所有基色仅具有一个预缩减函数。然而,期望对输入R、G和B基色的每个(或子集)具有单独的预缩减函数。这可以增加色彩校正或调整显示的白色点的能力。通过分别为红色、绿色和蓝色改变曲线的左上端(从1.0缩减为较小值),可以独立于混合色彩点中的改变而改变白色点。
如上面讨论的,对于基色具有单独的控制或调整,使得能够调整混合色彩(例如黄色、蓝绿色、红紫色等)的色度。例如,如果红色和绿色具有单独的Pmax控制且绿色Pmax控制比红色Pmax值低25%,则黄色点会朝红色基色偏移。进一步地,如果曲线在Pmax附近足够陡峭,则可以不影响显示的白色点而实现黄色中的这个改变。
预缩减模块可以位于输入伽玛和CaIC RwGwBw模块之间。也可以将预缩减模块放在图像处理系统的其它位置,例如位于输入伽玛模块之前。由于输入伽玛前的值通常具有较少的位,因此基于这种设计能够有利于减少硬件门电路的数量。另外,可以将预缩减函数和输入伽玛函数相结合,在一个步骤中执行伽玛校正和预缩减。由于输入伽玛函数通常作为预计算的查找表来实现,则有可能使用高级算法,例如高斯曲线,而不用付出更复杂的硬件的代价。
基于饱和度的后缩放
后缩放模块相对于以往的预缩放模块的一个优点在于,后缩放器可以使用其它模块中计算的值。预缩放器有存储在寄存器中的固定的GMIN缩放参数。这个固定的值能够用来将图象中明亮的饱和色按比例缩小,而当图像没有任何明亮的饱和色时,不改变其特性。在本实施例中,图5中的测量模块108计算GPEAKVAL154,其记录最亮的饱和色有多亮。在图6中,CALC VAR-GMIN模块612计算最小的影响GIMN值,其将最亮的饱和色带入色域中。这个VAR-GMIN值可以修饰比固定的GMIN值小的图像。该VAR-GMIN值代替该固定GMIN值,用于图11中的CALC SAT GAIN模块1106。另一方面,对于某些申请,配置寄存器中的一位允许在该固定GMIN值和该VAR-GMIN值间转换。
在使用这一后缩放的显示系统的一个实施例中,最好是使用这样后缩放单元来对图像数据值进行缩放,作为来自所述照度确定单元的背光照度、图象数据值的饱和度和色域外校正、使用单个缩放因子的函数。该单个缩放因子可以是符合此处描述的许多缩放需求的函数。这些缩放需求的一部分可以选自一组缩放条件,例如基于饱和度的缩放、色域外缩放和非线性缩放。当然,同样也可以要求和加入其它缩放需求。如此处进一步描述地,非线性缩放模块可以用来增强暗色值,并依赖于图像数据值的照度值。一旦这些缩放需求被确定,有很多方法将其结合,来产生这样的单个缩放因子,包括将其相乘或取其中最小值或将其组合。
然而如另一实施例所述的,如果在通道中更早进行一些INVy计算,则图11中的乘法器1130可能被简单的最小函数代替,该最小函数使INVy或非线性增益值中的较小值通过。当DBLC不允许显示亮度低于50%,则INVy值不能大于8位,乘法器1132和1134可能被简单的最小函数代替。
应该注意到,饱和度可以在输入伽玛后的任何时间被计算,这样该计算可以与GMA和测量处理并行。SPR模块之后可能需要单个的饱和度阈值位,这样从图11中的Calc Sat Gain模块1106中计算的饱和度中计算该位就变得有意义。在一个实施例中,该模块可以计算1/饱和度从而低值比高值更饱和。如果该反转饱和度在sat_thresh寄存器设定之下,则该饱和度阈值位为1,否则其为零。
计算非线性增益模块1108将一项加回到基于输入伽玛之后的RGB值的最大值的饱和度增益。该项对于黑色图像而言太大,不能有效地进行饱和度缩放。当INVy<255时(从1110输入),可能设置测试以无效非线性增益。
如果背光水平被缩减到100%以下,则在一个实施例中,通过将光阀与背光水平的倒数成比例地放大,相同照度被保持。然而在积极的背光决定的情况下,该缩放值可能过度放大光阀且光阀将超过操作的有效范围。将接着发生截取或钳位(在1114,1118和1120中),且图像将放松(loose)图像中出现的任何明亮的灰度级梯度。非线性增益的目的是对像素的缩放值进行非线性调整,使得暗像素被背光决定的倒数放大,而更亮的像素被通过渐减地降低比例值而放大,因而得到的光阀的值不超过操作的有效范围,因此比强制方法保持更多明亮的梯度信息。
该饱和度非线性增益可以通过将其相乘(并右移8位)而同X/X1缩放因子相结合。该INVy值可以是大于或小于1.0的值,因此存储在9位的定点值中,其8位在二进制点之下。该饱和度增益是介于128和256之间的值,因此有时是9位的。
积极LED功率计算和基于饱和度的缩放选择仍然产生OOG值。从而色域钳位(在1118,1120中)仍然得以实现。在饱和度和X/XL缩放之后的OOG值通过将RwGwBwWw中的最大值乘以相结合的饱和度和X/XL增益进行估计。如果结果的高位为开,则色彩为OOG且必须被钳位。最大值的低11位为距离OOG且被用来作为LUT的索引,该LUT包括钳位缩放值,如我们在之前设计中做过的。接着,作为结果的钳位增益通过再次将其乘以其它缩放因子而将它们相结合。
最终的结合增益项可能是9位的值,其8位在二进制点之下。该值可以乘以RwGwBwWw值,以通过四个9*12=12位的乘法器将其缩放并将其带回色域中。可以有其它实施例和几种饱和度使这些值大于11位。一种是LUT中的量化噪声,使得这些值稍大于11位。另一种情况是当M2>1.0。由于这些原因,可以检测每个乘积的结果的最高位(溢出)是否为开且将最终结果钳位至符合低位的最大值。
这些缩放乘法器执行缩放或“向黑色钳位”,使色彩趋于黑色。其趋势是降低像素的照度而保持其色调和饱和度。为了对灰色线(向照度钳位)或之间的某些角度(向对角钳位)进行钳位,可以使用一种算法将失去的照度加回到W值上。这可以使用照度值,但来自GMA模块的照度值可能不再有效。在某些情况下,如果RwGwBwWw值是OOG且导致OOG照度值,该照度值可能不从RwGwBwWw值重新计算。一种可能的解决方式可以将照度乘以INVy值,以再次将其带入与RwGwBwWw值相同的范围。这可以通过使用9*12=12位乘法器得到。一旦有有效的照度值,对角钳位模块可以用它来计算加到W上的值,如在之前申请中讨论的。一个替代的实施例将照度乘以一个中间乘积,例如将非线性增益乘以INVy值后的乘积。
然而,当期望对由色域钳位模块缩放的值仅执行对角钳位时,如果最终的增益包括钳位,可以保存来自计算钳位增益模块的信号。如果该钳位增益小于256(如果高位关),这是正确的。当没有钳位增益时,该对角钳位模块则可以被忽视。
还有,可以对饱和度缩放进行对角钳位。在替代的实施例中,一个新的寄存器位能够做到不论何种原因允许对角钳位模块进行色彩缩放。当计算非线性增益模块小于256时(高位为关)该处理可以实现。图11中的两条虚线示出了来自饱和/非线性和色域钳位模块的信号,以对这些条件下的钳位对角模块进行使能和禁止。
在一个实施例中输入伽玛表将8位RGB值转换为11位线性值。GMA模块将这些值转换为12位RwGwBwWw值,该RwGwBwWw值为OOG的两倍。后缩放模块的结果为已被缩放并再次被钳位为11位值的RwGwBw值。执行后缩放模块功能的伪代码如下所示:
function dopost(x,y)
local sat_gain=256 --开始计算饱和度增益
local scale_sat=0 --指示缩放完成的标志位
local scale_clamp=0
--执行饱和度-缩放增益计算
if sat_scale==1 then
local gmin=GMIN+1 --固定GMIN的默认值
if VGE==1 then --执行可变后缩放
gmin=var_gmin --若需要,使用计算过的gmin
end
--输入伽玛之后来自RGB的饱和度计算
local r,g,b=spr.fetch(ingam,x,y)
local max_rgb=math.max(l,r,g,b)
local min_rgb=math.min(r,g,b)
--inv_max_rgb为硬件形式的LUT
local inv_max_rgb_lut=math.floor((plus4bit/max_rgb)+0.5)
local sinv=math.floor(inv_max_rgb_lut*min_rgb)
sat_gain=math.floor(REG_SLOPE*sinv/plus4bit+gmin)
sat_gain=math.min(256,sat_gain,GMAX+1)
--将饱和度转化为阈值的4位数值
sinv=math.floor(16*sinv/plus4bit)
--如果是饱和像素
if sinv<(STH+1)and not(math.max(r,g,b)==0)then
sinv=1 --设定阈值位
else
sinv=0
end
spr.stroe(“sinv”,x,y,sinv) -为SPR模块保存此值
nl_gain=sat_gain
--Tony的非线性增益项
if INVy<256 then --对暗图像无影响
local nl_off=math.floor((N*16+16)*(MAXCOL-
math.max(r,g,b))/(MAXCOL+1))
nl_gain=math.min(256,sat_gain+nl_off)
end
if sat_gain<256 then
scale_sat=1 --记录主要的饱和度增益
end
end --结束饱和度-缩放
--将X/X1缩放与基于饱和度的缩放相结合
XS_gain=main.floor(nl_gain*INVy/256)
--在GMA后取值
local Rw,Gw,Bw,Ww,Lw,Ow=spr.fetch(pipeline,x,y)
--总是计算色域钳位增益且
--如果其它算法留下色彩OOG,则使用
local maxp=math.max(Rw,Gw,Bw,Ww) --找出最大的基色
--预期OOG在饱和度和X/XL后多远
maxp=math.floor(maxp*XS_gain/256)
local clamp_gain=256 --预置为1.0,无钳位
if maxp>MAXCOL then --如果该色彩为OOG
local Ow=spr.band(maxp,MAXCOL) --计算距离OOG
--伽玛钳位的INV LUT结果
clamp_gain=math.floor((256*(MAXCOL+1))/(maxp+1
rd=OutGamma((256-clamp_gain)*MAXCOL*2/256)))
if clamp_gain<256 then
scale_clamp=1 -如果增益仍然需要,设定标志位
end
end-色域外色彩
--将X/XL,饱和度和钳位结合为一个常量
XSC_gain=math.floor(XS_gain*clamp_gain/256)
--INVy X/XL缩放值可以>1.0,因此
--缩放值为9位,现在
--1位在二进制点之上而8位在之下
Rw=math.floor((Rw*XSC_gain+128)/256) --12*9=12位
Gw=math.floor((Gw*XSC_gain+128)/256)
Bw=math.floor((Bw*XSC_gain+128)/256)
Ww=math.floor((Ww*XSC_gain+128)/256)-对W的值向黑色钳位
Lw=math.floor((Lw*INVy+128)/256)-对L单独进行X/XL处理
Rw=math.min(Rw,MAXCOL) --硬钳位
Gw=math.min(Gw,MAXCOL) --(如果WR>1.0,则发生)
Bw=math.min(Bw,MAXCOL) --来自LUT的量化误差
Ww=math.min(Ww,MAXCOL)
Lw=math.min(Lw,MAXCOL)
Spr.store(“flags”,x,y,bd,gd,rd) --诊断的图像
--********************************
--钳位对角选项
if CLE==1 and(scale_clamp or(scale_sat and sat_diag))then
local W1 --计算产生正确照度的W
W1=math.floor((Lw*M1_inv-math.floor((2*Rw+5*Gw+Bw)*M2_inv/8))/32)
W1=math.min(W1,MAXCOL) --不超过最大值!
--将两个混在一起
Ww=math.floor((W1*2^(DIAG+4))+Ww*(128-(2^(DIAG+4))))/128)
end-钳位对角线
spr.store(“post”,x,y,Rw,Gw,Ww,Lw,0) --在输出中存储
end-函数dopost
单独的RG和B缩放
注意到,当上述的伪代码仅执行一个GMIN和GMAX值时,RG和B可能具有三个单独的GMIN和GMAX值。有许多实施例来执行这样的系统。一个实施例可能建立3-值饱和缩放器,但当var_scale被使能时,用单个的var_gmin值代替全部三个GMIN寄存器值。色域钳位也将取代三个增益值。另一个实施例可能在测量模块中为R G和B计算三个单独的峰值。Calc LED和增益模块可以计算三个不同的var_gmin值,延迟衰减模块可以处理这三个值。接着,这三个值可在后缩放器中用来单独的增益计算。如果需要向具有最小色调变化的黑色缩放,色域钳位仍将拿出三个增益值。
SPR
在钳位后,处理可以可选地继续进行SPR,如在此引入作为参考的许多申请中公开的。在一个实施例中,可以使用条件等色-照度锐化。在另一个实施例中,可以在显示系统中使用混合-饱和度-锐化。在混合-饱和度-锐化中,两个锐化过滤器可以被使用。当像素接近饱和值时,自彩色-锐化可以被使用。当像素不是接近饱和的像素时,条件等色-亮度锐化可以被使用。在计算饱和度模块中计算的饱和度阈值位可以用来确定像素是否饱和。为了确定像素是否接近饱和,饱和度阈值位可以被存储在SPR线存储器中,以便周围正交的饱和值可以与该像素的饱和位进行或运算。如果这5位的或运算得到1,则像素接近饱和色。可以将饱和度阈值位存储在SPR线存储器中的蓝色值的低位以节省门电路。
输出伽玛抖动输出量化器模块:
最好具有伽玛为1.0的LCD,以使输出伽玛模块可以大大简化。代替输出伽玛表或伽玛发生器,对于最终的抖动,输出值的低位可以被舍去或利用。在11位通道的例子中,可以舍掉一位,留下10位且对于抖动8位结果利用下两位。这可以利用与包括显示器的特定重复子像素分组更匹配的抖动模式,此新子像素分组已被在此引入作为参考的很多申请公开。可以开发一种三位抖动模式且对于抖动利用低位的所有三位。
在另一些实施例中,可以利用每个子像素有一单独位的抖动表。在一些表中,可以使每个“合理的像素”的两位一起开或关。这样,可以通过仅存储每个合理像素的一位或每两个子像素的一位从而减小一半容量。这可以使硬件更易实现。
图12示出了RG子像素对的处理过程。同样继续处理BG。索引的计算是将合理像素位置(Xpos,Ypos)的低位,R和G位置的额外的0或1位,及R或G的两位,放入1202。最终R和G的值右移3位,将11位值转化为8位值。加法器具有旁路模式使抖动禁能。加法器(或可选地,递增器)有时候会导致整数溢出,这可以被检测并被钳位至最大输出值。操作的顺序不是强制的,可以通过简单选择和组合所有右边的位进行移位。
尽管显示系统中的动态背光控制系统和方法参考特定实施例被描述,但并不限于此。因此,本领域技术人员将理解,对此做出各种修改和改变不脱离由所附权利要求定义的本发明的精神和范畴。