@@ -903,6 +903,10 @@ enum METHOD parseMethod(const char *s)
903
903
904
904
float RescaleMetric (int currentmethod , float value )
905
905
{
906
+ float k1 , k0 ;
907
+
908
+ k1 = 1.0f ;
909
+ k0 = 0.0f ;
906
910
switch (currentmethod )
907
911
{
908
912
case MSE :
@@ -913,8 +917,8 @@ float RescaleMetric(int currentmethod, float value)
913
917
value = 1.0f / value ;
914
918
value = sqrt (value );
915
919
value = sqrt (value );
916
- value * = 2.42f ;
917
- value -= 1.38f ;
920
+ k1 = 2.42f ;
921
+ k0 = - 1.38f ;
918
922
}
919
923
else
920
924
{
@@ -923,17 +927,23 @@ float RescaleMetric(int currentmethod, float value)
923
927
break ;
924
928
case PSNR :
925
929
value = sqrt (value );
926
- value *= 0.87f ;
927
- value -= 4.70f ;
930
+ k1 = 0.87f ;
931
+ k0 = -4.70f ;
932
+ break ;
933
+ case COR :
934
+ value = MetricSigma (value );
935
+ value = MetricSigma (value );
936
+ k1 = 1.0f ;
937
+ k0 = 0.0f ;
928
938
break ;
929
939
case MSEF :
930
940
if (value > 0.0f )
931
941
{
932
942
value = 1.0f / value ;
933
943
value = sqrt (value );
934
944
value = sqrt (value );
935
- value * = 1.02f ;
936
- value -= 1.49f ;
945
+ k1 = 1.02f ;
946
+ k0 = - 1.49f ;
937
947
}
938
948
else
939
949
{
@@ -944,50 +954,48 @@ float RescaleMetric(int currentmethod, float value)
944
954
value = MetricSigma (value );
945
955
value = MetricSigma (value );
946
956
value = MetricSigma (value );
947
- value * = 1.73f ;
948
- value - = 0.11f ;
957
+ k1 = 1.51f ;
958
+ k0 = 0.0f ;
949
959
break ;
950
960
case MS_SSIM :
951
961
value = MetricSigma (value );
952
962
value = MetricSigma (value );
953
- value * = 1.59f ;
954
- value + = 0.01f ;
963
+ k1 = 1.59f ;
964
+ k0 = 0.0f ;
955
965
break ;
956
966
case VIFP1 :
957
967
value = MetricSigma (value );
958
968
value = MetricSigma (value );
959
- value * = 1.12f ;
960
- value - = 0.03f ;
969
+ k1 = 1.06f ;
970
+ k0 = 0.0f ;
961
971
break ;
962
972
case SMALLFRY :
963
- value * = 0.0658f ;
964
- value -= 6.07f ;
973
+ k1 = 0.0658f ;
974
+ k0 = - 6.07f ;
965
975
break ;
966
976
case SHARPENBAD :
967
- value *= 1.00f ;
968
- value += 0.05f ;
969
- break ;
970
- case COR :
971
977
value = MetricSigma (value );
972
- value = MetricSigma (value );
973
- value *= 2.87f ;
974
- value -= 1.42f ;
978
+ k1 = 1.40f ;
979
+ k0 = 0.0f ;
975
980
break ;
976
981
case NHW :
977
982
if (value > 0.0f )
978
983
{
979
984
value = 1.0f / value ;
980
985
value = sqrt (value );
981
986
value = sqrt (value );
982
- value * = 0.36f ;
983
- value - = 0.41f ;
987
+ k1 = 0.222f ;
988
+ k0 = 0.0f ;
984
989
}
985
990
else
986
991
{
987
992
value = 1.0f ;
988
993
}
989
994
break ;
990
995
}
996
+ value *= k1 ;
997
+ value += k0 ;
998
+
991
999
return value ;
992
1000
}
993
1001
@@ -1096,7 +1104,7 @@ float MetricCalc(int method, unsigned char *image1, unsigned char *image2, int w
1096
1104
diff = metric_smallfry (image1 , image2 , width , height );
1097
1105
break ;
1098
1106
case SHARPENBAD :
1099
- diff = metric_sharpenbad (image1 , image2 , width , height );
1107
+ diff = metric_sharpenbad (image1 , image2 , width , height , 1 );
1100
1108
break ;
1101
1109
case COR :
1102
1110
diff = metric_cor (image1 , image2 , width , height );
@@ -1114,7 +1122,7 @@ float MetricCalc(int method, unsigned char *image1, unsigned char *image2, int w
1114
1122
case SSIMSHBAD :
1115
1123
tmetric = iqa_ssim (image1 , image2 , width , height , width * components , 0 , 0 );
1116
1124
diff = RescaleMetric (SSIM , tmetric );
1117
- tmetric = metric_sharpenbad (image1 , image2 , width , height );
1125
+ tmetric = metric_sharpenbad (image1 , image2 , width , height , 1 );
1118
1126
diff += RescaleMetric (SHARPENBAD , tmetric );
1119
1127
diff *= 0.5f ;
1120
1128
break ;
@@ -1124,7 +1132,7 @@ float MetricCalc(int method, unsigned char *image1, unsigned char *image2, int w
1124
1132
tm [0 ] = RescaleMetric (SSIM , tmetric );
1125
1133
tmetric = metric_smallfry (image1 , image2 , width , height );
1126
1134
tm [1 ] = RescaleMetric (SMALLFRY , tmetric );
1127
- tmetric = metric_sharpenbad (image1 , image2 , width , height );
1135
+ tmetric = metric_sharpenbad (image1 , image2 , width , height , 1 );
1128
1136
tm [2 ] = RescaleMetric (SHARPENBAD , tmetric );
1129
1137
tmetric = metric_nhw (image1 , image2 , width , height );
1130
1138
tm [3 ] = RescaleMetric (NHW , tmetric );
0 commit comments