子像素渲染方法及装置
技术领域
本发明涉及子像素的渲染方法及装置,特别涉及根据纹理信息并基于距离和/或面积对子像素进行渲染的方法及装置。
背景技术
在现有技术中,当显示器以传统的子像素驱动方式显示图像时,显示器中的一个子像素对应至源图像中一个源像素的一个颜色分量。然而,随着制造技术的门槛上升,显示器上的子像素的数量亦受到限制。换言之,显示器的解析度将难以继续提升。因此,当欲于较低解析度的显示器上显示高解析度的图像时,如何保留更多的源图像细节是目前所需解决的问题。
发明内容
以下公开的内容仅为示例性的,且不意指以任何方式加以限制。除所述说明方面、实施方式和特征之外,通过参照附图和下述具体实施方式,其他方面、实施方式和特征也将显而易见。即,以下公开的内容被提供以介绍概念、重点、益处及本文所描述新颖且非显而易见的技术优势。所选择,非所有的,实施例将进一步详细描述如下。因此,以下公开的内容并不意旨在所要求保护主题的必要特征,也不意旨在决定所要求保护主题的范围中使用。
在较佳实施例中,本发明提供一种子像素渲染方法,其根据源图像生成目标图像,该方法包括:取得所述源图像;确定所述目标图像中的待渲染目标像素;计算所述源图像中与所述待渲染目标像素的子像素对应的源像素的边缘代码;根据所述边缘代码确定所述待渲染目标像素的所述子像素周围的纹理信息;以及当所述边缘代码不是特定样式时,根据所述纹理信息并基于面积计算所述待渲染目标像素的所述子像素的像素值。
在较佳实施例中,本发明提供一种子像素渲染装置,包括:储存器,用于存储源图像及目标图像;以及处理器,用于根据所述源图像生成所述目标图像;其中,所述处理器从所述储存器取得所述源图像,确定所述目标图像中的待渲染目标像素,计算所述源图像中与所述待渲染目标像素的子像素对应的源像素的边缘代码,根据所述边缘代码确定所述待渲染目标像素的所述子像素周围的纹理信息;以及当所述边缘代码不是特定样式时,根据所述纹理信息并基于面积计算所述待渲染目标像素的所述子像素的像素值。
附图说明
附图被包括以使本公开被进一步理解且被合并并组成本公开的一部分。附图用于说明本公开的实施例且连同描述一起用以解释本公开的原理。其可理解,附图不一定按比例描绘,一些元件可以以超过在实际实施方式的大小来显示,以清楚地说明本公开的概念。
图1是显示根据本发明一实施例中所述的用以执行子像素渲染方法的电子装置的方块图。
图2是显示根据本发明一实施例所述的基于距离的子像素渲染方法的流程图。
图3是显示根据本发明一实施例所述的凹口以及圆角的示意图。
图4是显示根据本发明一实施例所述的对一个源图像的多个图块进行绘图处理的示意图。
图5是显示根据本发明一实施例所述的如何对边缘像素进行镜像处理的示意图。
图6是显示根据本发明一实施例所述的视窗的水平(h)方向、左上右下(l)方向、垂直(v)方向以及右上左下(r)方向四个方向的示意图。
图7是显示根据本发明一实施例所述的对应于水平(h)方向的边缘代码的9种情况的示意图。
图8A是根据本发明一实施例所述的边缘代码为0x3030时对应的纹理信息的示意图。
图8B是根据本发明一实施例所述的边缘代码为0xC0C0时对应的纹理信息的示意图。
图9是显示根据本发明一实施例所述的源像素的大小以及子像素的大小的示意图。
图10是显示根据本发明一实施例所述的源图像中源像素排列的示意图。
图11是显示根据本发明一实施例所述的子像素排列的示意图。
图12是显示根据本发明一实施例所述的将源图像的源像素的排列与目标图像所对应的子像素的排列重迭的示意图。
图13是显示根据本发明一实施例所述的根据纹理信息并基于面积对子像素进行渲染的方法的流程图。
图14是显示根据本发明另一实施例所述的将源图像的源像素的排列与目标图像所对应的子像素的排列重迭的示意图。
图15A~图15D是显示根据本发明一实施例所述的根据纹理信息并基于面积计算目标像素的B通道的子像素的像素值的示意图。
图16是显示根据本发明一实施例所述的12种需要进行锐化处理的边缘代码对应的纹理信息的示意图。
符号说明
100 电子装置
110 处理器
120 储存器
S201、S205、S210、S215、S216、S218、S220、S225 步骤
310 凹口
320 圆角
420 锯齿
421、423 位于圆角的源像素
421a、423a 位于圆弧切线内的子区域
421b 位于圆弧切线外的子区域
450 圆弧切线
h、l、v、r 像素方向
701~709 编码情况
S1301、S1305、S1310、S1315、S1316、S1318、S1320、S1325 步骤
1501、1521 目标子像素
1502~1505、1522~1525 构成菱形区域的子像素
1511~1516、1531~1535 源像素
1550、1560 菱形区域
1550a~1550f、1560a~1560e 构成菱形区域的子区域
V0~V8 3×3视窗中所对应的像素值
具体实施方式
以下说明是为完成发明的较佳实现方式,其目的在于描述本发明的基本精神,但并不用以限定本发明。实际的发明内容必须参考之后的权利要求范围。
必须了解的是,使用于本说明书中的”包含”、”包括”等词,是用以表示存在特定的技术特征、数值、方法步骤、作业处理、元件以及/或组件,但并不排除可加上更多的技术特征、数值、方法步骤、作业处理、元件、组件,或以上的任意组合。
图1是显示根据本发明一实施例中所述的用以执行子像素渲染方法的电子装置的方块图。电子装置100包括至少一处理器110以及一储存器120。处理器110可通过多种方式实施,例如以专用硬件电路或者通用硬件(例如单一处理器、具平行处理能力的多处理器、图形处理器或者其它具有运算能力的处理器),用以将源图像转换为适用于具有特定子像素排列的显示器的目标图像。其中,于本发明的实施例中,显示器(未示出)的子像素的高度为源图像的源像素的高度的2/3,而其宽度为源图像的源像素的宽度的3/4。源图像的源像素行数与目标图像的目标像素行数相同,且每行中每3个相邻的源图像的源像素被处理器110渲染为2个目标图像的目标像素。目标图像的每个目标像素包含3个分别对应于R、G及B通道的子像素,源图像的每个源像素也包含3个分别对应于R、G及B通道的像素值,目标像素的各通道的子像素的像素值分别基于源像素的对应通道的像素值进行计算。储存器120可为非易失性存储器(例如ROM、快闪存储器等),用以储存至少一源图像以及用以将源图像转换为适用于具有特定子像素排列的显示器的目标图像所需的信息。举例来说,将源图像转换为适用于具有特定子像素排列的显示器的目标图像所需的信息包括将源像素转换为子像素的相关算法、用于基于距离以及基于面积的子像素渲染方法的相关参数等。
在一实施例中,电子装置100为一显示器面板控制器,耦接于图形处理单元(Graphics Processing Unit,GPU)(未示出)和显示器(未示出)之间。电子装置100从GPU接收源图像,并将接收到的源图像转换为目标图像后传送给显示器进行显示。
处理器110可使用基于距离的子像素渲染方法(后文将详述)和/或基于面积的子像素渲染方法(后文将详述),以将源图像转换为适用于具有特定子像素排列的显示器的目标图像。下面先描述基于距离的子像素渲染方法。
图2是显示根据本发明一实施例所述的基于距离的子像素渲染方法的流程图,下面将结合图3~图12对图2所示的基于距离的子像素渲染方法进行详细说明。
首先,于步骤S201,处理器110自储存器120取得源图像。在一实施例中,处理器110先从GPU接收源图像,并将接收到的源图像存储到储存器120中后,才进入步骤S201。然后处理器110执行步骤S205。
于步骤S205中,当显示目标图像的显示器具有凹口和/或圆角时,处理器110对源图像中位于凹口或圆角的源像素进行反走样处理。详细来说,处理器110先判断显示器是否具有凹口或者圆角。如图3所示,310为位于显示器边缘的凹口,以及320为位于显示器边缘的圆角。在一实施例中,如果显示器具有凹口和/或圆角,则储存器120中会存储所有与凹口和/或圆角所对应的源图像的中的源像素的坐标信息。如果处理器110能从储存器120中获取到与凹口和/或圆角所对应的源图像的中的源像素的坐标信息,则表示显示器具有凹口和/或圆角。当显示器具有凹口和/或圆角时,处理器110将源图像中位于凹口和/或圆角的源像素的像素值乘以衰减系数,以进行反走样处理。在一实例中,处理器110将位于边缘且为凹口和/或圆角的源图像的源像素的像素值乘以衰减系数,以柔化边缘像素所呈现出的锯齿。后续步骤会根据经柔化的源图像的源像素的像素值计算目标图像的目标像素的各子像素的像素值。其中,衰减系数与边缘像素被圆弧所切割的面积相关,并可通过以下的公式取得:
Areaarch=(2*offset-1)/(2*step)
其中,Areaarch为衰减系数,offset为源像素在锯齿中的位置索引,step为锯齿的宽度。
举例来说,如图4所示,区域410为没有发光器的区域,区域420(以虚线描绘)为圆角或凹口的多个锯齿中的其中一个锯齿,而实线450则为区域420中接近理想的圆弧切线。对于源像素421而言,区域421a为位于圆弧切线内的区域,而区域421b则为位于圆弧切线外的区域。根据图4的内容可得知,区域420的宽度为5个源像素,而源像素421则为区域420的第1个源像素(即offset为1)。因此,根据上述的公式可计算得源像素421所对应的衰减系数为Areaarch=(2*1-1)/(2*5)=1/10。换言之,区域421a所对应的面积为源像素421的整个面积的1/10,而经柔化后的像素421的像素值为原先的1/10。于另一个例子中,源像素423所对应的衰减系数为Areaarch=(2*3-1)/(2*5)=5/10,即经柔化后的源像素423的像素值为原先的5/10,换言之,区域423a所对应的面积为源像素423的整个面积的5/10,而经柔化后的源像素423的像素值为原先的5/10。以此类推。
在一实施例中,处理器110将源图像中在目标图像中没有对应的子像素的源像素的像素值设置为0,意即将显示器中没有发光器的区域(图4中的区域410)所对应的源图像中的源像素的像素值设置为0。
此外,于本发明的一实施例中,于储存器120储存对应于锯齿区域的源像素的相关信息时,可仅储存锯齿区域的起始点的坐标、对应于x方向或者y方向的偏移方向以及源像素的偏移量。举例来说,如图4所示的区域420,于储存对应于区域420的锯齿时,可仅储存对应于源像素421的坐标、对应于x方向的偏移方向以及5个源像素的偏移量的信息。
当处理器110对位于凹口和/或者圆角的源像素进行反走样处理后,进入步骤S210。在步骤S210中,处理器110确定目标图像中一个待渲染的目标像素的坐标(xspr,y),然后进入步骤S215。
在步骤S215中,处理器110分别计算源图像中与目标像素(xspr,y)的各子像素对应的源像素的边缘代码(edge code)以确定待渲染的目标像素(xspr,y)的各子像素周围的纹理信息。详细来说,为了对目标像素(xspr,y)的各子像素进行正确地渲染,处理器110对以源图像中与目标图像的待渲染目标像素(xspr,y)的各子像素对应的源像素为中心的一视窗执行边缘检测以得到与待渲染的目标像素(xspr,y)的各子像素对应的源像素的边缘代码,并根据所得到的边缘代码确定目标像素(xspr,y)的各子像素的纹理信息,并对具有不同纹理的目标像素(xspr,y)的各子像素分别使用不同的渲染方法进行渲染以得到目标像素(xspr,y)的各子像素的像素值。计算与目标像素(xspr,y)的各子像素对应的源图像中的源像素的x坐标时,根据待渲染目标像素(xspr,y)位于目标图像的奇数行或偶数行的不同,计算方法会有所不同。
为了后面更好的描述目标像素(xspr,y)的各子像素的像素值的计算过程,这里先解释一下关于偶数行、奇数行、偶数列和奇数列的定义。以目标像素(xspr,y)为例,当xspr%2=0时表示目标像素(xspr,y)位于目标图像的偶数列,当xspr%2=1时表示目标像素(xspr,y)位于目标图像的奇数列,其中%2表示对2求余数,且当目标像素(xspr,y)位于第1列时xspr=0,当目标像素(xspr,y)位于第2列时xspr=1,以此类推;当y%2=0时表示目标像素(xspr,y)位于目标图像的偶数行,当y%2=1时表示目标像素(xspr,y)位于目标图像的奇数行,其中%2表示对2求余数,且当目标像素(xspr,y)位于第1行时y=0,当目标像素(xspr,y)位于第2行时y=1,以此类推。上述确定偶数行/偶数列和奇数行/奇数列的方法同样适用于源图像中的源像素,这里不再重复描述。
当待渲染目标像素(xspr,y)位于目标图像的偶数行时,其所对应的源图像中的源像素的x坐标通过以下的算式取得(目标像素的R及G通道与B通道的子像素所对应的源像素不同):
以及,当待渲染目标像素(xspr,y)位于目标图像的奇数行时,其所对应的源像素的x坐标通过以下的算式取得(目标像素的R及G通道与B通道的子像素所对应的源像素不同):
其中,floor()表示向下取整数。与目标像素(xspr,y)的各子像素对应的源图像中的源像素是(x,y)。以源像素(x,y)为中心像素,根据源像素(x,y)的坐标即可求出视窗中所有源像素的坐标。以3×3的视窗为例,源像素(x,y)上方的源像素的坐标为(x,y-1)、源像素(x,y)左方的源像素的坐标为(x-1,y),以此类推可以得到源像素(x,y)周围的所有8个源像素的坐标。根据源像素的坐标可以从源图像中获取对应的源像素的像素值。当处理器110计算位于边缘的子像素的像素值时,处理器110将先对位于边缘的源像素进行镜像处理,以取得位于边缘外的虚拟源像素的像素值。举例来说,如图5所示,右下角的阴影区域的源像素0~15为位于源图像中的源像素。由于在处理器110计算位于边缘的目标像素时,会用到位于源图像外的虚拟源像素,即当计算位于与源图像的源像素4对应的子像素的像素值时,会用到位于源像素4左侧的虚拟源像素的像素值,因而将位于源像素4左侧的虚拟源像素的像素值映射为位于源像素4右侧的源像素5的像素值,以此类推,使得处理器110于计算对应于边缘的子像素的像素值时,可根据虚拟源像素的像素值进行相关运算。
从源图像获取到与目标像素(xspr,y)的某个子像素对应的视窗后,处理器110开始进行边缘代码的计算。以目标像素(xspr,y)的该子像素对应的源像素的像素值分别减去在视窗的多个方向之一上的多个临近源像素的像素值得到多个第一差值;以多个临近源像素的像素值分别减去该源像素的像素值得到多个第二差值;根据第一差值与第一阈值的比较结果得到第一编码;根据第二差值与第二阈值的比较结果得到第二编码;将第一编码和第二编码组合得到多个方向之一的编码;最后组合所述多个方向的编码得到边缘代码。
下面以目标像素(xspr,y)的R通道对应的子像素对应的3×3的视窗为例具体说明。边缘代码可通过四个十六进制位的编码组成,而组成边缘代码的编码的各个位从左至右分别对应于3×3的视窗的水平(h)方向、左上右下(l)方向、垂直(v)方向以及右上左下(r)方向的编码,其中每一位表征一个方向的纹理信息。值得注意的是,尽管上述实施例中是以四位作为例子,但本发明并不局限于此,此由边缘代码需要表征的方向个数来决定。举例来说,如图6所示,水平(h)方向的编码是由九宫格中的第3、4以及第5个源像素(即图中所示的V3~V5)计算得到,左上右下(l)方向的编码是由九宫格中的第0、4以及第8个源像素(即图中所示的V0、V4、V8)计算得到,垂直(v)方向的编码是由九宫格中的第1、4以及第7个源像素(即图中所示的V1、V4、V7)计算得到,以及右上左下(r)方向的编码是由九宫格中的第2、4以及第6个源像素(即图中所示的V2、V4、V6)计算得到。其中,各个方向的编码的前两个位是通过从周围像素的像素值减去中心像素的像素值所产生,而编码的后两个位则通过从中心像素的像素值减去周围像素的像素值所产生。举例来说,以水平(h)方向为例,水平(h)方向的编码为H(f(V3-V4),f(V5-V4),f(V4-V3),f(V4-V5))。其中,f()表示一个函数,当括号内的值大于一既定阈值时输出1,当括号内的值小于一既定阈值时输出0;H()表示一个函数,将括弧内的四个二进制位的数转换为一个十六进制位的数。例如,假设阈值为10,当V3为151、V4为148、V5为150时,V3-V4等于3,因而V3-V4小于10,所以f(V3-V4)输出0,V5-V4等于2,因而V5-V4小于10,所以f(V5-V4)输出0,V4-V3等于-3,因而V4-V3小于10,所以输出0,V4-V5等于-2,因而V4-V5小于10,所以输出0;所以水平(h)方向的编码为0x0(即二进制0000)。现在参考图7,图7是显示根据本发明一实施例所述的对应于水平(h)方向的编码的9种情况的示意图。如图7中701所示,0x0表示V3、V4和V5的亮度值(即像素值,下同)相差不大;V3、V4和V5都用白色填充示意。V3、V4和V5也可以都用黑色填充示意(未示出),V3、V4和V5方块的填充颜色相同即表示V3、V4和V5的亮度值相差不大。当V3为151、V4为120、V5为150时,V3-V4等于31,因而V3-V4大于10,所以f(V3-V4)输出1,V5-V4等于30,因而V5-V4大于10,所以f(V5-V4)输出1,V4-V3等于-31,因而V4-V3小于10,所以输出0,V4-V5等于-30,因而V4-V5小于10,所以输出0,所以水平(h)方向的编码为0xC(即二进制1100),如图7中703所示,编码0xC表示V3和V5的亮度值都大于V4的亮度值。同理,如图7中的702所示,编码0x3表示V3和V5的亮度值都小于V4的亮度值;如704所示,编码0x1表示V3和V4的亮度值都大于V5的亮度值;如705所示,编码0x4表示V3和V4的亮度值都小于V5的亮度值;如706所示,编码0x6表示V3的亮度值小于V4的亮度值、V4的亮度值小于V5的亮度值;如707所示,编码0x2表示V4和V5的亮度值都大于V3的亮度值;如708所示,编码0x8表示V4和V5的亮度值都小于V3的亮度值;如709所示,编码0x9表示V3的亮度值大于V4的亮度值、V4的亮度值大于V5的亮度值。
同理可求得左上右下(l)方向、垂直(v)方向以及右上左下(r)方向的编码。将水平(h)方向、左上右下(l)方向、垂直(v)方向以及右上左下(r)方向的编码按从左到右的顺序排列即可得到一个包含四个十六进制位的边缘代码,而通过最后所输出的边缘代码,即可得知目标像素(xspr,y)的R通道的子像素周围的纹理信息。在一实施例中,当水平(h)方向的边缘代码为0x4或0x8时,表示目标像素(xspr,y)的子像素周围的纹理较弱。当边缘代码为0x0111、0x0222、0x0333、0x0444、0x0CCC、0xCC0C、0x1102、0x2201、0x3303、0x4408或0x8804时(如图16所示),表示目标像素(xspr,y)的子像素周围的纹理较强。而当边缘代码为0x3030(如图8A所示)或0xC0C0(如图8B所示)时,表示目标像素(xspr,y)的子像素周围的纹理信息为特定样式。
处理器110计算完目标像素(xspr,y)的各子像素的边缘代码并确定目标像素(xspr,y)的各子像素周围的纹理信息后,进入步骤S216。在步骤S216中,处理器110分别判断目标像素(xspr,y)的各子像素周围的纹理信息是否为特定样式。在一实施例中,即判断目标像素(xspr,y)的子像素的边缘代码是否为0x3030或0xC0C0;如果为「否」进入步骤S220(后面会详述),如果为「是」则进入步骤S218。
为了后面更好的描述目标像素(xspr,y)的各子像素的像素值的计算过程,这里先解释一下源图像中的源像素与目标图像中的目标像素的各子像素之间的位置关系。如图10所示,图10中的「○」代表源图像中的源像素。如图11所示,图11中的「△」表示目标图像中目标像素的R通道的子像素,「◇」表示目标图像中目标像素的G通道的子像素,以及「□」则表示目标图像中目标像素的B通道的子像素。而根据图9的内容可知,于本发明的实施例中,目标图像中目标像素的子像素的高度为源图像的源像素的高度的2/3(目标像素行数与源像素行数相同),而目标图像中目标像素的子像素的各通道的宽度为源图像的源像素的通道宽度的3/4(每行中目标像素的个数为源像素个数的2/3)。换言之,如图12所示,当源图像显示于目标图像中时,源图像的源像素的位置并不会与目标图像的目标像素的子像素的位置重迭,因此于计算目标图像的目标像素的R通道、G通道以及B通道的子像素的像素值时,处理器110将对与目标像素的子像素最相邻的左右两个源像素的像素值进行插值计算以取得目标像素的子像素的像素值。下面描述步骤S218。
在步骤S218中,处理器110直接插值计算目标像素(xspr,y)的子像素的像素值。详细来说,处理器110是通过以下的公式计算目标像素(xspr,y)的子像素的像素值。当目标图像的目标像素(xspr,y)位于目标图像的偶数行时,目标图像的目标像素(xspr,y)的R及G通道与B通道的子像素的像素值通过下面的公式计算:
当
以及,当目标图像的目标像素(xspr,y)位于目标图像的奇数行时,目标图像的目标像素(xspr,y)的R及G通道与B通道的子像素的像素值通过下面的公式计算:
当edgecode=0x3030
当edgecode=0xC0C0
其中,是指目标图像中坐标为(xspr,y)的目标像素的R通道或者G通道的子像素的像素值,是指目标图像中坐标为(xspr,y)的目标像素的B通道的子像素的像素值,R′(G′)x,y是指源图像中坐标为(x,y)的源像素的R通道或G通道的像素值,B′x,y是指源图像中坐标为(x,y)的源像素的B通道的像素值,公式中每个都包含了向下取整数操作,factorkep为一预设值,factorave为一预设值,以及edgecode是指边缘代码。以及,于本发明的实施例中,factorkep的值为1.0,以及factorave的值为0.5。但值得注意的是,factorkep以及factorave的值是可根据使用者的需求进行调整,并不以本发明为限。其中,于一示例中,当目标像素的R通道的子像素的xspr坐标为5时,处理器110是取x坐标为7的源像素的像素值再乘以factorkep的值,以取得对应于目标像素的子像素的像素值。
在步骤S220中,处理器110会根据纹理信息并基于距离计算待渲染目标像素(xspr,y)的子像素的像素值。详细来说,对应于偶数行的待渲染目标像素(xspr,y)的R通道、G通道以及B通道的子像素的像素值可通过以下的公式求得:
以及,对应于奇数行的待渲染目标像素(xspr,y)的R通道、G通道以及B通道的子像素的像素值可通过以下的算式取得:
其中,是指目标像素(xspr,y)的R通道或者G通道的子像素的像素值,是指目标像素(xspr,y)的B通道的子像素的像素值,R′(G′)(x,y)是指坐标为(x,y)的源像素的R通道或者G通道的像素值,B′(x,y)是指坐标为(x,y)的源像素中对应于的B通道的像素值,公式中每个都包含了向下取整数操作(比如,3×3/2等于4),其中%2表示对2求余数,因此xspr%2=0表示偶数列,以及xspr%2=1表示奇数列。在一实施例中,当目标像素(xspr,y)的子像素对应的纹理信息较弱时,即当边缘代码的水平(h)方向的编码为0x8或0x4时,在计算目标像素(xspr,y)的子像素的像素值时需要进行平滑处理。详细来说,当水平(h)方向的编码为0x8并且xspr%2=0时或者当水平(h)方向的编码为0x4并且xspr%2=1时使用factorsmooth替换factorrg(b)**,其中factorsmooth为一预设值,factorrg(b)**表示factorrg00、factorrg01、factorrg10、factorrg11、factorb00、factorb01、factorb10或factorb11,且factorsmooth、factorrg00、factorrg01、factorrg10、factorrg11、factorb00、factorb01、factorb10及factorb11均为预设值。
举例来说,当处理器110计算目标图像中位于(3,1)的目标像素的R通道子像素的像素值时,可根据源图像中位于(3,1)以及(4,1)的源像素的R通道的像素值求得,以此类推。
于本发明的一实施例中,factorrg00、factorrg01、factorrg10、factorrg11、factorb00、factorb01、factorb10、factorb11的值皆为0.7。或者,根据本发明另一实施例,factorrg00、factorrg10、factorrg11、factorb00、factorb01、factorb10的值为1.0,而factorrg01、factorb11的值则为0.7。换言之,应用于不同行/列的目标像素的R通道、G通道以及B通道的子像素的factor的值是可根据使用者对于颜色显示的需求不同而改变。此外,响应于目标像素的子像素周围的纹理较为平缓或者没有纹理时,factor的值亦可直接套用0.5。
处理器110计算完目标像素(xspr,y)的所有子像素的像素值后,进入步骤S225。在步骤S225中,处理器110检查目标图像中是否还有未渲染的目标像素。如果为「否」,则表示目标图像的所有目标像素的子像素都已经渲染完,处理结束。然后处理器110可以将渲染完的目标图像发送给显示器进行显示。否则,返回步骤S210,继续对下一个未渲染的目标像素进行渲染。
下面介绍基于面积的子像素渲染方法。图13是显示根据本发明一实施例所述的根据纹理信息并基于面积对子像素进行渲染的方法的流程图。下面将结合图14~图16对图13进行说明。
图14是显示根据本发明另一实施例所述的将源图像的源像素的排列与目标图像所对应的子像素的排列重迭的示意图。图15A~图15D是显示根据本发明一实施例所述的根据纹理信息并基于面积计算目标像素的B通道的子像素的像素值的示意图。图16是显示根据本发明一实施例所述的12种需要进行锐化处理的边缘代码对应的纹理信息的示意图。
如图13所示,步骤S1301、S1305、S1310、S1316、S1318及S1325分别与图2中的步骤S201、S205、S210、S216、S218及S225的操作相同,在此将不再进行重复描述。下面分别对S1315和步骤S1320进行描述。图13于步骤S1320是采用基于面积计算待渲染的目标像素(xspr,y)的子像素的像素值,而图2于步骤S220是采用基于距离计算待渲染的目标像素(xspr,y)的子像素像素值,因此图13中的步骤S1315与图2中的步骤S215亦不相同,即图13与图2的实施例在计算与目标像素(xspr,y)的子像素对应的源图像中的源像素的坐标时使用的公式亦不同,具体如下所示:
当待渲染的目标像素(xspr,y)处于目标图像的偶数行时,其所对应的源图像中的源像素的x坐标通过以下的算式取得(目标像素的R及G通道与B通道的子像素对应的源像素可能会不同):
以及,当待渲染的目标像素(xspr,y)处于目标图像的奇数行时,其所对应的源图像中的源像素的x坐标通过以下的算式取得(目标像素R及G通道与B通道的子像素对应的源像素可能会不同):
其中,floor()表示向下取整数。与待渲染目标像素(xspr,y)的子像素对应的源图像中的源像素是(x,y),其中%2表示对2求余数,因此xspr%2=0表示偶数列,以及xspr%2=1表示奇数列。
下面再描述步骤S1320。在步骤S1320中,处理器110根据纹理信息并基于面积计算待渲染目标像素(xspr,y)的子像素的像素值。详细来说,如图14所示,「△」表示待渲染的目标像素的R通道或者G通道的子像素,而「□」则表示待渲染目标像素的B通道的子像素,以及每个虚线框的小正方形的中心为源图像的一个源像素所在的位置。处理器110于计算对应于一目标图像的待渲染目标像素的子像素的像素值时,首先要以目标图像的待渲染目标像素的子像素为中心取得其在源图像中对应的一个视窗,值得注意的是,这里的视窗和前述步骤S1315中计算边缘代码所取的视窗不同。下面以3×3的视窗为例,具体描述如下。
当待渲染目标像素的子像素的为目标像素的R通道或者G通道的子像素时,位于目标图像的偶数行偶数列、偶数行奇数列以及奇数行偶数列的待渲染目标像素的子像素在源图像中对应的视窗中包含的源像素为:
以及,位于目标图像的奇数行奇数列的待渲染子像素在源图像中对应的视窗中包含的源像素为:
其中,R′(G′)(x,y)是指坐标为(x,y)的源像素中对应于R通道或者G通道的像素值。
此外,当待渲染目标像素的子像素为目标像素的B通道的子像素时,位于目标图像的偶数行偶数列、奇数行偶数列以及奇数行奇数列的待渲染目标像素的子像素在源图像中对应的视窗中包含的源像素为:
以及,位于目标图像的偶数行奇数列的待渲染目标像素的子像素在源图像中对应的视窗中包含的源像素为:
其中,B′(x,y)是指在源图像中坐标为(x,y)的源像素的B通道的像素值。
于取得待渲染目标像素的子像素在源图像中对应的视窗包含的源像素后(如图14中的3×3个虚线框的小正方形),处理器110基于待渲染目标像素的子像素的上方、下方、左方以及右方的待渲染目标像素的子像素以取得一菱形区域。如图15A~图15D所示,「△」代表待渲染目标像素的R通道/G通道的子像素,「□」代表待渲染目标像素的B通道的子像素,以及9个小正方形代表待渲染目标像素的子像素在源图像中对应的视窗中包含的源像素。共有4种不同类型的菱形区域,图15A中的菱形1550为当待渲染目标像素的B通道的子像素在目标图像中的位置为偶数行偶数列时所取得的菱形区域,图15B中的菱形1560为待渲染目标像素的B通道的子像素在目标图像中的位置为偶数行奇数列时所取得的菱形区域,图15C中的菱形为待渲染目标像素的B通道的子像素在目标图像中的位置为奇数列偶数行时所取得的菱形区域,以及图15D中的菱形为待渲染目标像素的B通道的子像素在目标图像中的位置为奇数行奇数列时所取得的菱形区域。
然后,处理器110根据菱形区域所占周围源像素的面积比例计算对应的目标图像的待渲染目标像素的子像素的像素值。即处理器110判断该菱形区域所占周围源像素的面积比例,最后根据各个子区域在所对应的源像素中所占的面积比例乘以所对应的源像素的像素值并进行加总,以取得待渲染目标像素的子像素的像素值。
如图15A所示,当处理器110欲取得待渲染目标像素的B通道的子像素1501的像素值时,处理器110首先基于待渲染目标像素的B通道的子像素1501的上方、下方、左方以及右方的目标像素的R通道/G通道子像素1502~1505取得一菱形区域1550,以根据菱形区域于多个源图像的源像素中所占的面积求得待渲染目标像素的子像素的像素值。菱形区域1550是分别由子区域1550a~1550f所组成,而子区域1550a~1550f分别为占3×3的视窗包含的源图像的源像素中右侧两列的源像素的一部分(即图中所示的源图像的源像素1511~1516)。处理器110接着分别求出子区域1550a于源图像的源像素1511中所占的面积比例、子区域1550b于源图像的源像素1512中所占的面积比例、子区域1550c于源图像的源像素1513中所占的面积比例、子像素1550d于源图像的源像素1514中所占的面积比例、子像素1550e于源图像的源像素1515中所占的面积比例以及子像素1550f于源图像的源像素1516中所占的面积比例,再将各个子区域所对应的面积比例分别乘上前述所求得的3×3的源像素所分别对应的B通道像素值并加总对应于每个子区域的值,最后即可取得待渲染目标像素的B通道的子像素1501的像素值。举例来说,子区域1550d于源图像的源像素1514中所占的面积比例为54/144,若源图像的源像素1514所对应的B通道像素值为144,则子区域1550d所对应的值则为54,以此类推。
如图15B所示,当处理器110欲取得目标像素的B通道的子像素1521的像素值时,处理器110首先基于待渲染目标像素的B通道的子像素1521的上方、下方、左方以及右方的R通道/G通道子像素1522~1525取得一菱形区域1560,以根据菱形区域于多个源图像的源像素中所占的面积求得待渲染目标像素的B通道的子像素1521的像素值。菱形区域1560是分别由子区域1560a~1560e所组成,而子区域1560a~1560e分别为占3×3的源图像的源像素中第2、4~6、8个像素的一部分(即图中所示的源图像的源像素1531~1535)。接着,处理器110分别求出子区域1560a于源图像的源像素1531中所占的面积比例、子区域1560b于源图像的源像素1532中所占的面积比例、子区域1560c于源图像的源像素1533中所占的面积比例、子像素1560d于源图像的源像素1534中所占的面积比例以及子像素1560e于源图像的源像素1535中所占的面积比例,再将各个子区域所对应的面积比例乘上前述所求得的3*3的源图像的源像素所分别对应的B通道像素值并加总对应于每个子区域的像素值,最后即可取得待渲染目标像素的B通道的子像素1521的像素值。
如图15C、图15D所示的计算待渲染目标像素的子像素的像素值的方式与图15A、图15B类似,不同之处是菱形各区域所占源图像的源像素的面积不同,在此即不加以描述以精简说明。值得注意的是,如前所述的待渲染目标像素的各个通道的子像素与源图像的源像素的面积配置信息已事先储存于储存器120,处理器110可根据目标像素的子像素所对应的行与列于储存器120中存取对应的面积配置信息,并将各个子区域所对应的3×3的源图像的源像素的像素值代入,以求得对应的待渲染目标像素的子像素的像素值。值得注意的是,对应于待渲染目标像素的R通道或者G通道的子像素的菱形区域于3×3的源像素中的配置是与待渲染目标像素的B通道的子像素的菱形区域于3×3的源像素中的配置相反。换言之,当「△」与「□」互换时,即当「□」为对应于待渲染目标像素的R通道/G通道的子像素、「△」为对应于待渲染目标像素的B通道的子像素时,图15A是当待渲染目标像素的R通道或者G通道的子像素为奇数行奇数列时的情形,图15B是当待渲染目标像素的R通道或者G通道的子像素为奇数行偶数列时的情形,图15C是当待渲染目标像素的R通道或者G通道的子像素为偶数列奇数行时的情形,以及图15D是当待渲染目标像素的R通道或者G通道的子像素为偶数行偶数列时的情形。
举例来说,位于(1,1)的待渲染目标像素的R通道的子像素的周围的源图像的源像素为:
而根据前述的内容可得的(1,1)是对应至奇数行以及奇数列,因此处理器110将根据前述所取得的源像素的像素值乘以图15A的菱形区域的面积配置计算对应于待渲染目标像素的R通道的子像素的像素值。
此外,根据本发明一实施例,于基于面积的子像素渲染方法中,当待渲染目标像素的子像素所对应的纹理信息为图16中所示的12种图样的任一种时(其中图中的白色代表”1”,黑色代表”0”),即待渲染目标像素的子像素所对应的纹理较强时,处理器110更对待渲染目标像素的子像素进行锐化处理,以使得目标图像更加地清晰。详细来说,当待渲染目标像素的子像素所对应的纹理较强时,处理器110使用一个钻石滤波器对待渲染目标像素的子像素在源图像中对应的3×3的源像素进行卷积运算,得到一个锐化参数。然后将基于面积求得的待渲染目标像素的子像素的像素值与锐化参数相加,所得到的值就是锐化后的待渲染目标像素的子像素的像素值。下面是本发明一实施例中的钻石滤波器的一个实例:
根据本发明另一实施例,当处理器110分别根据基于距离的子像素渲染方法以及基于面积的子像素渲染方法取得对应于待渲染目标像素的R通道、G通道以及B通道的子像素的像素值后,处理器110更可根据既定权重合并两个计算结果以求得最后的像素值。举例来说,处理器110可分别给予两个计算结果各0.5的权重,以平均基于距离的子像素渲染方法以及基于面积的子像素渲染方法所取得的像素值。
综上所述,根据本发明所述的子像素渲染方法及装置,在不改变图像品质的状况下,通过对源图像的两个源像素或者多个源像素进行插值以求得数量仅为源图像的源像素数量的2/3的目标像素,如此将可节省1/3数量的发光器。此外,于求得每个待渲染目标像素的子像素的像素值时,本发明所述的方法根据目标像素的子像素周围的纹理信息对具有特殊纹理(例如前述说明书所述的边缘代码为特定样式)的像素进行特殊处理,并且采用不同方法(例如基于距离和/或面积)计算待渲染目标像素的子像素的像素值时,根据不同纹理信息(例如前述说明书所述的纹理较弱或较强的情形)对应地对计算所得的待渲染目标像素的子像素的像素值进行平滑或锐化处理,以得到最佳的图像转换效果。再者,响应于显示器具有圆角或者凹口时,本发明所述的方法更可事先对对应于圆角或者凹口区域的源像素进行反锯齿处理,以使得最后输出的图像品质更佳。
虽然本发明使用以上实施例进行说明,但需要注意的是,这些描述并非用以限缩本发明。相反地,此发明涵盖了本领域技术人员显而易见的修改与相似设置。所以,申请权利要求范围须以最宽广的方式解释来包含所有显而易见的修改与相似设置。