mirror of
https://github.com/akai-katto/dandere2x.git
synced 2026-05-05 03:56:12 +02:00
experimental ssim commit
This commit is contained in:
parent
4c05f641b4
commit
a011765e90
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user