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

为何raw_image尺寸与索尼相机传感器尺寸一致?RGGB格式疑问

关于索尼ARW文件raw_image形状与Bayer像素提取的问题

你用rawpy获取的raw_image形状(4024, 6048)是完全正常的,这就是索尼传感器的实际物理像素尺寸。Bayer RGGB模式的核心是每个物理像素只记录一种颜色的亮度值,并非每个像素包含RGGB四个通道,所以数组的每个元素对应一个单色Bayer像素(R/G/G/B中的一种),不存在你以为的(8048, 12096)形状。

提取单个Bayer彩色像素的亮度值

要获取RGGB各通道的像素亮度,可以通过数组切片直接分离:

import rawpy
import numpy as np

# 读取raw文件并获取raw_image
im_raw = rawpy.imread('Test.ARW').raw_image
print(f"Raw图像形状:{np.shape(im_raw)}")

# 按RGGB排列提取各通道(假设左上角为R像素)
r_channel = im_raw[::2, ::2]       # 所有偶数行、偶数列的像素(R)
g1_channel = im_raw[::2, 1::2]     # 所有偶数行、奇数列的像素(G)
g2_channel = im_raw[1::2, ::2]     # 所有奇行、偶数列的像素(G)
b_channel = im_raw[1::2, 1::2]     # 所有奇行、奇数列的像素(B)

# 打印各通道形状
print(f"R通道形状:{np.shape(r_channel)}")
print(f"G1通道形状:{np.shape(g1_channel)}")
print(f"G2通道形状:{np.shape(g2_channel)}")
print(f"B通道形状:{np.shape(b_channel)}")

每个通道的形状为(2012, 3024),是原尺寸的1/4,因为每2×2的Bayer像素块包含1个R、2个G、1个B像素。

获取全尺寸RGB像素亮度

如果需要得到和传感器尺寸同大小的每个像素的三通道RGB亮度值,需要对raw图像进行**去马赛克(Demosaic)**处理,rawpy的postprocess()方法可以直接完成:

import rawpy

with rawpy.imread('Test.ARW') as raw:
    rgb_image = raw.postprocess()
print(f"去马赛克后的RGB图像形状:{np.shape(rgb_image)}")  # 输出(4024, 6048, 3)

此时rgb_image的每个元素就是对应像素的R、G、B三个通道的亮度值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:43:32