Ask Your Question

Revision history [back]

click to hide/show revision 1
initial version

This is not a very easy problem, but by looking at the image I have a few ideas:

  • Do a texture analysis. Apply the Gabor filters on the image, then train an SVM to discriminate the leaf from the rest. You can also use the Haralick descriptors (but you have to implement them yourself).
  • Do a frequency analysis; the leafs have higher frequency components than the background. Probably the easiest would be a wavelet decomposition, where the dH, dD and dV will contain the high-frequency components. You can also use frequency-domain transformations as the DCT or FFT.
  • As there are a lots of edges in the image that don't belong to the leaf, I don't really recommend edge detection like Canny, or area-based segmentation like Watershed. However you could try to detect the spikes of this kind of leaf using a Harris corner detector. Then use these points as a starting point for contour detection.

If you use the first two techniques, the algorithm is the following: - apply the desired filters on the image. it will give you several "descriptor" images. For wavelets you get 4, for Haralick 6-10 (depending on the number of features used), for Gabor filters you'll get an image for each filter (direction and frequency). You can combine these (e.g. Haralick+Wavelet). - labelize manually a few images. I suggest to use 3 classes: leaf, background and leaf edge. As edges have different textural caracteristics, you need them for a correct result. - For each labelized pixel, get the features for that pixel. So for each pixel you should get:

[ f1  f2  f3  ... fN ] [ l1 ]  (f=features, l=label)
  • Use this matrix to train an SVM.

Then, for each image, compute the descriptors and use the trained SVM to get the answer for each pixel. Normally you should get an image containing 3 classes: background, leaf and edge!

This is not a very easy problem, but by looking at the image I have a few ideas:

  • Do a texture analysis. Apply the Gabor filters on the image, then train an SVM to discriminate the leaf from the rest. You can also use the Haralick descriptors (but you have to implement them yourself).
  • Do a frequency analysis; the leafs have higher frequency components than the background. Probably the easiest would be a wavelet decomposition, where the dH, dD and dV will contain the high-frequency components. You can also use frequency-domain transformations as the DCT or FFT.
  • As there are a lots of edges in the image that don't belong to the leaf, I don't really recommend edge detection like Canny, or area-based segmentation like Watershed. However you could try to detect the spikes of this kind of leaf using a Harris corner detector. Then use these points as a starting point for contour detection.

If you use the first two techniques, the algorithm is the following: - following:

  • apply the desired filters on the image. it will give you several "descriptor" images. For wavelets you get 4, for Haralick 6-10 (depending on the number of features used), for Gabor filters you'll get an image for each filter (direction and frequency). You can combine these (e.g. Haralick+Wavelet). - Haralick+Wavelet).
  • labelize manually a few images. I suggest to use 3 classes: leaf, background and leaf edge. As edges have different textural caracteristics, you need them for a correct result. - result.
  • For each labelized pixel, get the features for that pixel. So for each pixel you should get:

    [ f1 f2 f3 ... fN ] [ l1 ] (f=features, l=label)

    • l=label)

    • Use this matrix to train an SVM.

    Then, for each image, compute the descriptors and use the trained SVM to get the answer for each pixel. Normally you should get an image containing 3 classes: background, leaf and edge!

This is not a very easy problem, but by looking at the image I have a few ideas:

  • Do a texture analysis. Apply the Gabor filters on the image, then train an SVM to discriminate the leaf from the rest. You can also use the Haralick descriptors (but you have to implement them yourself).
  • Do a frequency analysis; the leafs have higher frequency components than the background. Probably the easiest would be a wavelet decomposition, where the dH, dD and dV will contain the high-frequency components. You can also use frequency-domain transformations as the DCT or FFT.
  • As there are a lots of edges in the image that don't belong to the leaf, I don't really recommend edge detection like Canny, or area-based segmentation like Watershed. However you could try to detect the spikes of this kind of leaf using a Harris corner detector. Then use these points as a starting point for contour detection.

If you use the first two techniques, the algorithm is the following:

  • apply the desired filters on the image. it will give you several "descriptor" images. For wavelets you get 4, for Haralick 6-10 (depending on the number of features used), for Gabor filters you'll get an image for each filter (direction and frequency). You can combine these (e.g. Haralick+Wavelet).
  • labelize manually a few images. I suggest to use 3 classes: leaf, background and leaf edge. As edges have different textural caracteristics, you need them for a correct result.
  • For each labelized pixel, get the features for that pixel. So for each pixel you should get:

    [ f1 f2 f3 ... fN ] [ l1 ] (f=features, l=label)

    l=label)
  • Use this matrix to train an SVM.

Then, for each image, compute the descriptors and use the trained SVM to get the answer for each pixel. Normally you should get an image containing 3 classes: background, leaf and edge!