发明名称 一种具有透明度信息的图像的调色板装置与生成方法
摘要 本发明公开了一种具有透明度信息的图像的调色板装置与生成方法,定义指定的调色板中独立条目的数目为K,对透明度信息的图像的RGB三基色和透明度值进行量化,生成K个带α透明度值的RGB调色板条目,然后求取图像中各像素索引值,最后保存成PNG8图片。本发明实现了RGB三基色和α透明度的量化;在量化过程中考虑了图片中α透明度对RGB三基色显示效果的影响,减少了α透明度值较小时的量化级数,在主观上更合理的分配了调色板条目;当调色板长度较小时,对根据像素频度得到的调色板初值,再进行LBG矢量量化,避免过多颜色由于出现频率小而丢失的现象,有效地减小量化后图像的失真;当调色板长度较大时,在图像量化过程中使用弗洛伊德抖动方法,有效改善图片的主观质量。
申请公布号 CN102881026A 申请公布日期 2013.01.16
申请号 CN201210290041.X 申请日期 2012.08.15
申请人 大连理工大学 发明人 陈喆;殷福亮;李丹丹
分类号 G06T7/40(2006.01)I 主分类号 G06T7/40(2006.01)I
代理机构 大连星海专利事务所 21208 代理人 徐淑东
主权项 1.一种具有透明度信息的图像的调色板装置,其特征在于,所述一种具有透明度信息的图像的调色板装置包括:图像输入单元、图像颜色取值空间分割单元、图像调色板生成单元、图像颜色量化单元、图像输出单元;所述图像输入单元用于输入一张PNG图片,并判断该图像是否包含透明度信息,只通过含有透明度信息的图像,具体步骤如下:提取PNG图像的IHDR字段信息,包括图片宽、图片高、图片色深、颜色类型,定义颜色类型为ColorType;判断该图像是否包含透明度信息:若ColorType=6,则该图像为带α通道的真彩色图片,满足要求;若ColorType=3,则该图像为真彩色索引图像,再在文件数据中搜索tRNS字段,若文件包含tRNS字段,则该图像包含透明度信息,满足要求;若图像不满足上述两种颜色类型中任何一种情况下,则该图像不包含透明度信息,不满足要求;所述图像颜色取值空间分割单元用于统计R、G、B、α分量的像素分布直方图,并根据直方图信息分割R、G、B、α颜色取值空间,具体步骤如下:解析输入的PNG图片,得到每个像素点的透明度α和RGB三基色信息,即根据步骤100得到的信息,提取PNG图像IDAT字段信息,即图像颜色信息:若ColorType=6,直接从IDAT中每个像素数据中提取出R、G、B、α分量值;若ColorType=3,则从IDAT中每个像素点数据中提取颜色索引值,再根据颜色索引值到PLET字段中提取该像素的R、G、B分量值,最后在该像素的tRNS字段中提取α分量值;遍历图片,根据步骤210的方法,统计图像中各个颜色分量的像素分布直方图,即R、G、B、α分量不同取值对应的像素数目,分别存储在4×256个计数器中;根据步骤220的统计结果,将各颜色分量分割为8个量化区间,并取区间内所有像素的颜色平均值作为各分量的区间量化值;由于R、G、B、α的取值范围均为[0,255],以下以<img file="DEST_PATH_IMAGE001.GIF" wi="14" he="16" />指代各颜色分量来表述它们的区间分割及颜色量化方法;定义<i>k</i>∈[0,7]且<i>k</i>为整数,对于<i>x</i>∈[0,255],将其量化为8个值<img file="DEST_PATH_IMAGE002.GIF" wi="25" he="31" />,则定义第<i>k</i>个量化区间的量化代价函数<img file="DEST_PATH_IMAGE003.GIF" wi="42" he="26" />为:<img file="DEST_PATH_IMAGE004.GIF" wi="349" he="77" />其中,<i>num</i>(<i>x</i>)为像素取值为<i>x</i>的像素数目,在取值区间[<img file="DEST_PATH_IMAGE005.GIF" wi="78" he="26" />]内的<i>x</i>量化为<img file="DEST_PATH_IMAGE006.GIF" wi="20" he="24" />,<img file="DEST_PATH_IMAGE007.GIF" wi="38" he="24" />为像素取值为<i>x</i>的像素透明度:<img file="DEST_PATH_IMAGE008.GIF" wi="90" he="42" />;为求解使代价函数取到最小值的<img file="747769DEST_PATH_IMAGE006.GIF" wi="20" he="24" />值,可另<img file="DEST_PATH_IMAGE009.GIF" wi="65" he="46" />0,即<img file="DEST_PATH_IMAGE010.GIF" wi="309" he="74" />时,得:<img file="DEST_PATH_IMAGE011.GIF" wi="254" he="153" />此时,<img file="477958DEST_PATH_IMAGE003.GIF" wi="42" he="26" />取最小值为:<img file="DEST_PATH_IMAGE012.GIF" wi="609" he="157" />本步骤的核心是搜索最佳量化区间,搜索过程如下:设<i>x</i>[0,255]且<i>num</i>(<i>x</i>)≠0时,对应的最小<i>x</i>值为<i>x</i><sub><i>low</i></sub>,最大<img file="195379DEST_PATH_IMAGE001.GIF" wi="14" he="16" />值为<i>x</i><sub><i>up</i></sub>,将区间[<i>x</i><sub><i>low</i></sub>,<i>x</i><sub><i>up</i></sub>]等分8份,作为<i>x</i>最佳量化区间的初值,即[<i>x</i><sub><i>k_down</i></sub>,<i>x</i><sub><i>k_up</i></sub>]初值为[<i>x</i><sub><i>low</i></sub>+<i>k</i>(<i>x</i><sub><i>up</i></sub>-<i>x</i><sub><i>low</i></sub>)/8,<i>x</i><sub><i>low</i></sub>+(<i>k</i>+1)(<i>x</i><sub><i>up</i></sub>-<i>x</i><sub><i>low</i></sub>)/8];分别计算几个代价函数:区间[<i>x</i><sub><i>k_down</i></sub>,<i>x</i><sub><i>k_up</i></sub>]代价函数<img file="DEST_PATH_IMAGE013.GIF" wi="49" he="28" />、区间[<i>x</i><sub><i>k</i>+1<i>_down</i></sub>,<i>x</i><sub><i>k</i>+1<i>_up</i></sub>]的代价函数<img file="DEST_PATH_IMAGE014.GIF" wi="57" he="28" />;区间[<i>x</i><sub><i>k_down</i></sub>,<i>x</i><sub><i>k_up</i></sub>-1]代价函数<img file="DEST_PATH_IMAGE015.GIF" wi="50" he="26" />、区间[<i>x</i><sub><i>k</i>+1<i>_down</i></sub>-1,<i>x</i><sub><i>k</i>+1<i>_up</i></sub>]的代价函数<img file="DEST_PATH_IMAGE016.GIF" wi="58" he="26" />;区间[<i>x</i><sub><i>k_down</i></sub>,<i>x</i><sub><i>k_up</i></sub>+1]代价函数<img file="DEST_PATH_IMAGE017.GIF" wi="53" he="26" />、区间[<i>x</i><sub><i>k</i>+1<i>_down</i></sub>+1,<i>x</i><sub><i>k</i>+1<i>_up</i></sub>]的代价函数<img file="DEST_PATH_IMAGE018.GIF" wi="61" he="26" />;比较步骤232得到的代价函数的几项和值:<img file="355969DEST_PATH_IMAGE013.GIF" wi="49" he="28" />+<img file="108024DEST_PATH_IMAGE014.GIF" wi="57" he="28" />、<img file="930487DEST_PATH_IMAGE015.GIF" wi="50" he="26" />+<img file="135203DEST_PATH_IMAGE016.GIF" wi="58" he="26" />和<img file="271786DEST_PATH_IMAGE017.GIF" wi="53" he="26" />+<img file="940665DEST_PATH_IMAGE018.GIF" wi="61" he="26" />,将其中和值最小的取值点作新的区间划分;重复步骤232和步骤233,调整各个区间的划分,直到区间的划分不再改变为止,即<img file="871712DEST_PATH_IMAGE013.GIF" wi="49" he="28" />+<img file="626041DEST_PATH_IMAGE014.GIF" wi="57" he="28" />&gt;=<img file="300736DEST_PATH_IMAGE015.GIF" wi="50" he="26" />+<img file="761805DEST_PATH_IMAGE016.GIF" wi="58" he="26" />且<img file="191649DEST_PATH_IMAGE013.GIF" wi="49" he="28" />+<img file="368028DEST_PATH_IMAGE014.GIF" wi="57" he="28" />&gt;=<img file="580834DEST_PATH_IMAGE017.GIF" wi="53" he="26" />+<img file="224305DEST_PATH_IMAGE018.GIF" wi="61" he="26" />为止;分别取<i>k</i>=0,1,…,7,进行步骤步骤232~步骤234,得到<img file="497155DEST_PATH_IMAGE001.GIF" wi="14" he="16" />分量的8个量化区间;计算区间映射表map[256],即对于<i>x</i>[<i>x</i><sub><i>k_down</i></sub>,<i>x</i><sub><i>k_up</i></sub>],map(<img file="163760DEST_PATH_IMAGE001.GIF" wi="14" he="16" />)=<i>k</i>;根据各颜色分量的量化区间分布,将四维的图像颜色取值空间被分割为4096个子空间;所述图像调色板生成单元用于根据图像像素在图像颜色取值空间分布情况,计算并输出K个带透明度的图像调色板独立条目,具体步骤如下:遍历图片,根据步骤100得到的信息,提取图像各像素颜色信息,根据每个像素的R、G、B、α值,按照map映射表的规则,映射到4096个子空间中,统计得到每个子空间中像素数目,得到像素的颜色子空间分布直方图;定义指定的调色板长度为<i>K</i>,则将颜色子空间分布直方图按照其像素数目由大到小排列,取排在前面的<i>K</i>个子空间中像素颜色均值为调色板初值;若<i>K</i>≥256,则取步骤2得到的调色板初值为调色板终值;否则,以步骤200中得到的调色板初值为初始质心,以各子空间的像素颜色均值为量化点进行LBG矢量量化<sup>[3]</sup>,得到的最终的调色板值;所述图像颜色量化单元用于量化图像各像素颜色,输出图像各像素索引值,具体步骤如下:遍历图片,计算像素点颜色与每个调色板颜色的空间距离;若调色板小于256,直接取距离最小的调色板条目序号作为像素索引值,否则,在直接取距离最小的调色板条目作为像素颜色的基础上,使用弗洛伊德-斯坦伯格抖动方法量化图像颜色;所述图像输出单元用于根据图像调色板生成单元、图像颜色量化单元输出的数据,生成并输出带透明度的PNG8索引图,即将调色板的RGB分量写入PNG8图像PLET字段,再将调色板的α分量相对应的写入PNG8图像tRNS字段,将像素索引值写入PNG8图像IDAT字段,再添加PNG8图像文件的文件头、文件尾,保存PNG8真彩色索引图,输出得到的图像。
地址 116024 辽宁省大连市高新园区凌工路2号