/HDR-ISP

An ISP Pipeline For HDR CMOS Image Sensor

Primary LanguageC++

Image Signal Process For HDR CMOS Image Sensor

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

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

Notes Image
Raw raw
ISP Result(Ours) ISP
FastOpenISP Result Fast ISP

Detail Compare

ISP Image1 Image2 Notes
Ours Our Detail Our Detail Detail and boundaries is clear
Fast Open Isp Open Isp Open Isp Color 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!

Index Repo Language Notes
0 OpenISP Python image signal process in C style
1 fast-openIsp Python open isp speed up verison in python
2 ISP Lab C++ Isp realized by c++
3 xk-ISP C++ 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