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]

所有的转换,都必须基于相应格式的码流。

posted @ 2016-03-17 17:38  D&di  阅读(5567)  评论(0编辑  收藏  举报