@@ -155,9 +155,34 @@ public void ShouldUseTheColorFuzz()
155
155
ColorAssert . Equal ( new MagickColor ( "#fd2ff729f28b" ) , diff , 0 , 0 ) ;
156
156
}
157
157
158
+ [ Theory ]
159
+ [ InlineData ( ErrorMetric . Undefined , 0.3653 ) ]
160
+ [ InlineData ( ErrorMetric . Absolute , 0.2905 ) ]
161
+ [ InlineData ( ErrorMetric . DotProductCorrelation , 0.4668 ) ]
162
+ [ InlineData ( ErrorMetric . Fuzz , 0.4662 ) ]
163
+ [ InlineData ( ErrorMetric . MeanAbsolute , 0.1747 ) ]
164
+ [ InlineData ( ErrorMetric . MeanErrorPerPixel , 0.1747 ) ]
165
+ [ InlineData ( ErrorMetric . MeanSquared , 0.1334 ) ]
166
+ [ InlineData ( ErrorMetric . NormalizedCrossCorrelation , 0.4668 ) ]
167
+ [ InlineData ( ErrorMetric . PeakAbsolute , 1 ) ]
168
+ [ InlineData ( ErrorMetric . PeakSignalToNoiseRatio , 0.0728 ) ]
169
+ [ InlineData ( ErrorMetric . PerceptualHash , 0 ) ]
170
+ [ InlineData ( ErrorMetric . RootMeanSquared , 0.3653 ) ]
171
+ [ InlineData ( ErrorMetric . StructuralSimilarity , 0.1546 ) ]
172
+ [ InlineData ( ErrorMetric . StructuralDissimilarity , 0.4226 ) ]
173
+ public void ShouldReturnTheCorrectValueForEachErrorMetric ( ErrorMetric errorMetric , double expectedResult )
174
+ {
175
+ using var image = new MagickImage ( Files . Builtin . Logo ) ;
176
+ using var other = image . CloneAndMutate ( image => image . Rotate ( 180 ) ) ;
177
+
178
+ var result = image . Compare ( other , errorMetric ) ;
179
+ Assert . InRange ( result , expectedResult , expectedResult + 0.0001 ) ;
180
+ }
181
+
158
182
[ Theory ]
159
183
[ InlineData ( ErrorMetric . Undefined , 0.4726 ) ]
160
184
[ InlineData ( ErrorMetric . Absolute , 0.3944 , 0.3945 ) ]
185
+ [ InlineData ( ErrorMetric . DotProductCorrelation , 0.4748 ) ]
161
186
[ InlineData ( ErrorMetric . Fuzz , 0.5677 , 0.5676 ) ]
162
187
[ InlineData ( ErrorMetric . MeanAbsolute , 0.2714 ) ]
163
188
[ InlineData ( ErrorMetric . MeanErrorPerPixel , 0.2714 ) ]
@@ -167,31 +192,40 @@ public void ShouldUseTheColorFuzz()
167
192
[ InlineData ( ErrorMetric . PeakSignalToNoiseRatio , 0.0542 ) ]
168
193
[ InlineData ( ErrorMetric . PerceptualHash , 0 ) ]
169
194
[ InlineData ( ErrorMetric . RootMeanSquared , 0.4726 ) ]
170
- [ InlineData ( ErrorMetric . StructuralSimilarity , 0.4220 ) ]
171
- [ InlineData ( ErrorMetric . StructuralDissimilarity , 0.2889 ) ]
172
- public void ShouldReturnTheCorrectValueForEachErrorMetric ( ErrorMetric errorMetric , double expectedResult , double ? expectedArm64Result = null )
195
+ [ InlineData ( ErrorMetric . StructuralSimilarity , 0.2889 ) ]
196
+ [ InlineData ( ErrorMetric . StructuralDissimilarity , 0.3555 ) ]
197
+ public void ShouldReturnTheCorrectValueForEachErrorMetricForImageWithAlphaChannel ( ErrorMetric errorMetric , double expectedResult , double ? expectedArm64Result = null )
173
198
{
174
199
using var image = new MagickImage ( Files . MagickNETIconPNG ) ;
175
200
using var other = image . CloneAndMutate ( image => image . Rotate ( 180 ) ) ;
176
201
177
202
var result = image . Compare ( other , errorMetric ) ;
178
- if ( expectedArm64Result != null && ( TestRuntime . IsLinuxArm64 || TestRuntime . IsMacOSArm64 ) )
203
+ if ( expectedArm64Result != null && TestRuntime . IsArm64 )
179
204
Assert . InRange ( result , expectedArm64Result . Value , expectedArm64Result . Value + 0.0001 ) ;
180
205
else
181
206
Assert . InRange ( result , expectedResult , expectedResult + 0.0001 ) ;
182
207
}
183
208
184
- [ Theory ]
185
- [ InlineData ( ErrorMetric . PhaseCorrelation ) ]
186
- [ InlineData ( ErrorMetric . DotProductCorrelation ) ]
187
- public void ShouldThrowExceptionWhenErrorMetricIsNotSupported ( ErrorMetric errorMetric )
209
+ [ Fact ]
210
+ public void ShouldReturnTheCorrectValueForPhaseCorrelationErrorMetric ( )
188
211
{
189
212
using var image = new MagickImage ( Files . Builtin . Logo ) ;
213
+ image . Resize ( 64 , 64 ) ;
190
214
using var other = image . CloneAndMutate ( image => image . Rotate ( 180 ) ) ;
191
215
192
- var exception = Assert . Throws < MagickImageErrorException > ( ( ) => image . Compare ( other , errorMetric ) ) ;
216
+ var result = image . Compare ( other , ErrorMetric . PhaseCorrelation ) ;
217
+ Assert . InRange ( result , 0.1871 , 0.1872 ) ;
218
+ }
219
+
220
+ [ Fact ]
221
+ public void ShouldReturnTheCorrectValueForPhaseCorrelationErrorMetricWithAlphaChannel ( )
222
+ {
223
+ using var image = new MagickImage ( Files . MagickNETIconPNG ) ;
224
+ image . Resize ( 64 , 64 ) ;
225
+ using var other = image . CloneAndMutate ( image => image . Rotate ( 180 ) ) ;
193
226
194
- Assert . Contains ( "metric not supported" , exception . Message ) ;
227
+ var result = image . Compare ( other , ErrorMetric . PhaseCorrelation ) ;
228
+ Assert . InRange ( result , 0.0085 , 0.0086 ) ;
195
229
}
196
230
}
197
231
}
0 commit comments