0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

淺談圖像調試之raw圖像問題分析

新機器視覺 ? 來源:ISP Tuning ? 2023-11-27 10:35 ? 次閱讀

1、問題背景

在圖像調試過程,當發(fā)現一個問題時,很多時候都要通過 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 分哪幾種格式,有什么區(qū)別 ?

raw 一般分為 plain raw 和 mipi raw,主要是存儲方式上的區(qū)別,如下圖所示是 Plain raw10 的示意圖。

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

10bit的raw,單個像素也就是10bit,需要兩個字節(jié)(16bit)來存儲,那就會空出 6位用不到。

因為有空余,這里就涉及到一個高位/低位對齊的問題,也就是存儲數據時,右移6位低位對齊(如上圖1所示),左移6位高位對齊(如上圖2所示)。

這個主要看平臺廠商對數據處理有什么要求,我司用的是高位對齊的數據,所以讀取時,要有相應的移位操作才行。

如下圖所示是 mipi raw10 的示意圖,以大端存儲方式為例,它是把4個像素放到5個字節(jié)(40bit)中,組成一個包去存儲。

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

前4字節(jié)依次存放 raw10 圖像的前 4個像素的后 8位,4個像素的前 2位依次存放在包的第 5個字節(jié)中。

所以從存儲方式來看,mipi raw 的存儲方式是要比 plain raw 更節(jié)省內存。

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位,數值是減小的狀態(tài)。
    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) #對四字節(jié)補齊
    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個字節(jié)補齊
    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] #按字節(jié)整理的圖像矩陣
    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}")

審核編輯:黃飛

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • ISP
    ISP
    +關注

    關注

    6

    文章

    474

    瀏覽量

    51670
  • 光信號
    +關注

    關注

    0

    文章

    430

    瀏覽量

    27730
  • 電信號
    +關注

    關注

    1

    文章

    784

    瀏覽量

    20510
  • RAW
    RAW
    +關注

    關注

    0

    文章

    21

    瀏覽量

    3785

原文標題:關于 raw 圖像的理解

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    FPGA視頻圖像抓取案例分析

    MYD-CZU3EG-ISP 提供4K分辨率的攝像頭功能,同時輸出4K分辨率的圖像顯示到圖像輸出接口,下面帶一起來體驗FPGA的圖像抓取和圖像顯示的操作和應用。
    發(fā)表于 11-05 12:37 ?1956次閱讀

    RGB數字圖像顯示中錯誤圖像分析

    RGB數字圖像顯示中錯誤圖像分析Incorrect colours in the RGB display of the "digital" colour bars Products:CCVS +[hide][/hide]
    發(fā)表于 06-13 00:05

    淺談大數據視頻圖像處理系統技術

    淺談大數據視頻圖像處理系統技術近年來,隨著計算機、網絡以及圖像處理、傳輸技術的飛速發(fā)展,視頻監(jiān)控系統正向著高清化、智能化和網絡化方向發(fā)展。視頻監(jiān)控系統的高清化、智能化和網絡化為視頻監(jiān)控圖像
    發(fā)表于 09-24 15:22

    怎樣獲取bayer raw圖像的AWB的參數?使用什么工具。跪求解...

    參數,燒寫,工具用度信的,拍照用三星demo板,分析用imatest,基本思路是搞清楚了,但是要分析測試RAW圖像的R/Gr,B/Gr的參數沒有工具啊,三星也沒有,哪位大神給我一點指導
    發(fā)表于 09-26 00:13

    例說FPGA連載101:雙攝像頭圖像采集板級調試

    例說FPGA連載101:雙攝像頭圖像采集板級調試① 連接好硬件,SF-VIP1核心板 + SF-VGA子板 + VGA顯示器 + 兩個SF-MT9D111子板,并且給VIP核心板上電
    發(fā)表于 05-16 21:17

    如何獲取raw10格式的圖像數據

    我正在使用CX3 DEV板來安裝OV5640傳感器?,F在,使用這個例子,我可以得到YUV格式的圖像數據,但是我想得到RAW10格式的圖像數據。如何修改代碼? 以上來自于百度翻譯 以下為原文I am
    發(fā)表于 10-15 15:59

    圖像頻率域分析傅里葉變換

    文章目錄傅里葉變換基礎傅里葉級數傅里葉積分傅里葉變換一維連續(xù)傅里葉變換一維離散傅里葉變換二維離散傅里葉變換正變換反變換卷積卷積定理數字圖像DFT空間域和頻域圖像頻域濾波基本步驟圖像頻率特性分析
    發(fā)表于 05-22 07:41

    伺服調試—結合圖像分析

    ! 我們都還年輕 ,我們還有無限可能 。 YES!伺服調試—結合圖像分析(以松下伺服為例)1. 調試前準備工作:1. 1 推定出來慣量比:1.1.1 如何推定慣量比:1. 2 檢查驅
    發(fā)表于 06-28 10:09

    智能車競賽淺談——圖像

    前言本文主要記錄一點有關智能車攝像頭相關的內容,供入門智能車的同學一個參考,主要參考opencv、圖像處理的部分知識來分析描述。認識圖像基本含義首先,咱來了解一下圖像的基本含義,
    發(fā)表于 09-24 15:05

    基于圖像分析的黃豆質量評估系統

    基于圖像分析的黃豆質量評估系統/基于圖像分析的黃豆質量評估系統
    發(fā)表于 12-14 17:58 ?0次下載

    PyTorch教程7.2圖像卷積

    電子發(fā)燒友網站提供《PyTorch教程7.2圖像卷積.pdf》資料免費下載
    發(fā)表于 06-05 10:13 ?0次下載
    PyTorch教程7.2<b class='flag-5'>之</b><b class='flag-5'>圖像</b>卷積

    PyTorch教程14.1圖像增強

    電子發(fā)燒友網站提供《PyTorch教程14.1圖像增強.pdf》資料免費下載
    發(fā)表于 06-05 14:24 ?0次下載
    PyTorch教程14.1<b class='flag-5'>之</b><b class='flag-5'>圖像</b>增強

    對于極暗場景RAW圖像去噪,你是否還在被標定折磨?

    SID[1] 首先提出一套完整的 benchmark 以及 dataset 進行RAW圖像低光增強或去噪。為什么要從RAW圖像出發(fā)進行去噪和低光增強呢?因為其具有更高的上限,具體可以參
    的頭像 發(fā)表于 08-11 15:47 ?1343次閱讀
    對于極暗場景<b class='flag-5'>RAW</b><b class='flag-5'>圖像</b>去噪,你是否還在被標定折磨?

    機器視覺圖像增強和圖像處理

    對原始獲取圖像進行一系列的運算處理,稱為圖像處理。圖像處理是機器視覺技術的方法基礎,包括圖像增強、邊緣提取、圖像分割、形態(tài)學處理、
    發(fā)表于 10-23 10:43 ?503次閱讀
    機器視覺<b class='flag-5'>之</b><b class='flag-5'>圖像</b>增強和<b class='flag-5'>圖像</b>處理

    機器視覺圖像增強和圖像處理

    一、圖像處理技術概述1.定義對原始獲取圖像進行一系列的運算處理,稱為圖像處理。圖像處理是機器視覺技術的方法基礎,包括圖像增強、邊緣提取、
    的頭像 發(fā)表于 10-26 08:07 ?897次閱讀
    機器視覺<b class='flag-5'>之</b><b class='flag-5'>圖像</b>增強和<b class='flag-5'>圖像</b>處理