The LBP tests the relation between pixel and it's neighbors, encoding this relation into a binary word. This allows detection of patterns/features, while being immune to contrast changes.
Current submission presents pixel-wise implementation, and filtering based implementation, achieving much shorter run-times. Both implementations achieve same results, while running at different passes. Do not use ‘pixelwiseLBP’ unless for educational or debugging purposes.
Current implementation is aligned with "Gray Scale and Rotation Invariant Texture Classification with Local Binary Patterns" from http://www.ee.oulu.fi/mvg/files/pdf/pdf_6.pdf.
This implementation supports multi-color inputs (RGB).
Rotation invariance can be same for all channels, or channel wise manner.
I'd suggest to send your questions to my email, rather then commenting here.
Regarding your question, you should use more then one histogram element. This is called "feature vector". In some cases you can reduce the feature vector length via PCA, and other methods. In case of LBP it was proven that some histogram elements carry more information than others, such as Rotation Invariant and others. I suggest reading relevant publications.
Ok. Thank You.
I have one more question, after we get the histogram feature vector how should I input that into my features matrix? i.e as it is or should I reduce LBP feature vector to a single feature? Please Reply. Thank You
Radial filter is uniform to all directions, and in most cases does the trick. Other shape filters can also be handy (especially if the problem in hand has other geometry shape preferences), but radial shape is the one commonly used in published papers.
Hope this will help a bit
The multiplication is needed for proper weighting of the radial filter elements. In many cases the filter element is between pixels, and therefore a an averaging ought to be done.
While calculating pixel-wise LBP, what is the need to multiply it with radial filter? Because when I read it they are only taking difference of neighbouring pixels from the center pixel. Please explain. Thank You.
Hello naif al harbi.
Well, you can have it, using the "Download submission" button above.
From the relatively low grade I can see you've found the button, but did not like the function... I'd be happy to hear your comments and improvement proposals.
Good evening Nicola Franzoso.
You'r comment is in place- thank you. I plan to add relevant functionality to the submission. The histogram is easy to achieve using "imhist" or "hist" with bins 1:(2^p-1) where p is the number of filter elements, applied to the LBP matrix converted to "single". What prevents me form posting this, it the Rotation Invariant (RI) case, where the histogram becomes very sparse. I failed to find an analytic way (an equation) to predict the indexes of obsolete bins. I can find the indexes of those bins for each case by applying the LBP minimization procedure, but this is inefficient and nasty. So i'm working on it. If you're not using RI-LBP, or you're fine with sparse histogram, please use my advice above.
Unfortunately this function does not compute the LBP correctly.
To fix it you need to change 'sign(currNieghDiff)' to 'currNieghDiff > 0'.
You should also change 'if nNeigh<=8' to 'if nNeigh<=9', as nNeigh = number of neighbours + 1.
Finally in the Primitive pixelwise solution you need to change
neighMat( ceil(nNeigh/2)+ 1 )=false;
i wanted to know how to implement the basic concept of LBP operator with uniform patterns
i have implemented the basic concept of LBP operator in matlab
now i am using the concept of uniform pattern
the problem is that i am not able to understand the basic concept of LBP with uniform patterns
How exactly it has to be done
is there any documentation available which can help me
Hello Fa Fa.
As far as I'm concerned, this comments are here for feedback, errors reporting , ratings, thanks, and code related question. Your question (and similar ones) should be be addressed via other media (directly via email, etc..).
Now, to your issue:
I don't quiet understand the question/. As far as I can see you have an interesting project ahead of you. If by "help" you mean "will I do the project for you", the answer is definitely NO.
If you wish to get some assistance with the topics of your project, that's better, but again I'm not the address in this case. I'd help you if were carrying this project under my supervision, but you aren't. I would help you nevertheless, if I was proficient in the above topics, and had some spare time, but unfortunately this is also net the case.
To conclude, it seems I can not assist you.
Many thanks goes to Chris Forne for his sharp eye. Bugs fixed, and some modification introduced.
28 Aug 2012
A Helix/Snail indexing function was аdded to scan neighborhood pixels as spiral.
09 Jan 2014
- Support Circular filter, as in M. Pietikäinen papers.
- Works on multiple color channels (gray-scale, RGB, La*b and even spectral images).
- Support Rotation Invariant mode.
- Two LBP version- pixels wise, and efficient.
16 Jan 2014
Changed filter direction (to CCW), starting point (3 o'clock instead of 12), support pixels interpolation.
22 May 2014
The function “roundnS” was added to the submission aimed to replace the “roundn” function that is apparently part of the Matlab Mapping Toolbox, which may be missing from some of the users trying to run this code.