为何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
相关产品推荐
相关产品推荐

