Sim-LIT  2.0
 All Classes Namespaces Files Functions Variables Typedefs
MetricPsnr.h
Go to the documentation of this file.
1 
10 #ifndef CLASS_METRICPSNR
11 #define CLASS_METRICPSNR
12 
13 #include "Metric.h"
14 
15 class MetricPsnr:public Metric{
16 
17 public:
18 
19  MetricPsnr(){
20  /*
21  * @brief Método Constructor de la clase
22  */
23  this->name="PSNR";
24  }
25 
26  ~MetricPsnr(){}
27 
28  double calculate(Images org, Images rcv, bool show_data){
29  /*
30  * @brief Método que Calcula el PSNR de dos Imagenes
31  * @param org Imagen Original
32  * @param rcv Imagen Reconstruida
33  @return psnr
34  */
35  double mse, psnr, del;
36  mse = 0;
37  int h = org.getHeight()/org.getHeightBlock();
38  int w = org.getWidth()/org.getWidthBlock();
39  DataBlock** org_m = org.getMatrix();
40  DataBlock** rcv_m = rcv.getMatrix();
41  for (int i = 0; i < h; i=i+1)
42  {
43  for (int j = 0; j < w; j=j+1)
44  {
45  DataBlock org_e = org_m[i][j];
46  DataBlock rcv_e = rcv_m[i][j];
47  del = org_e.getIntensity() - rcv_e.getIntensity();
48  mse = mse + (double)pow(del, 2);
49  }
50  }
51  mse = mse/(double)(h*w);
52  psnr = (double)(10.0 * log10(pow((double)maxIntensity(org), 2) / mse));
53 
54  if(show_data)
55  cout << "PSNR: " << psnr << "\n";
56  return psnr;
57  }
58 
59  int maxIntensity(Images img){
60  /*
61  * @brief Calcula el valor máximo de intensidad de una Imagen
62  * @param img Imagen sobre la que se calculará la intensidad máxima
63  */
64  int max;
65  DataBlock** matrix = img.getMatrix();
66  if(matrix[0][0].isValid())
67  max = matrix[0][0].getIntensity();
68  else
69  max = 0;
70  int h = img.getHeight()/img.getHeightBlock();
71  int w = img.getWidth()/img.getWidthBlock();
72  for (int i = 0; i < h; i=i+1)
73  {
74  for (int j = 0; j < w; j=j+1)
75  {
76  if(matrix[i][j].getIntensity() > max)
77  max=matrix[i][j].getIntensity();
78  }
79  }
80  return max;
81  }
82 
83  string getName(){
84  return this->name;
85  }
86 
87 };
88 
89 #endif
Clase que representa un Bloque de Píxeles.
Definition: DataBlock.h:19
int getIntensity()
Definition: DataBlock.h:112
Clase que representa una Imagen.
Definition: Images.h:22
Clase Abstracta que representa la estructura que debe tener la métrica que se desee implementar...
Definition: Metric.h:15
Clase que representa la Métrica PSNR.
Definition: MetricPsnr.h:15