I have the input image :

enter image description here

and the output of vein detection for the leaf using a Gabor filter, but the output is really noisy:

enter image description here

I tried using Total variation denoising however the results are not good:

enter image description here

However I don't want to loose the fine details in the leaf's veins, so a median filter won't suit my problem

  • $\begingroup$ what processing do you do on original image?? What do you want to detect? $\endgroup$ – CharlesB Apr 15 '12 at 19:20
  • $\begingroup$ i have used gabor filter on the original image $\endgroup$ – vini Apr 16 '12 at 4:06
  • $\begingroup$ Are you sure an edge filter is the right way to detect the veins? You're really trying to extract a 3D surface from its illumination and shadow, this sort of thing might work better: dsp.stackexchange.com/a/687/29 $\endgroup$ – endolith Apr 16 '12 at 21:26
  • $\begingroup$ @vini It sounds like you want to denoise (lose high frequency information) on one spatial part of your image, but retain high frequency information on another spatial part of your image yes? $\endgroup$ – Spacey Apr 16 '12 at 21:46
  • $\begingroup$ i want to retain only the high frequency components in the image which in my case are fine edges in the form of leaf veins.... $\endgroup$ – vini Apr 17 '12 at 0:35

Sounds like you want to denoise and preserve edges. Have you considered nonlocal means? There's some GPL'd C++ code along with a brief writeup of the algorithm by the original authors here: http://www.ipol.im/pub/algo/bcm_non_local_means_denoising/

One caveat, nonlocal means is very slow and the output can be sensitive to the implementation you have. You may also consider ROF minimzation as it's fast and does a good job of preserving edges. Here's some matlab code that does it: http://www.stanford.edu/~tagoldst/Tom_Goldstein/Split_Bregman.html

  • $\begingroup$ i tried that however results are unsatisfactory $\endgroup$ – vini Apr 16 '12 at 4:36
  • $\begingroup$ Fair enough. There are ways to solve "binary image denoising" but I can't think of any readily available code. $\endgroup$ – rcompton Apr 16 '12 at 4:46
  • $\begingroup$ This www.cmla.ens-cachan.fr/fileadmin/Membres/nikolova/ChanEseNikoSiap06.pdf might help. You could also try running image segmentation on the black and white leaf with different tuning parameters and see what you get. There's some segmentation code on that Split Bregman page. $\endgroup$ – rcompton Apr 16 '12 at 4:57
  • $\begingroup$ Have tried that still results are not good enough will have to try something else out i guess $\endgroup$ – vini Apr 16 '12 at 5:30
  • $\begingroup$ Hmm dang. As far as I know nonlocal means is state of the art in denoising. Since you've got a binary image there may be other stuff (search "text denoising"? "nonlocal text denoising"?) but I'm out of ideas. $\endgroup$ – rcompton Apr 16 '12 at 6:28

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.