- registration getting better
This commit is contained in:
+30
-17
@@ -749,7 +749,7 @@ mod tests {
|
||||
)
|
||||
.slice(s![.., 0])
|
||||
.mapv(|i| i as f64);
|
||||
let q = vec![0.85, 4.0];
|
||||
let q = vec![0.85, 2.0];
|
||||
let im_b =
|
||||
Transform::new(q.clone(), vec![im_a.shape()[0]]).interpolate::<1, _, _>(&im_a)?;
|
||||
|
||||
@@ -871,7 +871,7 @@ mod tests {
|
||||
let f = gaussian_smooth(im_a.view(), &[*sigma_val; 2])?;
|
||||
let m = gaussian_smooth(im_b.view(), &[*sigma_val; 2])?;
|
||||
let bf = BSpline::<0, _>::new(f.view());
|
||||
let bm = BSpline::<1, _>::new(m.view());
|
||||
let bm = BSpline::<3, _>::new(m.view());
|
||||
let metric = MattesMetric::new(bf, bm, SamplingArg::Random(3000), 128, edge)?;
|
||||
|
||||
let mi_id = metric.evaluate(&identity);
|
||||
@@ -899,7 +899,7 @@ mod tests {
|
||||
let f4 = gaussian_smooth(im_a.view(), &[4.0, 4.0])?;
|
||||
let m4 = gaussian_smooth(im_b.view(), &[4.0, 4.0])?;
|
||||
let bf4 = BSpline::<0, _>::new(f4.view());
|
||||
let bm4 = BSpline::<1, _>::new(m4.view());
|
||||
let bm4 = BSpline::<3, _>::new(m4.view());
|
||||
let metric4 = MattesMetric::new(bf4, bm4, SamplingArg::Random(5000), 128, edge)?;
|
||||
let mi_p_coarse = metric4.evaluate(&p);
|
||||
let mi_qinv_coarse = metric4.evaluate(&q_inv);
|
||||
@@ -943,7 +943,7 @@ mod tests {
|
||||
let m = gaussian_smooth(im_b.view(), &[4.0, 4.0])?;
|
||||
let metric = MattesMetric::new(
|
||||
BSpline::<0, _>::new(f.view()),
|
||||
BSpline::<1, _>::new(m.view()),
|
||||
BSpline::<3, _>::new(m.view()),
|
||||
SamplingArg::Random(3000),
|
||||
128,
|
||||
edge,
|
||||
@@ -1022,13 +1022,24 @@ mod tests {
|
||||
.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_images.tif"))?;
|
||||
|
||||
let mut tif = IJTiffFile::new(
|
||||
std::env::home_dir()
|
||||
.unwrap()
|
||||
.join("tmp/register_real_images.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.1);
|
||||
assert!(sse < 0.1);
|
||||
assert!(max_err < 0.02);
|
||||
assert!(sse < 0.02);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
@@ -1036,7 +1047,8 @@ mod tests {
|
||||
#[test]
|
||||
fn register_real_images2() -> Result<(), Box<dyn std::error::Error>> {
|
||||
let fixed = read_tiff("test_files/fixed.tif")?;
|
||||
let e = Transform::<Ix2>::new(vec![0.8, 0.0, 0.0, 1.0, 0.0, 0.0], fixed.shape().to_vec()).inverse()?;
|
||||
let e = Transform::<Ix2>::new(vec![0.8, 0.0, 0.0, 1.0, 0.0, 0.0], fixed.shape().to_vec())
|
||||
.inverse()?;
|
||||
let moving = e.interpolate::<3, _, _>(fixed.view())?;
|
||||
|
||||
let t = Transform::<Ix2>::register(
|
||||
@@ -1047,27 +1059,28 @@ mod tests {
|
||||
None,
|
||||
)?;
|
||||
|
||||
let e_inv = e.inverse()?;
|
||||
let sse = t
|
||||
.parameters
|
||||
.iter()
|
||||
.zip(e.parameters.iter())
|
||||
.zip(e_inv.parameters.iter())
|
||||
.map(|(a, b)| (a - b).powi(2))
|
||||
.sum::<f64>();
|
||||
let max_err = t
|
||||
.parameters
|
||||
.iter()
|
||||
.zip(e.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"))?;
|
||||
// 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(moving.mapv(|i| i as u16), 2, 0, 0)?;
|
||||
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(moving.mapv(|i| i as u16), 2, 0, 0)?;
|
||||
|
||||
assert!(max_err < 0.1);
|
||||
assert!(sse < 0.1);
|
||||
assert!(max_err < 0.02);
|
||||
assert!(sse < 0.02);
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user