Thursday, June 2, 2011

Performance of the medical image noise filters


Image processing is a such an interesting vast area that has been the focus of many researchers for decades now.
Developing an image processing application is the product of several skills such as programming, mathematics, computer science and of course a creative intuition. 
One of the most significant implementation of image processing is in medical imaging, which ranges from image enhancement, segmentation, pattern recognition, automatic and semi-automatic computer-aided diagnosis (CAD) and detection and so forth. 
Among all, one of the most popular and often necessary tasks is noise filtering. Additive Gaussian white noise, multiplicative speckle noise and salt and pepper noise are some of the common noises that most medical images suffer from. Speckle noise is probably the worst type of noise that is incident on medical images such as Ultrasound and Optical Coherence Tomography. Speckle is a random granular shaped noise that is generated due to the coherence nature of the signal and unlike Gaussian noise is multiplied to the original signal.
Over the years a couple of dozen filters have been developed for annealing the images. I try to mention them here as much as I can remember for reference so that anyone with interest would be able to look them up. Mean & Median filters, Adaptive median filter, Gaussian, Lee, Enhanced Lee, Kuan, Mode, Frost, Homomorphic, Gamma maximum a posteriori (Gamma MAP), Rotating Kernel Transform (RKT) filter, Wiener, Gabor, Hybrid Median Filter (HMF), Kuwahara, Symmetric Nearest Neighbour (SNN), Wavelet filters, Curvelet filters, Peronna-Malik Diffusion filters: isotropic & anisotropic diffusion filter, Speckle Reducing Anisotropic Diffusion (SRAD), Nonlinear Complex Diffusion Filter (NCDF), et cetera. I have a pretty complete collection of most of these filters, so you can let me know if you needed any, of course the MATLAB codes.
I also would like to say that selecting the best filter for your application depends on several factors such as what type of noise you want to filter? How fast you need your filter to respond? How clean and noise free you need your output image? And so on... But according to my experience for very basic, I repeat very basic filtering, Adaptive Median does a superb job considering its simplicity. And for rather heavier filtering diffusion filtering is just fantastic: fast, reliable and bold. Wavelet filtering is also very popular but personally I would rather the diffusion filtering. In case you need directinality in your filtering, you need to go for Curvelet Filtering.
I said all these because today I wanted to say something about measuring the performance of noise filters. In other words, what quality metrics are there to compare the efficiency of the filters. Well, there are a few parameters defined, which more or less express the ability of a filter, for example, Signal to Noise Ratio (SNR), Peak SNR (PSNR), Mean Square Error (MSE), Structural Similarity (SSIM), Equivalent Number of Looks (ENL) and so on and so forth. I was to mention the formulas for all these factors but then I thought they are quite easy to find. I also must add that some of these like SNR have different definitions in different texts. Some like to use an ROI (Region of Interest) based definition and some say it is too subjective but they are not my intention to talk here. Actually, besides the fact that there are no standard formula for these factors, they often require an original noise-free image for reference and then they measure the performance of the filter accordingly. But in most real-life actual cases such as medical images, we usually do not have access to the original noiseless image. So what do we got to do then? We either need to come up with another type of parameter or manipulate the formulation so that it works without the need for the noiseless image. 
Well, I said all of the above as an introduction to mention the following two items.
1) There is a parameter called the Edge-Preservation Factor (EPF) or the cross-correlation factor that is often denoted by the Greek Beta, that shows how much the edges are preserved in a noise annealing procedure. Beta is real number between 0 and 1. The bigger it is (closer to 1), the more edges have remained intact during filtering. Personally, I believe it is one of the greatest parameters for the job. Especially for speckle filtering and for medical images that most of the information are in the edges, Beta can be a very reliable. It has a rather lengthy formula that I am sure you can easily find in scholastic papers. I also have created its MATLAB code, so drop me a line if you ever needed to use it. 

2) As mentioned above, without the original noise-free image, it is very difficult to compare the performance of noise filters. well, one can always go for synthetic images. Create an image containing the features of your typical medical image, add randomly your noise of choice, then try to filter the noisy image. Now having the original image, you can compare multiple filters easier. But this method also has its own issues. 
I want to suggest a very simple yet valid and valuable method. Take the mean and the standard deviation of all the pixels in your images. The best filtered image is the one that has the least standard deviation and at the same time its mean is closest to the original noisy image. Quite simple aye! And it works like a charm too. 
Sometime people clamp down the background of the image artificially to zero (black) or anything uniform; in this case, I guess, it is wiser to take into account only the signal area and discard the background as it induces a false shift in the mean and variance. 
Hope it was not too long, was it? 
Good Luck...