# fast-openISP
**Repository Path**: archenemy/fast-openISP
## Basic Information
- **Project Name**: fast-openISP
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2024-10-12
- **Last Updated**: 2024-10-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 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](https://github.com/cruxopen/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](https://github.com/cruxopen/openISP/blob/master/docs/Image%20Signal%20Processor.pdf)
in openISP, except for EEH and BCC modules. In addition, a CEH (contrast enhancement) module with [CLAHE](https://en.wikipedia.org/wiki/Adaptive_histogram_equalization#Contrast_Limited_AHE) is
added into the fast-openISP pipeline.
### EEH (edge enhancement)
The official openISP uses
an [asymmetric kernel](https://github.com/cruxopen/openISP/blob/49de48282e66bdb283779394a23c9c0d6ba238ff/isp_pipeline.py#L150-L164)
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`](./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](http://opensource.org/licenses/MIT).