Image Signal Process For HDR CMOS Image Sensor

September 30, 2024 · View on GitHub

CH | EN

Project Description

An ISP pipeline written in C++ for HDR cameras

  • The ISP modules are written in C style
  • Without other library dependencies
  • Can be deployed various embedded platforms
  • Customize your pipeline through json configuration

The Isp support run on GPU(on branch gpu_dev)

Default Pipeline

Pipeline

Support ISP Module Lists

  • Raw Domain
    • MipiUnPack: mipi raw data unpack to raw16
    • DePwl: decode the pwl curve
    • Dpc: dynamic pixel correct
    • Lsc: lens shding correct
    • Blc: black level correct
    • Rns: raw noise filter
    • WbGain: white balance gain
    • Demoasic: change raw to rgb
  • RGB Domain
    • Ltm: local tone mapping
    • RgbGamma: rgb gamma curve
    • Ccm: color correct matrix
    • Rgb2Yuv: rgb domain to yuv domain
  • YUV Domain
    • YGamma: gray gamma curve
    • Contrast: gray contrast adjust
    • Sharpen: gray usm sharpen
    • Cns: chrome noise filter
    • Saturation: chrome saturation
    • Yuv2Rgb: yuv domain to rgb domain

How To Build and Run

Linux

Develop Env :

#dependencies install(cmake and opencv)
sudo apt update
sudo apt install cmake

Build

git clone https://github.com/JokerEyeAdas/HDR-ISP
cd HDR-ISP/
mkdir build
cmake ..
make -j12

Windows

Develop Env (x64):

  • vs code
  • cmake
  • vs2019 c++ gen tool

build tool

Build

git clone https://github.com/JokerEyeAdas/HDR-ISP
code HDR-ISP
#cmake choose Debug or Release
#compiler choose xxx-amd64
#build all

How To Run

cd build
#cp cfgs and data
cp -r ../data/ ./
cp -r ../cfgs/ ./
#run isp
./HDR_ISP ./cfgs/isp_config_cannon.json

How To Tunning Params

By changing Json Config

example1, change sensor params:

    "raw_file": "./data/connan_raw14.raw",
    "out_file_path": "./",
    "info": {
        "sensor_name": "cannon",
        "cfa": "RGGB",
        "data_type": "RAW16",
        "bpp": 16,
        "max_bit": 14,
        "width": 6080,
        "height": 4044,
        "mipi_packed": 0
    },

example2, change rgb gamma params:

"rgbgamma": {
        "enable": true,
        "in_bit": 10,
        "out_bit": 8,
        "gammalut_nums": 11,
        "gammalut": [
            0,
            0.3504950718773984,
            0.48243595264750255,
            0.57750428843709,
            0.6596458942714417,
            0.731034378464739,
            0.7925580792857235,
            0.8509817015104557,
            0.9029435754464383,
            0.9534255851019492,
            1.0
        ]
    }

Result

ISP Result

NotesImage
Rawraw
ISP Result(Ours)ISP
FastOpenISP ResultFast ISP

Detail Compare

ISPImage1Image2Notes
OursOur DetailOur DetailDetail and boundaries is clear
Fast Open IspOpen IspOpen IspColor banding and detail lost

Follow-Up

  • Support Dpc, Rns, Cns and other ISP modules;
  • Write ISP tunning GUI tools.

Project Support

  • Thanks for your support, we hope that my project can help your work

Appreciation Code

Reference Repo

Thanks for the following code repository!

IndexRepoLanguageNotes
0OpenISPPythonimage signal process in C style
1fast-openIspPythonopen isp speed up verison in python
2ISP LabC++Isp realized by c++
3xk-ISPC++C++ ISP For HLS on FPGA

Follow Me

Zhihu:EYES OF ADAS | Blog:EYES OF ADAS | WeChat:

WeChat

Eyes of Adas Copyright Reserved @2023, No commercial use without permission