main2.cc.html
//**************************************************************************
//
// CSE 486 Project #1
// By Anirudh Modi (anirudh@bart.aero.psu.edu) on 1/29/99-Fri
// & Jim Geis (geis@cse.psu.edu)
// & Howard Elikan (elikan@cse.psu.edu)
//
//**************************************************************************
// Running time of algorithm -> O[width x height]
//**************************************************************************
// Have implemented the following ->
// 1. Smoothening of histogram to determine minima/maxima
// 2. Basic image operations (+, -, =)
// 3. There is no memory leak
//**************************************************************************
#include <iostream.h>
#include <fstream.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include "image.h"
//**************************************************************************
void modify (GrayImage *image);
int CompareMoments (GrayImage *I1, int c1, GrayImage *I2, int c2);
//**************************************************************************
int main (int argc, char *argv[])
{
if (argc != 2)
{
cerr << "Syntax: " << argv[0] << " <pbm-image-file>" << endl;
exit(-1);
}
GrayImage image;
char name[50];
image.ReadFromFile(argv[1]); // Read the image file
image.Histogram( );
image.printHistogram("histogram.out");
image.smoothenHistogram( );
image.printHistogram("histogram1.out");
image.calcHistogramPeaks( );
image.printHistogramPeaks("histpeaks.out");
GrayImage image2(image.width, image.height, image.numLevels);
cout << "Number of minimas = " << image.numMinHist << endl;
for (int i = 0; i < image.numMinHist-1; i++)
{
GrayImage dummy;
dummy = image;
int m1 = image.getHistMinima(i+1);
int m2 = image.getHistMinima(i+2);
dummy.Threshold(m1, m2);
dummy.ConvertToBinary( );
sprintf(name,"%s.peak%d",argv[1],i+1);
if (dummy.Area(0) - dummy.numpixels/2 >= 0 && dummy.p[0][0] == 0)
{
cout << "Found background....";
dummy.ReverseBinary( );
int N = dummy.LabelComponents( );
cout << N << " components labeled." << endl;
for (int k = 1; k <= N; k++)
{
dummy.InvariantMoments(k);
dummy.MinBoundRectangle(k);
dummy.Elongation(k);
}
}
else
{
dummy.LabelComponents( );
}
// dummy.WriteToFile(name);
dummy.WriteLabelsToFile(name);
image2 = image2 + dummy;
}
sprintf(name,"%s.sumofpeaks",argv[1]);
image2.WriteToFile(name);
image2 = image - image2;
sprintf(name,"%s.diff",argv[1]);
image2.WriteToFile(name);
//modify(&image);
//sprintf(name,"%s.modified",argv[1]);
//image.WriteToFile(name); // Write modified image
cout << "Program done." << endl;
}
//**************************************************************************
void modify (GrayImage *image)
{
for (int i = 0; i < image->width; i++)
for (int j = 0; j < image->height; j++)
image->p[i][j] = (unsigned char)
(image->p[i][j]*1.0*
pow(tan(image->p[i][j]*1.0/255.0*3.14159),1));
}
//**************************************************************************