0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

浅谈图像调试之raw图像问题分析

新机器视觉 来源:ISP Tuning 2023-11-27 10:35 次阅读

1、问题背景

在图像调试过程,当发现一个问题时,很多时候都要通过 dump raw 图像来分析,如果raw图像上有,那就排除了是 ISP的处理导致。

下一步就是排查 sensor 或者镜头,这样可以有效的帮我们定位问题所在。

但遇到过有些 raw, 用工具打不开或者出图不对的情况,那可能是因为 raw 的存储格式不同导致,本文主要对 raw 的格式做下介绍说明。

2、问题分析

a. 什么是 raw

raw 数据是 sensor 输出的原始数据,常用的一般有raw8, raw10, raw12等,分别表示一个像素点有 8bit、10bit、12bit 数据。

是 sensor 将光信号转化为电信号时的电平高低的原始记录,单纯地没有进行任何处理的图像数据,即表现的是 sensor 和镜头本征特性的数据。

raw 数据在输出的时候是有一定顺序的,主要有四种: GRBG、RGGB、BGGR、GBRG,如下图为BGGR格式。

cc6faf98-8c0e-11ee-939d-92fbcf53809c.png

b. raw 分哪几种格式,有什么区别 ?

raw 一般分为 plain raw 和 mipi raw,主要是存储方式上的区别,如下图所示是 Plain raw10 的示意图。

cc80f852-8c0e-11ee-939d-92fbcf53809c.png

10bit的raw,单个像素也就是10bit,需要两个字节(16bit)来存储,那就会空出 6位用不到。

因为有空余,这里就涉及到一个高位/低位对齐的问题,也就是存储数据时,右移6位低位对齐(如上图1所示),左移6位高位对齐(如上图2所示)。

这个主要看平台厂商对数据处理有什么要求,我司用的是高位对齐的数据,所以读取时,要有相应的移位操作才行。

如下图所示是 mipi raw10 的示意图,以大端存储方式为例,它是把4个像素放到5个字节(40bit)中,组成一个包去存储。

cc8d3414-8c0e-11ee-939d-92fbcf53809c.png

前4字节依次存放 raw10 图像的前 4个像素的后 8位,4个像素的前 2位依次存放在包的第 5个字节中。

所以从存储方式来看,mipi raw 的存储方式是要比 plain raw 更节省内存。

c. 怎么正确查看 raw ?

一般raw图工具打开都会要求配置一下 raw 图尺寸、位宽、bayer格式、MSB/LSB。

但一般工具支持 plain raw 打开的居多,还有些并不支持MSB和LSB的选择,所以需要我们对 raw 做一下处理。

如下是mipi raw 转 plain raw 、plain raw10 MSB 转LSB 的相关 python 代码。

分析代码的处理过程,也会加深我们关于raw图像的理解,如下代码中使用的raw图像,可以在公众号后台回复 "raw图" 获取。

# plain raw10 的读取和 MSB转LSB的处理


import numpy as np


def read_plained_file(file_path_name,height,width,shift_bits):
    frame = np.fromfile(file_path_name, dtype="uint16")
    frame=frame[0:height*width]
    frame.shape = [height, width]


    # MSB ----> LSB,  LSB存低位数据,此时是高位对齐的,则右移代表向低位移了6位,数值是减小的状态。
    frame=np.right_shift(frame, shift_bits)  
    return frame


if __name__ == "__main__":
    file_name = "ov13b10_shading_4208X3120_MSB.raw"
    image = read_plained_file(file_name, 3120, 4208, 6)
    image = image / 1023


    # 将读取的 image 数据另存为 raw 数据
    output_file_name = "output_image.raw"


    # 将图像数据映射到 16 位无符号整数范围
    image_mapped = (image * 1023).astype('uint16')
    image_mapped.tofile(output_file_name)
    print(f"Image data has been saved to {output_file_name}")
# mipi raw10 转 plain raw10


import numpy as np
import math


