TL;DR: send contributions through PRs. Please try to use matrix operations in your implementations. Create an issue for problems and support.
This document has the purpose of informing how to effectively contribute to this repository.
This repository (SIHR
) is intented for reproduction and development of single image highlight removal methods, so the biggest challenge isn't even coding, rather, reading the related research papers and deciphering how to implement them.
So, please don't feel overwhelmed by the amount of minute detail on contributing, it's mostly to give an overview should you need additional information on general MATLAB/GNU Octave development.
There is a number of ways you can help, and it's not restricted to code contributions.
In the first section (below) I'll put down a few words on non-code contributions.
Note: since deep learning models typically require a whole project for a complete "reproducibility suite", these will not be initially accounted for in this repository. In addition, they are outside the current domain of application for these methods (image enhancement for visual display systems). On a future version, perhaps.
If you'd like to collaborate on a survey on this specific subject, please contact me. You can find contact information here. I have set up a SIHR interest group on Mendeley for this purpose.
Since we're a small community and this is a rather small repository, feel free to create an issue with any comments on bugs, improvements, compatibility problems, etc. and I will get to them eventually (or hopefully someone else will first).
As the methods are single-input, single-output, general testing and functionality verification is done by simply invoking the methods' functions with a valid input.
Additionally on a general note, I expect that new methods contributed fulfill the I_d = AuthorYEAR(I);
command, I
being any input image of numeric floating-point class single | double
representing linear RGB values in [0, 1]
and size m×n×3, m and n non-zero, non-singleton, positive integers, and I_d
the corresponding diffuse image of same class, domain and dimension.
In short: double RGB image in, double RGB image out.
Note: there is a utils/automated_testing.m
script to reproduce reported quality results. Be warned that Tan2005
, Yoon2006
and Akashi2016
run very slowly on Octave (lots of iterations).
Please send a pull request to the main repository. Please follow the coding conventions (below) to some extent and make sure all of your commits are restricted to either one method or one general modification per commit. Try to write a concise log message for the commits.
The beauty in MATLAB/GNU Octave syntax is that there's nothing exquisite about it, it just stays out of your way in favor of mathematics-oriented programming. Just try to keep it tidy. And always favor matrix operations.
Some loose tips on formatting:
- On MATLAB:
- Please use default smart identing settings. Apply in editor via Ctrl + I or ⌘ Cmd + I
- Exception can be made for aligned comments, assignments and general data
- Optionally, use MBeautifier
- I recommend adding the provided shortcuts
- To disable (for, e.g. same case as above), see the directives
- Please use default smart identing settings. Apply in editor via Ctrl + I or ⌘ Cmd + I
- On Octave:
- Follow the Octave style guide to some extent
Some tips on matrix-vector coding:
- Always prefer operations in the following order: matrix ≻ array ≻ scalar
- From the MATLAB documentation: Techniques to Improve Performance
- From the Octave documentation: Basic Vectorization
bsxfun
is needed for MATLAB versions earlier than 2016b for implicit expansion- Octave also supports implicit expansion. It goes by the name of broadcasting
- Short "books"
Please follow the MATLAB basic structure for help
text: Add Help for Your Program.
Octave provides additional stylistic guidelines: Help text.
Octave is "less compatible" with MATLAB than the inverse relation. Reason being that Octave is not merely an open-source copy of MATLAB and actually has its own language extensions.
See this wikibooks entry: MATLAB Programming/Differences between Octave and MATLAB.
My personal recommendation is to code in MATLAB-style syntax and then check Octave for functionality compatibility. In case of incompatibility, either change algorithmic/coding approach or implement the desired functionality from scratch.
You can use the utils
folder for such eventual functions.
Please be polite.
Vítor Ramos
E-mail: [email protected]
1
1 +SIHR
works, please append it so I know where you're coming from