> 文章列表 > 工业相机Bayer RG12 packed 数据解析

工业相机Bayer RG12 packed 数据解析

工业相机Bayer RG12 packed 数据解析

一.优点

作为工业相机压缩的Raw数据,Bayer RG12packed数据具有精度高,不浪费存储空间的优势被广泛应用,每个像素值采用12bit表示,值域是0-4095,比BayerRG12数据节省了4bit的空间(PS:Bayer RG12每个像素值采用16位存储,值域是0-4095,浪费了4bit空间,优势是解码处理简单)

二.数据结构

/*

数据结构

R G

G B

RRRRRRRR rrrrgggg GGGGGGGG

8bit 4+4bit 8bit

--> RRRRRRRRrrrr GGGGGGGGgggg BBBBBBBBbbbb

GGGGGGGG ggggbbbb BBBBBBBB

8bit 4+4bit 8bit

*/

奇数行RGRGRG...

偶数行GBGBGB...

每个像素占用12bit,数据存储单元是8bit(1Byte),每3个Byte表征2个像素值

三.解码

读取3个bytes数据(Byte1,Byte2,Byte3),将第二个值Byte2分为高4位和低4位(h4,l4)

Byte1和h4拼接,Byte3和l4拼接得到

(Byte1<<4)+(Byte2>>4),(Byte3<<4)+(Byte2&0x0f)

//unsigned char *pRG,*pGB...
//read 3 Bytes
nV1 = *pRG++;
nV2 = *pRG++;
nV3 = *pRG++;//decode R G1
nR = int((nV1 << 4) | (nV2 >> 4));
nG1 = int((nV2 & 0x0f) | (nV3 << 4));//read 3 Bytes
nV1 = *pGB++;
nV2 = *pGB++;
nV3 = *pGB++;//decode G2 B
nG2 = int((nV1 << 4) | (nV2 >> 4));
nB = int((nV2 & 0x0f) | (nV3 << 4));