def read_mipi10_file(file_path_name,height,width):
    # 单行长度的补齐
    new_width = int(math.floor((width + 3) / 4) * 4) #对四字节补齐
    packet_num_L = int(new_width / 4)
    width_byte_num = packet_num_L * 5 #单行byte长度
    width_byte_num = int(math.floor((width_byte_num + 7) / 8) * 8)#单行做8个字节补齐
    image_bytes=width_byte_num*height
    frame = np.fromfile(file_path_name, count=image_bytes,dtype ="uint8")
    print("b shape",frame.shape)
    print('%#x'%frame[0])


    frame.shape = [height, width_byte_num] #按字节整理的图像矩阵
    one_byte = frame[:,05]
    two_byte = frame[:,15]
    three_byte = frame[:,25]
    four_byte = frame[:,35]
    five_byte = frame[:,45]


    #数据转换防止溢出
    one_byte = one_byte.astype('uint16')
    two_byte = two_byte.astype('uint16')
    three_byte = three_byte.astype('uint16')
    four_byte = four_byte.astype('uint16')
    five_byte = five_byte.astype('uint16')


    #用矩阵的方法进行像素的拼接
    one_byte = np.left_shift(one_byte, 2) + np.bitwise_and((five_byte), 3)
    two_byte = np.left_shift(two_byte, 2) + np.right_shift(np.bitwise_and((five_byte), 12), 2)
    three_byte = np.left_shift(three_byte, 2) + np.right_shift(np.bitwise_and((five_byte), 48), 4)
    four_byte = np.left_shift(four_byte, 2) + np.right_shift(np.bitwise_and((five_byte), 192), 6)


    #重组帧
    frame_pixels=np.zeros(shape=(height,new_width))
    frame_pixels[:, 0: new_width:4]=one_byte[:, 0: packet_num_L]
    frame_pixels[:, 1: new_width:4]=two_byte[:, 0: packet_num_L]
    frame_pixels[:, 2: new_width:4]=three_byte[:, 0: packet_num_L]
    frame_pixels[:, 3: new_width:4]=four_byte[:, 0: packet_num_L]


    #裁剪无用的数据,这里表示的是0-2559列,包含完整的数据了。
    frame_out=frame_pixels[:,0:width]
    return frame_out


if __name__ == "__main__":
    file_name="imx335_2560x1440_GRBG_mipi.raw"
    image=read_mipi10_file(file_name,1440, 2560)
    image=image/1023


    # 将读取的 image 数据另存为 raw 数据
    output2_file_name = "output2_image.raw"
    # 将图像数据映射到 16 位无符号整数范围
    image_mapped = (image * 1023).astype('uint16')
    image_mapped.tofile(output2_file_name)
    print(f"Image data has been saved to {output2_file_name}")

审核编辑:黄飞

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • ISP
    ISP
    +关注

    关注

    6

    文章

    458

    浏览量

    50850
  • 光信号
    +关注

    关注

    0

    文章

    329

    浏览量

    27575
  • 电信号
    +关注

    关注

    1

    文章

    489

    浏览量

    20110
  • RAW
    RAW
    +关注

    关注

    0

    文章

    20

    浏览量

    3750

原文标题:关于 raw 图像的理解

