工业相机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));