From ddd92b33f45a56b2a042c303c2c2a5983cd6574b Mon Sep 17 00:00:00 2001 From: Radzivon Bartoshyk Date: Wed, 6 May 2026 08:34:28 +0100 Subject: [PATCH] Linearization improvements --- app/src/main.rs | 2 +- src/image_linearization.rs | 42 ++++++++++++++++++++++++++++++++------ 2 files changed, 37 insertions(+), 7 deletions(-) diff --git a/app/src/main.rs b/app/src/main.rs index e078c491..7a4bc7a8 100644 --- a/app/src/main.rs +++ b/app/src/main.rs @@ -217,7 +217,7 @@ fn main() { median_blur( &cvt.to_immutable_ref(), &mut dst_image, - 7, + 25, ThreadingPolicy::Single, ) .unwrap(); diff --git a/src/image_linearization.rs b/src/image_linearization.rs index 0636b028..e27c25ef 100644 --- a/src/image_linearization.rs +++ b/src/image_linearization.rs @@ -281,7 +281,12 @@ fn linearize8>( { let src = &src[..src_ref.width as usize * src_ref.channels.channels()]; let dst = &mut dst[..src_ref.width as usize * src_ref.channels.channels()]; - for (dst, src) in dst.chunks_exact_mut(4).zip(src.chunks_exact(4)) { + for (dst, src) in dst + .as_chunks_mut::<4>() + .0 + .iter_mut() + .zip(src.as_chunks::<4>().0.iter()) + { dst[0] = linearization.linearization[src[0] as usize]; dst[1] = linearization.linearization[src[1] as usize]; dst[2] = linearization.linearization[src[2] as usize]; @@ -335,7 +340,12 @@ fn gen_gamma8>( { let src = &src[..src_ref.width as usize * src_ref.channels.channels()]; let dst = &mut dst[..src_ref.width as usize * src_ref.channels.channels()]; - for (dst, src) in dst.chunks_exact_mut(4).zip(src.chunks_exact(4)) { + for (dst, src) in dst + .as_chunks_mut::<4>() + .0 + .iter_mut() + .zip(src.as_chunks::<4>().0.iter()) + { dst[0] = gamma.gamma[src[0] as usize]; dst[1] = gamma.gamma[src[1] as usize]; dst[2] = gamma.gamma[src[2] as usize]; @@ -389,7 +399,12 @@ fn linearize16>( { let src = &src[..src_ref.width as usize * src_ref.channels.channels()]; let dst = &mut dst[..src_ref.width as usize * src_ref.channels.channels()]; - for (dst, src) in dst.chunks_exact_mut(4).zip(src.chunks_exact(4)) { + for (dst, src) in dst + .as_chunks_mut::<4>() + .0 + .iter_mut() + .zip(src.as_chunks::<4>().0.iter()) + { dst[0] = linearization.linearization[src[0] as usize]; dst[1] = linearization.linearization[src[1] as usize]; dst[2] = linearization.linearization[src[2] as usize]; @@ -443,7 +458,12 @@ fn gen_gamma16>( { let src = &src[..src_ref.width as usize * src_ref.channels.channels()]; let dst = &mut dst[..src_ref.width as usize * src_ref.channels.channels()]; - for (dst, src) in dst.chunks_exact_mut(4).zip(src.chunks_exact(4)) { + for (dst, src) in dst + .as_chunks_mut::<4>() + .0 + .iter_mut() + .zip(src.as_chunks::<4>().0.iter()) + { dst[0] = gamma.gamma[src[0] as usize]; dst[1] = gamma.gamma[src[1] as usize]; dst[2] = gamma.gamma[src[2] as usize]; @@ -496,7 +516,12 @@ fn linearize_f32>( { let src = &src[..src_ref.width as usize * src_ref.channels.channels()]; let dst = &mut dst[..src_ref.width as usize * src_ref.channels.channels()]; - for (dst, src) in dst.chunks_exact_mut(4).zip(src.chunks_exact(4)) { + for (dst, src) in dst + .as_chunks_mut::<4>() + .0 + .iter_mut() + .zip(src.as_chunks::<4>().0.iter()) + { dst[0] = transfer_function.linearize(src[0]); dst[1] = transfer_function.linearize(src[1]); dst[2] = transfer_function.linearize(src[2]); @@ -549,7 +574,12 @@ fn gamma_f32>( { let src = &src[..src_ref.width as usize * src_ref.channels.channels()]; let dst = &mut dst[..src_ref.width as usize * src_ref.channels.channels()]; - for (dst, src) in dst.chunks_exact_mut(4).zip(src.chunks_exact(4)) { + for (dst, src) in dst + .as_chunks_mut::<4>() + .0 + .iter_mut() + .zip(src.as_chunks::<4>().0.iter()) + { dst[0] = transfer_function.gamma(src[0]); dst[1] = transfer_function.gamma(src[1]); dst[2] = transfer_function.gamma(src[2]);