拆分code:(rggb排序)
拆分函数的输入raw数据为numpy类型,且默认为16位在0到1之间。
def pack_rggb_raw(raw):
# black_level = 240
# white_level = 2 ** 12 - 1
# #print(raw)
# im = raw.astype(np.float32)
# #print(im)
# im = np.maximum(im - black_level, 0) / (white_level - black_level) #是否要减去黑电平
im = np.expand_dims(raw, axis=2)
img_shape = im.shape
H = img_shape[0]
W = img_shape[1]
#im = im.astype(np.uint16)
out = np.concatenate((im[0:H:2, 0:W:2, :], # r
im[0:H:2, 1:W:2, :], # gr
im[1:H:2, 1:W:2, :], # b
im[1:H:2, 0:W:2, :]), axis=2) # gb
return out
合成code:(rggb排序)
def depack_rggb_raw(raw):
H = raw.shape[0]
W = raw.shape[1]
output = np.zeros((H * 2, W * 2))
for i in range(H):
for j in range(W):
output[2 * i, 2 * j] = raw[ i, j, 0] # gb
output[2 * i, 2 * j + 1] = raw[ i, j, 1] # b
output[2 * i + 1, 2 * j] = raw[ i, j, 3] # r
output[2 * i + 1, 2 * j + 1] = raw[ i, j, 2] # gr
#print(output)
#print(1111111111111111111111)
output = output*(2**16) #恢复到16位
output = output.astype(np.uint16)
#print(output)
return output