Skip to content

fast-openISP: a faster re-implementation of openISP

Notifications You must be signed in to change notification settings

gxxtsz/fast-openISP

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

52 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Fast Open Image Signal Processor (fast-openISP)

As told by its name, fast-openISP is a faster (and bugs-fixed) re-implementation of the openISP project.

Compared to C-style code in the official openISP repo, fast-openISP uses pure matrix implementations based on Numpy, and increases processing speed over 300 times.

Here is the running time in my Ryzen 7 1700 8-core 3.00GHz machine with the 1920x1080 input Bayer array:

Module openISP fast-openISP
DPC 20.57s 0.29s
BLC 11.75s 0.02s
AAF 16.87s 0.08s
AWB 7.54s 0.02s
CNF 73.99s 0.25s
CFA 40.71s 0.20s
CCM 56.85s 0.06s
GAC 25.71s 0.07s
CSC 60.32s 0.06s
NLM 1600.95s 5.37s
BNF 801.24s 0.75s
CEH* - 0.14s
EEH 68.60s 0.24s
FCS 25.07s 0.08s
HSC 56.34s 0.07s
BBC 27.92s 0.03s
End-to-end pipeline 2894.41s 7.82s

* CEH module is not included in the official openISP pipeline.

Usage

Clone this repo and run

python demo.py

The ISP outputs will be saved to ./output directory.

The only required package for pipeline execution is numpy. opencv-python and scikit-image are required only for data IO.

Algorithms

All modules in fast-openISP reproduce processing algorithms in openISP, except for EEH and BCC modules. In addition, a CEH (contrast enhancement) module with CLAHE is added into the fast-openISP pipeline.

EEH (edge enhancement)

The official openISP uses an asymmetric kernel to extract edge map. In fast-openISP, however, we use the subtraction between the original and the gaussian filtered Y-channel as the edge estimation, which reduces the artifact when the enhancement gain is large.

BCC (brightness & contrast control)

The official openISP enhances the image contrast by pixel-wise enlarging the difference between pixel values and a constant integer (128). In fast-openISP, we use the median value of the whole frame instead of a constant.

Parameters

Tunable parameters in fast-openISP are differently named from those in openISP, but they are all self-explained, and no doubt you can easily tell the counterparts in two repos. All parameters are managed in a yaml in ./configs, one file per camera.

Demo

Bayer Input
CFA Interpolation
Color Correction
Gamma Correction
Non-local Means & Bilateral Filter
Contrast Enhancement
Edge Enhancement
Hue & Saturation Control
Brightness & Contrast Control

License

Copyright 2021 Qiu Jueqin.

Licensed under MIT.

About

fast-openISP: a faster re-implementation of openISP

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Python 100.0%