怎么改变里面的参数让输出的图像精确度变低?
这是代码:
int ReadGrayImage(char *FileName, int *Row, int *Col, unsigned char *Image, unsigned char *Fheadg, char *Pallette)//读取灰色图像(文件名,)
{
long Index;
int k, i, j;
FILE *ImageDataFile;
if ((ImageDataFile = fopen(FileName, "rb")) == NULL) return(0);
for (i = 0; i<54; i++) Fheadg[i] = fgetc(ImageDataFile);
*Col = Fheadg[19] * 256 + Fheadg[18];
*Row = Fheadg[23] * 256 + Fheadg[22];
for (i = 0; i<1024; i++) Pallette[i] = fgetc(ImageDataFile);
k = (*Col) * 3 % 4; if (k == 4) k = 0;
Index = 0;
for (i = 0; i<*Row; i++)
{
for (j = 0; j<*Col; j++, Index++) Image[Index] = fgetc(ImageDataFile);
for (j = 1; j <= k; j++) fgetc(ImageDataFile);
}
fclose(ImageDataFile); return(1);
}
int SaveGrayImage(char *FileName, int Row, int Col, unsigned char *Fheadg, char *Pallette, unsigned char *Image)
{
long Index;
FILE *ImageDataFile;
int i, j, k;
k = Col * 3 % 4; if (k == 4) k = 0;
if ((ImageDataFile = fopen(FileName, "wb")) == NULL) return(0);
for (i = 0; i<54; i++) fputc(Fheadg[i], ImageDataFile);
for (i = 0; i<1024; i++) fputc(Pallette[i], ImageDataFile);
Index = 0;
for (i = 0; i<Row; i++)
{
for (j = 0; j<Col; j++, Index++) fputc(Image[Index], ImageDataFile);
for (j = 1; j <= k; j++) fputc(0, ImageDataFile);
}
fclose(ImageDataFile); return(1);
}
double PSNR(int Row, int Col, unsigned char *Buf1, unsigned char *Buf2)
{
long Ind, Index;
int r1, r2;
double tr, snoise, tmp, psnr;
Index = (long)Col*Row; snoise = 0.0;
for (Ind = 0; Ind<Index; Ind++)
{
r1 = Buf1[Ind];
r2 = Buf2[Ind];
tr = r1 - r2;
snoise = snoise + tr*tr;
}
tmp = ((double)Row*Col * 255 * 255) / snoise;
psnr = 10 * log10(tmp);
return psnr;
}