📄 fpsnr255.c
字号:
/*--------------------------- Commande MegaWave -----------------------------*//* mwcommandname = {fpsnr255};author = {"Jacques Froment"};function = {"Returns the additive factor to get the '255' PSNR from the 'max-min' PSNR"};version = {"0.0"};usage = {'n'->Norm "flag to normalize the image",Image->image "original image", ADDPSNR<-fpsnr255 "additive PSNR factor"}; *//*--- Fichiers inclus UNIX C ---*/#include <stdio.h>#include <math.h>/*--- Bibliotheque megawave2 ---*/#include "mw.h"voidNORM_IMG(image) /*--- Normalize `image` to 0.0 mean and 1.0 variance ---*/ Fimage image;{ long l, c; /* Index of current point in `image` */ long dx, dy; /* Size of image */ double mean, var; /* Mean and variance of `image` */ dx = image->ncol; dy = image->nrow; mean = 0.0; for(l = 0; l < dy; l++) for(c = 0; c < dx; c++) mean += image->gray[dx * l + c]; mean /= (double) dx * dy; for(l = 0; l < dy; l++) for(c = 0; c < dx; c++) image->gray[dx * l + c] -= mean; var = 0.0; for(l = 0; l < dy; l++) for(c = 0; c < dx; c++) var += image->gray[dx * l + c] * image->gray[dx * l + c]; var = sqrt(((double) dx * dy - 1.0) / var); for(l = 0; l < dy; l++) for(c = 0; c < dx; c++) image->gray[dx * l + c] *= var;}double fpsnr255(Norm,image) Fimage image; int *Norm; /* Normalisation to 0 mean and 1.0 variance */{ long l, c; /* Index of current point in image */ long ldx; long dx, dy; /* Size of image */ double min, max; /* Minimum and maximum of `image` values */ dx = image->ncol; dy = image->nrow; if(Norm) NORM_IMG(image); min = 1e30; max = -min; ldx =0; for(l = 0; l < dy; l++) { for(c = 0; c < dx; c++) { if(image->gray[ldx + c] < min) min = image->gray[ldx + c]; if(image->gray[ldx + c] > max) max = image->gray[ldx + c]; } ldx += dx; } return(10.0 * log10((255.0*255.0)/((max - min)* (max - min))) );}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -