experimental ssim commit

This commit is contained in:
Tyler 2020-03-04 07:06:17 -08:00
parent 4c05f641b4
commit a011765e90
2 changed files with 34 additions and 11 deletions

View File

@ -10,17 +10,29 @@
class SSIM {
public:
static double getLumaColor(Image::Color &col) {
return col.r * (double) 0.212655 + col.g * (double) 0.715158 + (double) 0.072187 * col.b;
static int getLumaColor(Image::Color &col, char color) {
switch(color){
case 'r':
return col.r;
break;
case 'g':
return col.g;
break;
case 'b':
return col.b;
break;
}
//return col.r * (double) 0.212655 + col.g * (double) 0.715158 + (double) 0.072187 * col.b;
}
static double averageLuma(Image &image, int initial_x, int initial_y, int block_size) {
static double averageLuma(Image &image, int initial_x, int initial_y, int block_size, char color) {
double sum = 0;
for (int x = 0; x < block_size; x++) {
for (int y = 0; y < block_size; y++) {
sum += getLumaColor(image.get_color(initial_x + x, initial_y + y));
sum += getLumaColor(image.get_color(initial_x + x, initial_y + y), color);
}
}
@ -29,12 +41,23 @@ public:
}
static double ssim(Image &image_A, Image &image_B,
int initial_x, int initial_y,
int variable_x, int variable_y,
int block_size){
double r = ssim_color(image_A, image_B, initial_x, initial_y, variable_x, variable_y, block_size, 'r');
double g = ssim_color(image_A, image_B, initial_x, initial_y, variable_x, variable_y, block_size, 'g');
double b = ssim_color(image_A, image_B, initial_x, initial_y, variable_x, variable_y, block_size, 'b');
return (r + g + b) / 3;
}
static double ssim_color(Image &image_A, Image &image_B,
int initial_x, int initial_y,
int variable_x, int variable_y,
int block_size) {
int block_size, char color) {
double mx = averageLuma(image_A, initial_x, initial_y, block_size);
double my = averageLuma(image_B, variable_x, variable_y, block_size);
double mx = averageLuma(image_A, initial_x, initial_y, block_size, color);
double my = averageLuma(image_B, variable_x, variable_y, block_size, color);
double sigxy = 0;
double sigsqx = 0;
@ -42,10 +65,10 @@ public:
for (int x = 0; x < block_size; x++) {
for (int y = 0; y < block_size; y++) {
sigsqx += pow((getLumaColor(image_A.get_color(initial_x + x, initial_y + y)) - mx), 2);
sigsqy += pow((getLumaColor(image_B.get_color(variable_x + x, variable_y + y)) - my), 2);
sigsqx += pow((getLumaColor(image_A.get_color(initial_x + x, initial_y + y), color) - mx), 2);
sigsqy += pow((getLumaColor(image_B.get_color(variable_x + x, variable_y + y), color) - my), 2);
sigxy += (getLumaColor(image_A.get_color(initial_x + x, initial_y + y)) - mx) * (getLumaColor(image_B.get_color(variable_x + x, variable_y + y)) - my);
sigxy += (getLumaColor(image_A.get_color(initial_x + x, initial_y + y), color) - mx) * (getLumaColor(image_B.get_color(variable_x + x, variable_y + y), color) - my);
}
}

View File

@ -51,7 +51,7 @@ int main(int argc, char **argv) {
int resume_frame = 200;
string extension_type = ".jpg";
cout << "Hello Dandere!!" << endl;
cout << "Hello Dandere2!!" << endl;
//load arguments
if (!debug) {