How to quantize histogram of gray scale image using LLoyd max algorithm upto 25 iterations

I have a gray scale images, i built histgram of it and find probability distribution function(Pdf) and corresponding greyscale values. i want to quantize it into non uniform bins( intervals) until i got MSE of all bins(intervals).
thank you in advance

Answers (1)

I'm not familiar with LLoyd, but if you define your bin edges, finding out what bin a gray level belongs in is trivial with the find() function. One of the ways
bin = find(grayLevel < edges, 1, 'first');
yourHist(bin) = yourHist(bin) + 1;
but that's so obvious you've probably tried it already, so at this point all I can say is to post your complete code so I can fix it.
Of course you can also have MATLAB do it with histcounts() where you can pass in the edges. Did you try that?

8 Comments

I have a gray scale images, i built histgram of it and find probability distribution function(Pdf) and corresponding greyscale values. i want to quantize it into non uniform bins( intervals) until i got minimum MSE of all bins(intervals).
Sorry Image Analyst.. if you provide your email Id then i send the detail of LLOYD max quantizer algorithm.
thank you in advance
Image Analyst does not make his email address available. You can post a link to a description.
With older MATLAB histc() is good for the calculations.
When you say "i built histogram of it" does that mean you have done it with equal width bins, or with the non-equal-width bins? If it's equal width bins, then of course that is useless as it's not something you'll need or can even use for non-equal-width bins.
I guess you don't know how to use the code I gave you in a for loop so I might do it for you if you make it super easy for me and give me the bin edges you want to use.
Usually I don't have the time to read, understand, and implement papers for people unless it's immediately relevant to my current job, or super interesting.
Thank you for reply sir..... I got the answer by the inbuilt Matlab functions ...i.e
[partition,codebook] = lloyds(training_set,initcodebook)
[partition,codebook] = lloyds(training_set,len)
[partition,codebook] = lloyds(training_set,...,tol)
[partition,codebook,distor] = lloyds(...)
[partition,codebook,distor,reldistor]
= lloyds(...).
Where training_set is image data and initcodebook is starting levels.
lloyds() is not "an inbuilt function" of base MATLAB, and is not in any of my toolboxes. What toolbox is it in, and can you add it to the Products List up at the top of the page?
which version you are using sir... i am using MATLABR2013a... You can type help lloyds on command window you will get the detail of it.
I'm using R2015b. Maybe they took it out then. If you type
which -all lloyds
it will tell you what toolbox it's in. If it's built-in you'll see something like this:
>> which -all plot
built-in (C:\Program Files\MATLAB\R2015b\toolbox\matlab\graph2d\plot)
plot is a built-in method
Otherwise you'll see some toolbox after the \toolbox\.
Also, the help for it also mentions which toolbox it's in.

Sign in to comment.

Asked:

on 23 Jan 2016

Commented:

on 27 Jan 2016

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!