Whats wrong with this Histogram Partition

Hi,
I am trying to do following stuff,
1. Smooth the historam using 1*3 smoothing filter
2. Partition the histogram by taking taking first and last histogram components as minima
What I did and understand is following code
I=imread('cameraman.tif');
[h bin]=imhist(I);
%Apply Smoothing Filter
f=[1 1 1]/3;
ff=filter2(f, h, 'same');
%============================================
%Partitioning Histogram
a=ff<(ff+1);
b=ff>(ff-1);
I think something wrong in partitioning, Thanks in Advance for your suggestions

Answers (1)

Sentence #2 does not make sense to me. The first and last components of the histogram will be one gray level lower than the darkest gray level, and one gray level higher than the brightest gray level, respectively. I don't know what partition means. How are minima involved in a "partition" operation (whatever partition is, which I still do not know)? When we talk about splitting a histogram into different ranges we talk about thresholding. Of course thresholding your image at one less than the darkest gray level will give you a totally white image (all true) binary image, while thresholding at one more than the brightest gray level will give you a totally black (totally false) binary image.
Please clarify!!

3 Comments

Yes,
You are right Image analyst, Thresholding can Partition the histgoram, I know analytically but I dont know how to do it in matlab. Infact I am trying to implement the Dynamic Histogram Equilization Algorithm for Brightness Preservation of images. That Algorithm computes the local minima of histogram, It takes the portion of histogram that falls between two minima (the first and the last non-zero histogram components are considered as minima) for partitioning of histogram. for Example if ff is the local minima then partitioning like following image may be like ff<ff+1 and ff>ff-1 I think s0.
There could be numerous local minima. You can find them all with
localMinsInHist = imregionalmin(theHistogram);
But anyway, once you've determined found one that you want to use, call it f, you can "threshold" or "binarize" the image this way:
[theHistogram, grayLevels] = imhist(grayImage);
% Now compute f.
binaryImage = grayImage < f; % or can use >, >= or <=
@Image Analyst Please have a look at the above image from paper it shows how the partition need to be done, please need more suggestions

Sign in to comment.

Asked:

on 11 Nov 2013

Edited:

on 18 Nov 2013

Community Treasure Hunt

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

Start Hunting!