RGB24转YUV422转换算法
注:1:相关图像知识请参考相关网站。推荐:http://www.cnblogs.com/azraelly/archive/2013/01/01/2841269.html
2:本文转换算法基于:《YUV422到RGB24的转换算法》 引用地址:http://wenku.baidu.com/link?url=CPytux0pXwjAhmwz6dd3JBsSVSpYXG8Jt07VWNYoZ6ibRJQxVDtOFpqIEGyRv17ZO5DsfBQZl9Kg8WNrJgDveiFccQT581hyzwZzLKKn1-K
RGB24即RGB888,YUV422即YCbCr422。
RGB888码流格式为:R[7:0] G[7:0] B[7:0]. YCbCr422的码流格式为:Y0 Cb Y1 Cr.
在转换的过程中,需要完成两个步骤:第一步,将RGB24转换成YUV444,在这个转换过程中,不会有任何的像素损失。第二步,将YUV444转换成YUV422,转换思想为抽取Cb与Cr。这种图像标准相比于YUV444,损耗像素33.3%。
第一步:RGB24转换成YUV444,可以依据公式:
转换以后的图像即为YUV444。
第二步:YUV444转YUV422,
对于YUV444来说,一个Y对应一个U和一个V,其中Y U V为一一对应的关系,即由每对RGB转化而来的。在每一个像素单元,由48bit组成两个像素,每个像素24bit.
对于YUV422来说,两个Y对应一个U和一个V,其中Y0 U V为一一对应的关系,即Y0 U V是第一对RGB转化而来的,而第二对RGB仅仅转化成Y1。这样,两个像素共有32bit.第一个像素点24bit,第二个像素点8bit.
根据YUV444和YUV422的码流做如下定义:
YUV444码流: Y0 U0 V0 Y1 U1 V1
YUV422码流: Y0 U0 Y1 V0
这部分主要做像素抽取,即YUV422不采样YUV444 U1 V1的数据,所以会损失像素点。
YUV444[i] = YUV422[j]
YUV444[i+1] = YUV422[j+1]
YUV444[i+2] = YUV422[j+3]
YUV444[i+3] = YUV422[j+2]
在YUV422转YUV444的时候,这部分主要做像素复制,将U0 V0的值复制到U1 V1。
YUV444[i] = YUV422[j]
YUV444[i+1] = YUV422[j+1]
YUV444[i+2] = YUV422[j+3]
YUV444[i+3] = YUV422[j+2]
YUV444[i+4] = YUV422[j+1]
YUV444[i+5] = YUV422[j+3]
所有的转换,都必须基于相应格式的码流。