You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SRGGB12格式RGGB转RGB:移除空值并调整输出矩阵维度

SRGGB12格式转RGB:去除空值并输出(3,2,2)矩阵

相机传感器输出为SRGGB12格式,现有测试代码将4x4的RGGB数组转换为(3,4,4)矩阵,但存在大量空条目。需要删除所有空值,使输出变为(3,2,2)矩阵,并调整给定的conver_rggb_to_rgb函数实现该需求。

原测试代码及输出

import numpy as np

rggb = np.array([['R', 'G', 'R', 'G'],
                 ['G', 'B', 'G', 'B'],
                 ['R', 'G', 'R', 'G'],
                 ['G', 'B', 'G', 'B']])


test2 = np.chararray((3, 4, 4))
test2[:] = ''
test2[2,::2, ::2] = rggb[1::2, 1::2]  # blue
test2[1,1::2, ::2] = rggb[0::2, 1::2]  # green
test2[1,::2, 1::2] = rggb[1::2, 0::2]  # green
test2[0,1::2, 1::2] = rggb[0::2, 0::2]  # red
print(test2)

输出:

[[['' '' '' '']
  ['' b'R' '' b'R']
  ['' '' '' '']
  ['' b'R' '' b'R']]

 [['' b'G' '' b'G']
  [b'G' '' b'G' '']
  ['' b'G' '' b'G']
  [b'G' '' b'G' '']]

 [[b'B' '' b'B' '']
  ['' '' '' '']
  [b'B' '' b'B' '']
  ['' '' '' '']]]
(3, 4, 4)

待调整的原函数

def conver_rggb_to_rgb(rggb):

  ret_arr = np.zeros((rggb.shape[0]//2, rggb.shape[1]//2, 3)).astype(np.uint16)

  blue = rggb[1::2, 1::2]    # blue
  green1 = rggb[0::2, 1::2]  # green
  green2 = rggb[1::2, 0::2]  # green
  red = rggb[0::2, 0::2]     # red

  ret_arr[:,:,0] = red
  ret_arr[:,:,1] = (green1 + green2)/2
  ret_arr[:,:,2] = blue

  return ret_arr

修改后的函数及说明

原函数的核心逻辑是对的,但需要调整输出维度顺序,直接生成无空值的紧凑(3,2,2)矩阵:

def conver_rggb_to_rgb(rggb):
    # 提取Bayer格式中各颜色通道的有效像素
    red = rggb[0::2, 0::2]     # R像素位于偶数行偶数列
    green1 = rggb[0::2, 1::2]  # G像素位于偶数行奇数列
    green2 = rggb[1::2, 0::2]  # G像素位于奇数行偶数列
    blue = rggb[1::2, 1::2]    # B像素位于奇数行奇数列
    
    # 合并两个绿色通道取平均值,符合Bayer转RGB的标准处理
    green = (green1 + green2) / 2
    
    # 将单通道数组按通道维度堆叠,生成(3,2,2)格式的输出
    ret_arr = np.stack([red, green, blue], axis=0).astype(np.uint16)
    
    return ret_arr

验证效果

用测试数组调用修改后的函数:

# 替换为实际SRGGB12数值(此处用字符示例,实际用uint16类型数值)
rggb = np.array([[100, 150, 110, 160],
                 [140, 200, 130, 190],
                 [105, 155, 115, 165],
                 [145, 205, 135, 195]]).astype(np.uint16)

result = conver_rggb_to_rgb(rggb)
print(result.shape)  # 输出 (3, 2, 2)
print(result)

关键改动说明

  1. 维度重构:使用np.stack将(2,2)的单通道数组直接堆叠为(3,2,2)矩阵,完全避免空值,实现紧凑输出。
  2. 通道顺序:按[red, green, blue]顺序堆叠,匹配需求的通道在前的格式。
  3. 类型兼容:保留np.uint16类型,适配SRGGB12的12位无符号整数输出特性。

内容的提问来源于stack exchange,提问作者SkyImager

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 11:00:55