raw数据拆分成rggb四通道,拆分与合成

拆分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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
要在MATLAB中实现对raw数据的处理,可以使用以下代码: ```matlab function image = readraw(filename) type = 'uint8'; f1 = fopen(filename, 'r'); data = fread(f1, type); fclose(f1); len = length(data); if len == 640*400 M = 640; N = 400; else M = 1280; N = 800; end k = len/(M*N); image = reshape(data, M, N, k); image = transpose(image); image = fliplr(image); end function corrected = apply_cmatrix(im, cmatrix) if size(im, 3) ~= 3 error('Apply cmatrix to RGB image only.') end r = cmatrix(1,1)*im(:,:,1) + cmatrix(1,2)*im(:,:,2) + cmatrix(1,3)*im(:,:,3); g = cmatrix(2,1)*im(:,:,1) + cmatrix(2,2)*im(:,:,2) + cmatrix(2,3)*im(:,:,3); b = cmatrix(3,1)*im(:,:,1) + cmatrix(3,2)*im(:,:,2) + cmatrix(3,3)*im(:,:,3); corrected = cat(3, r, g, b); end function colormask = wbmask(m, n, wbmults, align) colormask = wbmults(2) * ones(m, n); switch align case 'rggb' colormask(1:2:end, 1:2:end) = wbmults(1); colormask(2:2:end, 2:2:end) = wbmults(3); end end ``` 这段代码包含了三个函数。`readraw`函数用于读取raw文件并将其转换为图像数据。`apply_cmatrix`函数用于应用颜色矩阵对RGB图像进行校正。`wbmask`函数用于生白平衡掩码。你可以根据需要调用这些函数来处理raw数据。 #### 引用[.reference_title] - *1* [MATLAB【一】————raw图读取,图像做减法,批量文本处理,子图显示](https://blog.csdn.net/Darlingqiang/article/details/105832563)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [在MATLAB中处理RAW图像](https://blog.csdn.net/weixin_44690935/article/details/107464196)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SetMaker

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值