Stefano Tommesani

  • Increase font size
  • Default font size
  • Decrease font size

AltaLux: new major release

E-mail Print PDF

AltaLux is an image processing technology that can significantly enhance the quality of images and videos with poor lighting conditions.

AltaLux/Demo is a Windows sample application that lets you enhance the quality of JPEG images for free (download it! from the download area). For even better usability, I strongly recommend using AltaPixShare as it has a vastly better interface.

For IrfanView and XnView users, you can download the AltaLux plugins for IrfanView and XnView.

The animation above shows how the AltaLux filter performs on a real photo, ranging from left (no enhancement) to right (max level of enhancement). On the original photo the palace is underexposed, it appears dark as the sky in the background is much clearer; increasing the amount of enhancement to an intermediate level takes the palace out of the dark, exposing its facade; moving the enhancement to max is too much of a good thing, as previously hidden details pop out of the screen but the scene does not appear natural at all.

Update: the new 2.5 version includes an additional setting (Scale) that changes how each zone of the image influences nearby ones.Click here for a visual explanation of how it affects filter's results.

Last Updated on Friday, 03 May 2013 16:03
 

Multi-thread loops with Intel TBB

E-mail Print PDF

A new article about using Intel TBB is here. It contains examples using C++ lambdas and joining multi-threaded loops with SIMD code

In this article we will transform a plain C loop into a multi-threaded version using Intel Thread Building Blocks library (TBB).

Here is the loop to transform:


unsigned char *SrcImagePtr = (unsigned char *)SrcImage;
unsigned char *DstImagePtr = (unsigned char *)DstBuffer;
for (int i = (OriginalImageWidth * OriginalImageHeight); i > 0; i--)
{
int YValue = (SrcImagePtr[0] * FirstFactor ) +
(SrcImagePtr[1] * SecondFactor) +
(SrcImagePtr[2] * ThirdFactor );
SrcImagePtr += PixelOffset;
YValue += 1 << (SCALING_LOG - 1);
YValue >>= SCALING_LOG;
if (YValue > 255)
YValue = 255;
*DstImagePtr = (unsigned char)YValue;
DstImagePtr++;
}

This loops iterates over a three-channel image named SrcImage (usually a RGB one), and it computes the luma value for each pixel storing it into DstImage. As the computation of every pixel has no dependencies whatsoever on other pixel, it is very simple to separate this computation into multiple threads, each performing it on a different slice of the image.

Even if we could directly use threads for such a task, it is much simpler and faster to use an ad-hoc library such as Intel's Thread Building Blocks.

 

Last Updated on Wednesday, 01 May 2013 14:11
 

About Stefano Tommesani

E-mail Print PDF

ProfiloSmall15 years of experience in the CCTV area, including:

  • R&D
  • strategic planning and partnerships
  • pre-sales
  • HW / SW integration
  • QA


Broad software development experience, from flashy GUIs to down-to-the-metal assembly programming, and a performance-minded approach to development allow me to reach outstanding results in software products:

  • Design and implementation of security systems
  • Advanced video analysis for threat detection
  • Advanced image processing
  • Audio and video coding and compression
  • Network multi-protocol programming and remoting
  • System management and monitoring
  • Windows system programming
  • Code optimization, from high-level architectural design to multi-threading, low-level SIMD assembly coding and GPGPU
  • Detailed knowledge of SD best practices: OOD, Agile with Scrum, unit testing, TDD, IoC, AoP.

Programming languages: over 14 years of professional experience with C/C++, C#, Delphi, x86 assembler.

 

 

 

 

Last Updated on Saturday, 12 March 2016 16:12
 


Page 9 of 9
View Stefano Tommesani's profile on LinkedIn

Latest Articles

Necessary evil: testing private methods 29 January 2017, 21.41 Testing
Necessary evil: testing private methods
Some might say that testing private methods should be avoided because it means not testing the contract, that is the interface implemented by the class, but the internal implementation of the class itself. Still, not all
I am right and you are wrong 28 December 2016, 14.23 Web
I am right and you are wrong
Have you ever convinced anyone that disagreed with you about a deeply held belief? Better yet, have you changed your mind lately on an important topic after discussing with someone else that did not share your point of
How Commercial Insight changes R&D 06 November 2016, 01.21 Web
How Commercial Insight changes R&D
The CEB's Commercial Insight is based on three pillars: Be credible/relevant – Demonstrate an understanding of the customer’s world, substantiating claims with real-world evidence. Be frame-breaking – Disrupt the
Windows Forms smells funny, but... 07 April 2016, 15.38 Software
Windows Forms smells funny, but...
In the "2016 .NET Community Report" just released by Telerik, the answers to the question "What technology would you choose if building for Windows Desktop?" were as follows: So roughly half of new desktop developments would
Say goodbye to
It is not easy to monitor how our code behaves on a vast array of different machines. A myriad of different configurations can lead to errors that are difficult to reproduce and even more difficult to anticipate. And when the

Translate