⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 image.h

📁 该程序把数字图像处理与小波变换结合起来
💻 H
字号:
#ifndef __IMAGE_H_
#define __IMAGE_H_

/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
/* Some of the code are from elsewhere. The PGM routines are taken from 
 * G. Daivs code.
 *
 * Mow-Song, Ng 2/9/2002
 * msng@mmu.edu.my
 * http://www.pesona.mmu.edu.my/~msng
 *
 * I do not claim copyright to the code, but if you use them or modify them,
 * please drop me a mail.
 *
 */
/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/

/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/	
/* 
 * $LOG
 * ----
 *
 *
 * $TODO
 * ----
 * - add color image format
 * - add other file format (lofty dreams ;-)
 */
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/	


/*---------------------------------------------------------------------------*/
/*---------------------------------------------------------------------------*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <stdarg.h>
#include <assert.h>
#include "memchk.h"
#include "global.h"

/* external dependencies */
#include "mem.h"

#ifndef MAX_GREY
#define MAX_GREY 255
#endif

#ifndef MIN_GREY
#define MIN_GREY 0
#endif

typedef struct IMAGESTRUCT{
   int ysize;
   int xsize;
   void *extraData;  /* pointer to additional data */
   unsigned char **pixel;
	unsigned char *pixelLinear;
} IMAGE, *PIMAGE;

typedef struct LIMAGESTRUCT{
   int ysize;
   int xsize;
   void *extraData;  /* pointer to additional data */
   int **pixel;
	int *pixelLinear;
} LIMAGE, *PLIMAGE;

typedef struct FIMAGESTRUCT{
   int ysize;
   int xsize;
   void *extraData;  /* pointer to additional data */
   double **pixel;
	double *pixelLinear;
} FIMAGE, *PFIMAGE;

/* function prototypes */
/* 8 bit image */
PIMAGE ReadRawGreyFile(int xsize, int ysize, char *filename);
int WriteRawGreyFile(PIMAGE pimage, char *filename);
int ImageInitialize(int XSize, int YSize, PIMAGE pimage);
PIMAGE ImageAlloc(int XSize, int YSize);
int ImageBufferAlloc(PIMAGE pimage);
void ImageBufferFree(PIMAGE pimage);
void ImageFree(PIMAGE pimage);
int CopyImage(PIMAGE pimageDest, PIMAGE pimageSrc);
int SetImage(PIMAGE pimageSrc, unsigned char val);
int ImageDynamicRange(PIMAGE pimage, unsigned char *MaxPixel, unsigned char *MinPixel);

PFIMAGE ReadRawGreyFileToFloat(int xsize, int ysize, char *filename);
int WriteFloatToRawGreyFile(PFIMAGE pfimage, char *filename);


/* 32 bit image */
PLIMAGE ReadRaw32File(int xsize, int ysize, char *filename);
int WriteRaw32File(PLIMAGE plimage, char *filename);
int LImageInitialize(int XSize, int YSize, PLIMAGE plimage);
PLIMAGE LImageAlloc(int XSize, int YSize);
int LImageBufferAlloc(PLIMAGE plimage);
void LImageBufferFree(PLIMAGE plimage);
void LImageFree(PLIMAGE plimage);
int CopyLImage(PLIMAGE plimageDest, PLIMAGE plimageSrc);

/* floating point image */
PFIMAGE ReadRawFloatFile(int xsize, int ysize, char *filename);
int WriteRawFloatFile(PFIMAGE pfimage, char *filename);
int FImageInitialize(int XSize, int YSize, PFIMAGE pfimage);
PFIMAGE FImageAlloc(int XSize, int YSize);
int FImageBufferAlloc(PFIMAGE pfimage);
void FImageBufferFree(PFIMAGE pfimage);
void FImageFree(PFIMAGE pfimage);
int CopyFImage(PFIMAGE pfimageDest, PFIMAGE pfimageSrc);

/* Processing */
PFIMAGE Average2x2Image(PIMAGE pimageSrc, int type);
PFIMAGE Average3x3Image(PIMAGE pimageSrc, int type);
PFIMAGE Average3x3ImageFilter0(PIMAGE pimageSrc, int type);

/* Conversion */
int CopyFImageToImage(PIMAGE pimageDest, PFIMAGE pfimageSrc);
int CopyImageToFImage(PFIMAGE pfimageDest, PIMAGE pimageSrc);

/* PGM */
PIMAGE ReadPGM(char *PGMFileName);
PFIMAGE ReadPGMToFloat(char *PGMFileName);
int WritePGM(PIMAGE pimage, char *PGMFileName);
int WriteFloatToPGM(PFIMAGE pfimage, char *PGMFileName);
unsigned int PGMGetVal (FILE* infile);
void PGMSkipComments(FILE* infile, unsigned char *ch);

/* Comparison */
double ImageCompareMSE(PIMAGE pimage1, PIMAGE pimage2);
double ImageComparePSNR(PIMAGE pimage1, PIMAGE pimage2);

double FImageCompareMSE(PFIMAGE pfimage1, PFIMAGE pfimage2);
double FImageComparePSNR(PFIMAGE pfimage1, PFIMAGE pfimage2);

/* color conversion */
void ycc2rgb(double y,double cb, double cr, double *r, double *g, double *b);
void rgb2ycc(double r, double g, double b, double *y, double *cb, double *cr);

/* bicubic interpolation */
PIMAGE RescaleImage(PIMAGE pimageSrc, int newWidth, int newHeight, double zeroVal);

/* Error handler */
void ImageError(char *fmt, ...);
void ImageWarning(char *fmt, ...);

#endif

/* image.h */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -