visqol_rs/
patch_similarity_comparator.rs1use ndarray::Array2 as ImagePatch;
2use serde::Serialize;
3#[derive(Debug, Clone, Serialize)]
4pub struct PatchSimilarityResult {
7 pub freq_band_means: Vec<f64>,
9 pub freq_band_stddevs: Vec<f64>,
11 pub freq_band_deg_energy: Vec<f64>,
13 pub similarity: f64,
15 pub ref_patch_start_time: f64,
17 pub ref_patch_end_time: f64,
19 pub deg_patch_start_time: f64,
21 pub deg_patch_end_time: f64,
23}
24
25impl PatchSimilarityResult {
26 pub fn new(
28 freq_band_means: Vec<f64>,
29 freq_band_stddevs: Vec<f64>,
30 freq_band_deg_energy: Vec<f64>,
31 similarity: f64,
32 ) -> Self {
33 Self {
34 freq_band_means,
35 freq_band_stddevs,
36 freq_band_deg_energy,
37 similarity,
38 ref_patch_start_time: 0.0,
39 ref_patch_end_time: 0.0,
40 deg_patch_start_time: 0.0,
41 deg_patch_end_time: 0.0,
42 }
43 }
44}
45
46impl Default for PatchSimilarityResult {
47 fn default() -> Self {
48 Self {
49 freq_band_means: Vec::<f64>::new(),
50 freq_band_stddevs: Vec::<f64>::new(),
51 freq_band_deg_energy: Vec::<f64>::new(),
52 similarity: 0.0,
53 ref_patch_start_time: 0.0,
54 ref_patch_end_time: 0.0,
55 deg_patch_start_time: 0.0,
56 deg_patch_end_time: 0.0,
57 }
58 }
59}
60
61pub trait PatchSimilarityComparator {
63 fn measure_patch_similarity(
64 &self,
65 ref_patch: &mut ImagePatch<f64>,
66 deg_patch: &mut ImagePatch<f64>,
67 ) -> PatchSimilarityResult;
68}