//***************************************************************************
#ifndef IMAGE_H
#define IMAGE_H
//***************************************************************************
#include "matrix.h"
//***************************************************************************
class GrayImage
{
private:
char magicNumber[2];
int allocateFlag;
int numBits;
int mincount;
int maxcount;
int MaxHist[10];
int MinHist[10];
void allocateMem( );
void deAllocateMem( );
public:
GrayImage( ); // Constructor
GrayImage( int h, int w ); // Constructor
GrayImage( int h, int w, int numLev ); // Constructor
~GrayImage( ); // Destructor
void Init( );
void Init (int h, int w, int numLev );
int height; // Height of image
int width; // Width of image
int numLevels;
int numpixels; // Total number of pixels (height x width)
int numMaxHist;
int numMinHist;
int numComponents; // Number of connected components
unsigned char **p; // Gray level value
double **Phi; // Invariant moments
int *hist; // Histogram data
void allocatePhi (int num);
int isRGB(char *FileName);
int ReadFromFile (char *FileName);
int ReadFromFile2 (char *FileName);
int WriteToFile (char *FileName, char *fmt);
int WriteToFile (char *FileName);
void ThresholdWhite (unsigned char T);
void Threshold (unsigned char T);
void Threshold (unsigned char T1, unsigned char T2);
void ThresholdBinary (unsigned char T);
void ThresholdBinary (unsigned char T1, unsigned char T2);
void reverseThreshold (unsigned char T);
void reverseThreshold (unsigned char T1, unsigned char T2);
void Histogram ( );
void smoothenHistogram ( );
void printHistogram (char *FileName);
void calcHistogramPeaks ( );
void printHistogramPeaks (char *FileName);
int getHistMinima ( );
int getHistMinima ( int i );
int getHistMaxima ( );
int getHistMaxima ( int i );
void setValue (unsigned char T);
GrayImage &operator= (const GrayImage &);
GrayImage &operator+ (GrayImage &I1);
GrayImage &operator- (GrayImage &I1);
int Perimeter (int F);
double Elongation (int P);
int LabelComponents ( );
int FindNeighbors (int i, int j);
int Area (int P);
void ConvertToBinary ( );
void ReverseBinary ( );
int WriteLabelsToFile (char *FileName);
double Moment (int x, int y, int P);
double CentralizedMoment (int x, int y, int P);
double NormalizedCentralMoment (int x, int y, int P);
void InvariantMoments (int P);
double getInvariantMoment (int P, int i);
void MinBoundRectangle (int P);
// Image Filters
void DilationNxN_Binary (int N, int num);
void ErosionNxN_Binary (int N, int num);
void OpeningNxN_Binary (int N, int num);
void ClosingNxN_Binary (int N, int num);
void OpeningNxN_Binary (int N);
void ClosingNxN_Binary (int N);
void DilationNxN_Binary (int N);
void ErosionNxN_Binary (int N);
void ErosionNxN (int N);
void DilationNxN (int N);
void OpeningNxN (int N);
void ClosingNxN (int N);
void Skeletonization ( );
void MeanFilterNxN (int N);
void MedianFilterNxN (int N);
void GaussianFilterNxN (int N);
void kNearestNeighboringFilterNxN (int N, int k);
void kNearestNeighboringFilterNxN (int N);
// Image Filters
void addSaltandPepperNoise (double percent);
void addGaussianNoise (double mean, double variance);
// To read RGB images
int ReadRGBimageFromFile2(char *FileName,
GrayImage *rI, GrayImage *gI, GrayImage *bI);
int ReadRGBimageFromFile(char *FileName,
GrayImage *rI, GrayImage *gI, GrayImage *bI);
int ReadFromMatrix(Matrix &M);
int WriteToMatrix (Matrix *M);
void RemoveLonelyPixels(void);
void Zero(void);
int isBoundaryPixel(int x, int y);
};
//***************************************************************************
double RMSerror(GrayImage *I1, GrayImage *I2);
void WriteMatrixToImageFile(Matrix &M, char *filename);
int WriteToRGBFile(char *FileName, char *fmt,
GrayImage &rI, GrayImage &gI, GrayImage &bI);
int WriteToRGBFile(char *FileName,
GrayImage &rI, GrayImage &gI, GrayImage &bI);
//***************************************************************************
#endif // IMAGE_H
//***************************************************************************