Search code examples
image-processingsiftpattern-recognitionglcmlbph-algorithm

Capturing macro and micro geometry using image features


I am extracting image features for texture identification. I want to extract image features from a 2D image. These features should capture the micro as well as macro geometry of the image. I have tried to find out some algorithm which can give me the above result. I tried SIFT but it only captures the details of macro geometry, shape and edge details. On the other hand i have tried various versions of LBP (like CS-LBP, LNBP etc) but they can only capture the pixel differences and not the overall scheme of things. Another technique that i tried was using GLCM with different distance and orientation values . But still there is a problem that the resulting histogram is too large and the time taken for comparison is too large. Additionally, the results are not very good also. The classification rate with SVM was only 48%. Can anyone guide me in finding a generic algorithm which can capture the pixel level differences as well as the overall texture pattern.


Solution

  • Why do you need a generic algorithm? You have:

    1. local non parametric features (like LBP) to capture micro
    2. macro features (like corner detectors, sift)
    3. overall geometry invariant statistics (like histograms, Fourier transform etc)

    Just calculate all the features, concatenate them in a single vector and this vector is the result you wanted. You don't need a single smart algorithm. The key to success is combination (concatenation) of many "simple" algorithms.

    If you have speed problems (your vector of features is too long) try using PCA before your SVM. It will reduce the size of your vector in a such a way that you loose the "minimal amount of information". PCA can reduce the length of the vector by a factor of 10 easily. PCA running time is relatively fast (just multiplying by a 2D matrix).

    If you still have low recognition rates even when you are sure that you used good features try ITML. ITML is used after PCA and it is also a multiplication by a 2D matrix. ITML is a way to "normalize the affection of each feature and cancel out the affect of feature's very large or very small range of values".

    Typically if you use good features, run PCA, ITML and than SVM - you should get good results even on difficult computer vision tasks