A game surprised me – actually it was lean to negative side – by design new circuit and programming it into each component inside – what a brilliant idea, hugh ? It looks like explain : A game for working (or training ) even I am playing a game!
Name of that game was “Shenzhen IO”, much familiar word Shenzhen may made me surprised again. May many engineers really familiar name of area in China – “Shenzhen”.
Image from Godgle map.
If you have plane to buy this crazy game, and wanna work in your game, strongly recommend buy this working-game “Shenzhen IO”!
And you may remind this game is not from China, it is born in Mesacgusetts state of Ameria – and must be programmers are from MIT. Now pick up your crow bar to fight with them !
Or, Maybe some instructions or Ph.D loves this game to give experience to their students are going more stained with stress, what a brilliant, hugh, Great !
By using CLAHE algorithm, there’s some problem occurs by object shapes like this:
Each edge side of object going too darken by window leveling. It is defecting issue of CLAHE. So I tried to make it corrected with shading correction.
Here is source raw image, 14bit gray.
First, I need make a background mask to overriding changed level after CLAHE.
It can generate simply by using my librawprocessor. Then I applied CLAHE, 10×10, 30.0f.
Shadowed or shaded areas occurs after applying CLAHE, it must be corrected. So I made shaded map with my fast resize engine. Down scale to 10% of original image size with Bi-Linear filter, then up scale again with B-Spline filter with inverse.
It is much effective than Gaussian blur. Very fast but similar to Gaussian blurred. almost realtime in 3000×3000 array with floating point levels in AVX and OpenMP optimization.
Now I am just add masked shade map level with exponential to original image.
if ( ( src == NULL ) || ( smap == NULL ) )
if ( src->Width() != smap->Width() )
if ( src->Height() != smap->Height() )
float* datasrc = src->Data();
float* datamap = smap->Data();
#pragma omp parellel for
for( unsigned cnt=0; cnt< src->Size(); cnt++ )
float diffs = datamap[ cnt ];
if ( diffs > 0.0f )
datasrc[ cnt ] += exp( diffs );
Result is :
Shaded object areas seems to enhanced than before. So I continued to applying background mask.
Ok, then I made it to window leveled.
Each edge sides are not seems to much shaded than before. It should be better than applying single CLAHE. I will continue to write more effective image processing with CLAHE.
High dynamic tone mapping is a kind of graphical thesis to indemnify exposure of whole a image specially such as 256 leveled Red, Green, Blue (+Alpha transparency) formats. But high dynamic calculates all pixel levels as an floating point number with luminance ( in case of RGB, it convert each color channels to a luminance level ) to enhance for more dynamic ranged.
Examined all algorithms and refered to Free Image 3 library for how to make it as C++ code. Proceeded to stand-alone codes and finally embedded to my open source project, librawprocessor at my github repository.
As my experimental study, High dynamic tone mapping was enhances low exposed/qulity medical images to fully ranged pixel levels in same min/max range.
Left image is original digital medical chest PA TFT detector image and it could be ranged about 0 to 2700.
Right image is processed Reinhard alogortihm (with parameters : contrast 1.0 and adaptation 0.5) to expand dynamic range.
Pixel levels spreads down to about 6500 without high peak as above image. Every pixel levels be flatten. It will be expected to better for adjust post image processing with less loses.
Also it much better to examine anatomy with no special signal processing. Just doing thresholding window leveling makes good result to check organs.