# piecewise histogram equalization

taleen
Offline
Joined: 2010-06-08

Salam Alukom

I try to enhance image using Generalized Histogram equalization algorithm

5-Calculate the histogram H(p) based on the values G(x, y).
6. Since the histogram H(p) is very noisy, we need to remove the noise, and we smooth the histogram.
7. Computing the local minimums, {pi , i = 1, . . .,m ? 1}, and let p0 = Gmin, pm =
Gmax.
8. Equalize the histogram H(p) piecewise and independently according to the segments
between pi and pi+1 {i = 0, 1, . . . ,m? 1}. Finally, output the enhanced image.

I do rightly all steps before those

now to do these step i do the following

//Change Image to planarImage
ParameterBlockJAI pb = new ParameterBlockJAI("AWTImage");
pb.setParameter("AWTImage", Image);
PlanarImage planarSource = PlanarImage.wrapRenderedImage(Image);

//Histogram Parameter Block
ParameterBlock pbhist = new ParameterBlock();
RenderedOp op = JAI.create("histogram", pbhist, null);
Histogram histogram = (Histogram) op.getProperty("histogram");
//Gaussian Smooth
Histogram GauHistogram = histogram.getGaussianSmoothed(sigma);

// Get Local Minima
int Araysize = GauHistogram.getNumBins(0);
int MinimaIndex = 0;
double LocalMin[] = new double[Araysize];
//LocalMin0=Minimum Gray value for the image
LocalMin[0] = Gmin;
//temp have the size+2 of histogram array to get minima from thae histarray
double temp[] = new double[Araysize + 2];
temp[0] = 0;//As i-1
temp[Araysize + 1] = 0;//As i+1
//Copy HistArray to temp
for (int i = 0; i < GauHistogram.getNumBins(0); i++) {
temp[i + 1] = GauHistogram.getBinSize(0, i);
}

//Get Local Minima from temp As the minma between two grater value than it befor and after it.
for (int i = 1; i < temp.length - 1; i++) {
if (temp[i - 1] > temp[i] && temp[i + 1] > temp[i]) {
LocalMin[++MinimaIndex] = temp[i];
}
}
LocalMin[MinimaIndex++] = Gmax;//to have the maximum gray value for the image

//Equalize GauHistogram piecewise and independantly according to the segmants between LocalMin0 to LocalMin MinimaIndex
//I try to use piecewise equalaization
// So I go to define the BreakPoint Array
float[][] BreakPoint = new float[1/* as I use gray Image*/][];
for (int b = 0; b < 1; b++) {
BreakPoint[b] = new float[MinimaIndex];
for (int i = 0; i < MinimaIndex; i++) {
BreakPoint[b][i] = (float) LocalMin[i];
}
}
RenderedOp pw = JAI.create("piecewise", Image, BreakPoint);
biResultImage=pw.getAsBufferedImage();

/////////////////////////////////////
I understand that piecewise operator enhance histogram according breakpoint.Is it true?