- registration getting better
This commit is contained in:
+48
-32
@@ -1008,20 +1008,24 @@ mod tests {
|
||||
None,
|
||||
)?;
|
||||
|
||||
let sse = t
|
||||
.parameters
|
||||
.iter()
|
||||
.zip(expected.iter())
|
||||
.map(|(a, b)| (a - b).powi(2))
|
||||
.sum::<f64>();
|
||||
let max_err = t
|
||||
.parameters
|
||||
.iter()
|
||||
.zip(expected.iter())
|
||||
.map(|(a, b)| (a - b).abs())
|
||||
.fold(0.0f64, f64::max);
|
||||
println!("Our: {:?} max_err: {:.4} sse: {:.4}", t, max_err, sse);
|
||||
let expected_transform = Transform::<Ix2>::new(expected.to_vec(), fixed.shape().to_vec());
|
||||
|
||||
// Compare transformed coordinates of all pixels
|
||||
let shape = fixed.shape();
|
||||
let mut sum_diff = 0.0;
|
||||
let mut count = 0;
|
||||
for row in 0..shape[0] {
|
||||
for col in 0..shape[1] {
|
||||
let point = [row as f64, col as f64];
|
||||
let t_point = t.transform_point(&point);
|
||||
let e_point = expected_transform.transform_point(&point);
|
||||
let diff_sq = (t_point[0] - e_point[0]).powi(2) + (t_point[1] - e_point[1]).powi(2);
|
||||
sum_diff += diff_sq.sqrt();
|
||||
count += 1;
|
||||
}
|
||||
}
|
||||
let mean_diff = sum_diff / count as f64;
|
||||
println!("Our: {:?} mean_coord_diff: {:.6}", t, mean_diff);
|
||||
|
||||
let mut tif = IJTiffFile::new(
|
||||
std::env::home_dir()
|
||||
@@ -1038,8 +1042,7 @@ mod tests {
|
||||
)?;
|
||||
tif.save(moving.mapv(|i| i as u16), 2, 0, 0)?;
|
||||
|
||||
assert!(max_err < 0.02);
|
||||
assert!(sse < 0.02);
|
||||
assert!(mean_diff < 0.1);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -1060,27 +1063,40 @@ mod tests {
|
||||
)?;
|
||||
|
||||
let e_inv = e.inverse()?;
|
||||
let sse = t
|
||||
.parameters
|
||||
.iter()
|
||||
.zip(e_inv.parameters.iter())
|
||||
.map(|(a, b)| (a - b).powi(2))
|
||||
.sum::<f64>();
|
||||
let max_err = t
|
||||
.parameters
|
||||
.iter()
|
||||
.zip(e_inv.parameters.iter())
|
||||
.map(|(a, b)| (a - b).abs())
|
||||
.fold(0.0f64, f64::max);
|
||||
println!("Our: {:?} max_err: {:.4} sse: {:.4}", t, max_err, sse);
|
||||
|
||||
let mut tif = IJTiffFile::new(std::env::home_dir().unwrap().join("tmp/register_real_images2.tif"))?;
|
||||
// Compare transformed coordinates of all pixels
|
||||
let shape = fixed.shape();
|
||||
let mut sum_diff = 0.0;
|
||||
let mut count = 0;
|
||||
for row in 0..shape[0] {
|
||||
for col in 0..shape[1] {
|
||||
let point = [row as f64, col as f64];
|
||||
let t_point = t.transform_point(&point);
|
||||
let e_point = e_inv.transform_point(&point);
|
||||
let diff_sq = (t_point[0] - e_point[0]).powi(2) + (t_point[1] - e_point[1]).powi(2);
|
||||
sum_diff += diff_sq.sqrt();
|
||||
count += 1;
|
||||
}
|
||||
}
|
||||
let mean_diff = sum_diff / count as f64;
|
||||
println!("Our: {:?} mean_coord_diff: {:.6}", t, mean_diff);
|
||||
|
||||
let mut tif = IJTiffFile::new(
|
||||
std::env::home_dir()
|
||||
.unwrap()
|
||||
.join("tmp/register_real_images2.tif"),
|
||||
)?;
|
||||
tif.save(fixed.mapv(|i| i as u16), 0, 0, 0)?;
|
||||
tif.save(t.interpolate_par::<1, _, _>(moving.view())?.mapv(|i| i as u16), 1, 0, 0)?;
|
||||
tif.save(
|
||||
t.interpolate_par::<1, _, _>(moving.view())?
|
||||
.mapv(|i| i as u16),
|
||||
1,
|
||||
0,
|
||||
0,
|
||||
)?;
|
||||
tif.save(moving.mapv(|i| i as u16), 2, 0, 0)?;
|
||||
|
||||
assert!(max_err < 0.02);
|
||||
assert!(sse < 0.02);
|
||||
assert!(mean_diff < 0.1);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user