Skip to main content

Zensim

Struct Zensim 

Source
pub struct Zensim { /* private fields */ }
Expand description

Metric configuration. Methods on this struct are the primary API.

use zensim::{Zensim, ZensimProfile, RgbSlice};
let z = Zensim::new(ZensimProfile::latest());
let source = RgbSlice::new(&src, 8, 8);
let distorted = RgbSlice::new(&dst, 8, 8);
let result = z.compute(&source, &distorted).unwrap();
println!("{}: {:.2}", result.profile(), result.score());

Implementations§

Source§

impl Zensim

Source

pub fn compute_with_ref_and_diffmap( &self, precomputed: &PrecomputedReference, distorted: &impl ImageSource, options: impl Into<DiffmapOptions>, ) -> Result<DiffmapResult, ZensimError>

Compare with precomputed reference and return both score and per-pixel error map.

The diffmap fuses SSIM error maps from all pyramid scales, weighted by the profile’s trained weights. Coarser scales are upsampled to full resolution and blended. The zensim score uses the identical multi-scale pipeline.

§Use case

Encoder quantization loops: precompute the reference once, then in each iteration call this to get both a global quality score (for convergence) and a spatial error map (for per-block quant field adjustment).

§Errors

Returns ZensimError::ImageTooSmall if dimensions < 8×8.

Source

pub fn compute_with_ref_and_diffmap_linear_planar( &self, precomputed: &PrecomputedReference, planes: [&[f32]; 3], width: usize, height: usize, stride: usize, options: impl Into<DiffmapOptions>, ) -> Result<DiffmapResult, ZensimError>

Compare planar linear RGB f32 against a precomputed reference, producing both a score and a per-pixel error map.

planes are [R, G, B], each with at least stride * height elements. stride is the number of f32 elements per row (≥ width).

This avoids the interleave-to-RGBA overhead when the caller already has separate channel buffers in linear light (e.g., from an encoder’s reconstruction pipeline).

§Errors

Returns ZensimError::ImageTooSmall if dimensions < 8×8.

Source

pub fn compute_with_diffmap( &self, source: &impl ImageSource, distorted: &impl ImageSource, options: impl Into<DiffmapOptions>, ) -> Result<DiffmapResult, ZensimError>

Compare two images and return both score and per-pixel error map.

Convenience method that handles precomputation internally. For iterative use (encoder loops), prefer precompute_reference + compute_with_ref_and_diffmap to avoid re-converting the reference each time.

§Errors

Returns ZensimError if dimensions are mismatched or too small.

Source§

impl Zensim

Source

pub fn new(profile: ZensimProfile) -> Self

Create a new Zensim with the given profile. Parallel by default.

Source

pub fn with_parallel(self, parallel: bool) -> Self

Enable or disable multi-threaded computation (rayon). Default: true.

Source

pub fn profile(&self) -> ZensimProfile

Current profile.

Source

pub fn parallel(&self) -> bool

Whether multi-threaded computation is enabled.

Source

pub fn compute( &self, source: &impl ImageSource, distorted: &impl ImageSource, ) -> Result<ZensimResult, ZensimError>

Compare source and distorted images.

§Errors

Returns ZensimError if dimensions are mismatched or too small.

Source

pub fn precompute_reference( &self, source: &impl ImageSource, ) -> Result<PrecomputedReference, ZensimError>

Pre-compute reference image data for batch comparison.

§Errors

Returns ZensimError::ImageTooSmall if dimensions < 8×8.

Source

pub fn compute_with_ref( &self, precomputed: &PrecomputedReference, distorted: &impl ImageSource, ) -> Result<ZensimResult, ZensimError>

Compare a distorted image against a precomputed reference.

§Errors

Returns ZensimError::ImageTooSmall if dimensions < 8×8.

Source

pub fn precompute_reference_linear_planar( &self, planes: [&[f32]; 3], width: usize, height: usize, stride: usize, ) -> Result<PrecomputedReference, ZensimError>

Precompute reference from planar linear RGB f32 data.

planes are [R, G, B], each with at least stride * height elements. stride is the number of f32 elements per row (≥ width; may be larger for padded buffers like the encoder’s padded_width).

This avoids the interleave-to-RGBA overhead when the caller already has separate channel buffers in linear light.

§Errors

Returns ZensimError::ImageTooSmall if dimensions < 8×8.

Trait Implementations§

Source§

impl Clone for Zensim

Source§

fn clone(&self) -> Zensim

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Zensim

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.