Stefano Tommesani

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

AltaSonita - image denoising software

E-mail Print PDF

AltaSonita is an image denoising application built to run on nVidia video boards using CUDA technology. Three different denoising algorithms, and five intensity levels let you remove most of noise from photos without blurring small details and edges.

AltaSonita is provided as free software, and you can download it from here. Please note that AltaSonita requires a CUDA-enabled video board, that is a recent nVidia video board; it will not run on any other video board.

As the following images show, the intensity setting works by separating edgy areas (drawn in red) from mostly plain areas (drawn in blue), and in plain areas the amount of noise filtering is higher as there are no relevant edges that would be blurred by the denoising process. Increasing the intensity setting reduces the amount of edge-preserving areas, so that aggressive noise filtering is applied to more zones of the image.

NLM0
Original image
KNNmin
KNNminstat
KNN filter with min intensity Edges (drawn in red) of KNN filter with min intensity
KNNmax
KNNmaxstat

KNN filter with max intensity Edges (drawn in red) of KNN filter with max intensity
NLMmin
NLMminstat
NLM filter with min intensity Edges (drawn in red) of NLM filter with min intensity
NLMmax
NLMmaxstat

NLM filter with max intensity Edges (drawn in red) of NLM filter with max intensity
Last Updated on Thursday, 14 July 2011 09:57
 

Quexal MMX goes freeware

E-mail Print PDF

Back in 2000, Quexal changed the way programmers had to deal with MMX programming. A friendly user interface simplified building parallel versions of algorithms, an optimizing compiler made sure that the resulting code would run fast, and a visual debugger helped pinpoint programming errors.

Even if the focus of the programming community has moved on to more recent instructions sets, after many years I still get queries about Quexal, so I've decided to release it as freeware, as it may be useful for learning SIMD coding. However, simply releasing the last published version of Quexal was not enough, and this was an opportunity to spend some time on this pet project of mine and improve it.

So here you have it, an updated version of Quexal for free! Just go to the download section to get it.

QuexalScreenShot

Last Updated on Saturday, 01 June 2013 15:20
 

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

Fixing Git pull errors in SourceTree 10 April 2017, 01.44 Software
Fixing Git pull errors in SourceTree
If you encounter the following error when pulling a repository in SourceTree: VirtualAlloc pointer is null, Win32 error 487 it is due to to the Cygwin system failing to allocate a 5 MB large chunk of memory for its heap at
Castle on the hill of crappy audio quality 19 March 2017, 01.53 Audio
Castle on the hill of crappy audio quality
As the yearly dynamic range day is close (March 31st), let's have a look at one of the biggest audio massacres of the year, Ed Sheeran's "Castle on the hill". First time I heard the song, I thought my headphones just got
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

Translate