文章出处:【微信号:vision263com,微信公众号:新机器视觉】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RGB数字图像显示中错误图像分析

    RGB数字图像显示中错误图像分析Incorrect colours in the RGB display of the "digital" colour bars Products:CCVS +[hide][/hide]
    发表于 06-13 00:05

    浅谈大数据视频图像处理系统技术

    浅谈大数据视频图像处理系统技术近年来,随着计算机、网络以及图像处理、传输技术的飞速发展,视频监控系统正向着高清化、智能化和网络化方向发展。视频监控系统的高清化、智能化和网络化为视频监控图像
    发表于 09-24 15:22

    怎样获取bayer raw图像的AWB的参数?使用什么工具。跪求解...

    参数,烧写,工具用度信的,拍照用三星demo板,分析用imatest,基本思路是搞清楚了,但是要分析测试RAW图像的R/Gr,B/Gr的参数没有工具啊,三星也没有,哪位大神给我一点指导
    发表于 09-26 00:13

    例说FPGA连载101:双摄像头图像采集板级调试

    例说FPGA连载101:双摄像头图像采集板级调试① 连接好硬件,SF-VIP1核心板 + SF-VGA子板 + VGA显示器 + 两个SF-MT9D111子板,并且给VIP核心板上电
    发表于 05-16 21:17

    如何获取raw10格式的图像数据

    我正在使用CX3 DEV板来安装OV5640传感器。现在,使用这个例子,我可以得到YUV格式的图像数据,但是我想得到RAW10格式的图像数据。如何修改代码? 以上来自于百度翻译 以下为原文I am
    发表于 10-15 15:59

    图像频率域分析傅里叶变换

    文章目录傅里叶变换基础傅里叶级数傅里叶积分傅里叶变换一维连续傅里叶变换一维离散傅里叶变换二维离散傅里叶变换正变换反变换卷积卷积定理数字图像DFT空间域和频域图像频域滤波基本步骤图像频率特性分析
    发表于 05-22 07:41

    伺服调试—结合图像分析

    ! 我们都还年轻 ,我们还有无限可能 。 YES!伺服调试—结合图像分析(以松下伺服为例)1. 调试前准备工作:1. 1 推定出来惯量比:1.1.1 如何推定惯量比:1. 2 检查驱
    发表于 06-28 10:09

    智能车竞赛浅谈——图像

    前言本文主要记录一点有关智能车摄像头相关的内容,供入门智能车的同学一个参考,主要参考opencv、图像处理的部分知识来分析描述。认识图像基本含义首先,咱来了解一下图像的基本含义,
    发表于 09-24 15:05

    信息计算与时频分析浅谈

    信息计算与时频分析浅谈:信息计算的基本思想与方法数据表示与信号的时频特征,Fourier分析与小波信号时频表示在图像处理与模式识别中的应用信息是蕴含在消息中的知识
    发表于 08-26 08:57 0次下载

    小波分析理论在铁谱图像除噪中的应用

    小波分析理论在铁谱图像除噪中的应用    摘  要:近20年来,铁谱图像识别技术取得了很大发展,但图像存在噪声干扰,给缺陷识别造成一定难度。本文
    发表于 10-22 16:41 11次下载

    浅谈图像增强中的低通和高通滤波

    本文分析和比较了几种典型的空域滤波法的特点,试图通过在有噪声的图像上先进行低通滤波,然后高通滤波,找到一种恢复原始图像轮廓的去噪声方法。在实验的基础上,证明了用中
    发表于 06-24 11:14 101次下载
    <b class='flag-5'>浅谈</b><b class='flag-5'>图像</b>增强中的低通和高通滤波

    图像处理分析与机器视觉_艾海舟译

    本书针对图像处理、图像分析和机器视觉领域的有关原理与技术展开了广泛而深入的讨论,包括图像预处理、图像分割、形状表示与描述、物体识别与
    发表于 10-13 15:52 0次下载
    <b class='flag-5'>图像</b>处理<b class='flag-5'>分析</b>与机器视觉_艾海舟译

    基于小波图像除雾方法分析

    图像增强是指按特定的需要有选择地突出便于人或机器分析的某些感兴趣的信息,同时削弱、抑制-些无用的信息或去除某些不需要的信息的处理方法,也是提高图像质量的过程。图像增强的目的是使
    发表于 10-31 15:56 2次下载
    基于小波<b class='flag-5'>图像</b>除雾方法<b class='flag-5'>分析</b>

    植物冠层图像分析仪的应用

    植物冠层图像分析仪采用国际上一致采用的原理(比尔定律以及冠层孔隙率与冠层结构相关的原理),通过专用鱼眼镜头成像和CCD图像传感器测量冠层数据和获取植物冠层图像,利用软件对所得
    发表于 09-22 17:04 321次阅读

    对于极暗场景RAW图像去噪,你是否还在被标定折磨?

    SID[1] 首先提出一套完整的 benchmark 以及 dataset 进行RAW图像低光增强或去噪。为什么要从RAW图像出发进行去噪和低光增强呢?因为其具有更高的上限,具体可以参
    的头像 发表于 08-11 15:47 793次阅读
    对于极暗场景<b class='flag-5'>RAW</b><b class='flag-5'>图像</b>去噪,你是否还在被标定折磨?