# laser speckle noise reduction

I'm trying to process an 1D signal containing a waveform of 100000 pixel. As it was acquired with a laser scanning system, and therefore it is corrupted by some annoying speckle noise. I tried to prefilter it with a well-known type of non-linear image processing filter such as Lee and Kuan filters, obviously modified for the 1D nature of the signal.

http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2784081/ (see citation 5,7)

However, the resulting signal is identical to the result of a "naive" mean filter with the same support size (e.g. 15 px).

Is it an "expected" behaviour due to the 1D processing or am I probably writing wrong code? Can you link me some working code for these algorithms or some other speckle reducing ones? I found some source code on codeforge, but I think the Lee and Kuan algorithm are not correctly implemented.

Thank you very much in advance.

EDIT: added some images of the signal:

1) original 2) mean 1x15 3) mean 1x15 with superimposed kuan filter 1x15 with input parameters nm = 1.0 and nv = 0.1 4) mean 1x15 with superimposed kuan filter 1x15 with input parameters nm = 1.0 and nv = 0.2 5) mean 1x15 with superimposed kuan filter 1x15 with input parameters nm = 1.0 and nv = 0.3 We can see in 3,4,5 that there're no differences by mean and kuan: the mean signal is exactly coinciding with the kuan filter one.

Note that at the pixel 50569, where there is an exampe of the speckle I want to reduce, the local mean is 121.666 and local variance is 16.755. Therefore it can be found that an estimation of the noise variance is 0.13771, then I tried the parameters according to said observation. Further, note that at pixel 50652 the signal is lower and therefore de speckle effect is lower too. There, the local mean is 40.933 and local variance is 4.195 and the ratio is 0.102, therefore in the order of the ratio on an high peak.

Thank you again for your attention

• Can you add an image of the problem please? Knowing what we are looking at can go a long way to help you. Aug 28, 2012 at 22:07
• Can you post a "pseudo code" of what procedure you are following and indicate any relevant equations from Kuan's paper? Aug 30, 2012 at 3:07
• What would the desired result look like? Do the speckles have an amplitude of about 5 units? It seems to be the inherent noise of your system. It still gives you a solid Signal/noise ratio of about 20... Oct 29, 2012 at 19:03
• why not just reduce the size of the mean filter, say 7 pixels? Oct 31, 2012 at 3:36

I seems to me like wavelets can offer a neat solution to your problem for noise filtering. Just incase you are not aware a wavelet transform uses two filters (also called mother and father wavelet). These two filters result in a sub-signal (also called sub-band) which is of half the size of the original signal. What I mean to say is say your signal length is 100. Upon wavelet transform you get 2 signals each of size 50. One of these signal is a approximation of original signal and the another one is detail signal. Usually the noise component is present in the detail section.

So as to get rid of the noise, what is usually done is to take a wavelet transform. Implementation of it is available in matlab (dwt() ). This will result in two outcomes cA and cD.

[cA,cD] = dwt(X,'haar')


Then I would suggest you to do usual noise removal algorithms on cD and with cA and cD' (ie. filtered cD) reconstruct the original signal.

cD_1 = someProcessing( cD )

X = idwt(cA, cD_1,'haar')