Giter Club home page Giter Club logo

autowhitebalance's Introduction

AutoWhiteBalance

efficient and robust white balance algorithm

Introduction

Try to implement google's white balance paper: (The training code is based on google's ffcc code using Matlab, https://github.com/google/ffcc ). I modified the code to get a simplified version with one kernel only for my own project.

Barron, Jonathan T. "Convolutional color constancy." In Proceedings of the IEEE International Conference on Computer Vision, pp. 379-387. 2015.

Barron, Jonathan T., and Yun-Ta Tsai. "Fast Fourier Color Constancy." arXiv preprint arXiv:1611.07596 (2016).

Implmentation

  1. Use tensorflow as a tool for optimization. (I tried, but it seems that tensorflow optimizer can not solve this optimization problem well.)

  2. Implement an optimization solver based on google's ffcc (the open source code of the second paper). The original code has many redundant code, I tried to re-implement a much more clean and easy-use version here.

  3. A fast CUDA based white balance algorithm

How to use

  1. download the training data and pre-trained model and extract to the root dir: link: https://pan.baidu.com/s/1jKeQWKm passwd: h2v5 link: https://drive.google.com/file/d/18d12bQQv_ftPwFS3SZx0nFW6muApW_rB/view?usp=sharing

  2. training code is in ./matlab_training

  3. C++/CUDA code used to apply auto white balance on input image is in ./Cpp

  4. pre-trained model is in ./data/model (you should download it from baiduyun)

autowhitebalance's People

Contributors

yuanxy92 avatar zhu-ty avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

autowhitebalance's Issues

AutoWhiteBalance.Apply() is not found

Hi, yuan,
When I try to test main.cpp, I found that AutoWhiteBalance class does not comtain "Apply" function in main.cpp line 32. Is there something wrong with it?

ps, could you please share me your opencvConfig.cmake. When I cmake CMakeLists.txt, there is always something wrong with opencv.

Thank you very much.

How to run the calc_log_hist.m and visualize_hist.m?

I am trying to understand the "Convolutional Color Constancy" paper. Can you please comment and explain how is the log chroma histogram built and how to actually visualize it?
In the visualize_hist.m function, what is the input X and rho?
I only want to visualize the 2D log chroma histogram.

Why double autoWB.apply() despite no differences in the result?

Hi, yuanxy92.
Thanks for your great implementation!
During my work, I have a question about Cpp implementation codes.
In Cpp/main.cpp Line 32 and 33, you did autoWB.apply() twice.
I commented one of them and found there was no difference in their results.
Do you have any reason to do so?

By the way, I think this function has typo: autoWB.apply() has to be autoWB.calc().
Thanks.

Training data extension

Hi Yuan,

Thanks for the great work! Could you give some instructions about extending the training data?
The pretrained model is not really optimized for my image sensor. I would like to train the system specifically for the images captured by my image sensor.

Thanks!
Burak

Is there any limitation about FFCC algorithms?

Hi yuan, thanks for your sharing.

I used your code to test my own images while the results look not good.
Is there any limitation about this method? PNG16 raw images are used for training. Does it work for normal 8bit image?

  • input image:

image

  • output image:

image

(I modified the funcion name in main.cpp. Is it a correct usage? )

int main(int argc, char* argv[]) {
	AutoWhiteBalance autoWB;
	autoWB.loadModel("E:/Project/AutoWhiteBalance/data/model/model.bin");

	cv::Mat img = cv::imread("E:/data/giga/NanshanIPark/2/calibrate/ref_00.jpg");
	cv::cuda::GpuMat img_d;
	img_d.upload(img);

	float gain_r, gain_g, gain_b;

	time_t begin, end;
	begin = clock();

	// autoWB.apply(img_d, gain_r, gain_g, gain_b);
	// autoWB.apply(img_d, gain_r, gain_g, gain_b);

        autoWB.calc(img_d, gain_r, gain_g, gain_b);

	end = clock();
	printf("Auto white balance update, cost %f milliseconds ...\n",
		static_cast<float>(end - begin) / static_cast<double>(CLOCKS_PER_SEC) * 1000);

	autoWB.applyWhiteBalance(img_d, gain_r, gain_g, gain_b);

	cv::Mat img2;
	img_d.download(img2);

	return 0;
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.