pub struct MatteHandle { /* private fields */ }Expand description
Builder for chaining mask processing operations on the raw matte.
The raw matte is the soft, grayscale alpha prediction from the model.
§Example
use outline::Outline;
let outline = Outline::new("model.onnx");
let session = outline.for_image("input.jpg")?;
// Chain operations and execute them
let mask = session.matte()
.blur_with(6.0) // Smooth edges
.threshold_with(120) // Convert to binary
.dilate_with(5.0) // Expand slightly
.processed()?; // Execute operations
mask.save("mask.png")?;Implementations§
Source§impl MatteHandle
impl MatteHandle
Sourcepub fn to_raw_matte(&self) -> GrayImage
pub fn to_raw_matte(&self) -> GrayImage
Clone and return the raw grayscale matte.
Sourcepub fn as_raw_matte(&self) -> &GrayImage
pub fn as_raw_matte(&self) -> &GrayImage
Get a reference to the raw grayscale matte.
Sourcepub fn dimensions(&self) -> (u32, u32)
pub fn dimensions(&self) -> (u32, u32)
Return the current matte canvas dimensions.
Sourcepub fn into_image(self) -> GrayImage
pub fn into_image(self) -> GrayImage
Consume the handle and return the current matte as a grayscale image.
Sourcepub fn save(&self, path: impl AsRef<Path>) -> OutlineResult<()>
pub fn save(&self, path: impl AsRef<Path>) -> OutlineResult<()>
Save the current matte to the specified path.
Sourcepub fn bounding_box(&self) -> Option<BoundingBox>
pub fn bounding_box(&self) -> Option<BoundingBox>
Compute the bounding box of the current matte using a non-zero threshold.
Sourcepub fn bounding_box_with(&self, threshold: u8) -> Option<BoundingBox>
pub fn bounding_box_with(&self, threshold: u8) -> Option<BoundingBox>
Compute the bounding box of the current matte at or above threshold.
Sourcepub fn threshold_with(self, value: u8) -> Self
pub fn threshold_with(self, value: u8) -> Self
Add a threshold operation with a custom value.
Sourcepub fn dilate(self) -> Self
pub fn dilate(self) -> Self
Add a dilation operation using the default radius.
Note: Dilation typically works best on binary masks. Consider calling
threshold before dilate if working with a soft matte.
Sourcepub fn dilate_with(self, radius: f32) -> Self
pub fn dilate_with(self, radius: f32) -> Self
Add a dilation operation with a custom radius.
Note: Dilation typically works best on binary masks. Consider calling
threshold before dilate if working with a soft matte.
Sourcepub fn erode(self) -> Self
pub fn erode(self) -> Self
Add an erosion operation using the default radius.
Note: Erosion typically works best on binary masks. Consider calling
threshold before erode if working with a soft matte.
Sourcepub fn erode_with(self, radius: f32) -> Self
pub fn erode_with(self, radius: f32) -> Self
Add an erosion operation with a custom radius.
Note: Erosion typically works best on binary masks. Consider calling
threshold before erode if working with a soft matte.
Sourcepub fn erode_with_border_mode(
self,
radius: f32,
border_mode: ErosionBorderMode,
) -> Self
pub fn erode_with_border_mode( self, radius: f32, border_mode: ErosionBorderMode, ) -> Self
Add an erosion operation with a custom radius and boundary behavior.
Note: Erosion typically works best on binary masks. Consider calling
threshold before erode if working with a soft matte.
Sourcepub fn fill_holes(self) -> Self
pub fn fill_holes(self) -> Self
Add a hole-filling operation to the processing pipeline.
Note: Hole-filling typically works best on binary masks. Consider calling
threshold before fill_holes if working with a soft matte.
Sourcepub fn fill_holes_with(self, threshold: u8) -> Self
pub fn fill_holes_with(self, threshold: u8) -> Self
Add a hole-filling operation with a custom threshold.
Note: Hole-filling typically works best on binary masks. Consider calling
threshold before fill_holes if working with a soft matte.
Sourcepub fn keep_largest_component(self) -> Self
pub fn keep_largest_component(self) -> Self
Keep only the largest connected foreground component.
Note: Component filtering typically works best on binary masks. Consider calling
threshold before keep_largest_component if working with a soft matte.
Sourcepub fn keep_n_largest_components(self, count: usize) -> Self
pub fn keep_n_largest_components(self, count: usize) -> Self
Keep the largest count connected foreground components.
Note: Component filtering typically works best on binary masks. Consider calling
threshold before keep_n_largest_components if working with a soft matte.
Sourcepub fn drop_components_below_area(self, min_area: f32) -> Self
pub fn drop_components_below_area(self, min_area: f32) -> Self
Sourcepub fn processed(self) -> OutlineResult<MaskHandle>
pub fn processed(self) -> OutlineResult<MaskHandle>
Process the raw matte with the accumulated operations.
Sourcepub fn processed_with(
self,
pipeline: &MaskPipeline,
) -> OutlineResult<MaskHandle>
pub fn processed_with( self, pipeline: &MaskPipeline, ) -> OutlineResult<MaskHandle>
Process the raw matte with the accumulated operations and a custom pipeline.
Sourcepub fn foreground(&self) -> OutlineResult<ForegroundHandle>
pub fn foreground(&self) -> OutlineResult<ForegroundHandle>
Compose the RGBA foreground image from the RGB image and the current matte.
Sourcepub fn colorize(&self, color: impl Into<MaskColor>) -> RgbaImage
pub fn colorize(&self, color: impl Into<MaskColor>) -> RgbaImage
Colorize the current matte into a flat-color RGBA image.
Sourcepub fn trace<V>(
&self,
vectorizer: &V,
options: &V::Options,
) -> OutlineResult<V::Output>where
V: MaskVectorizer,
pub fn trace<V>(
&self,
vectorizer: &V,
options: &V::Options,
) -> OutlineResult<V::Output>where
V: MaskVectorizer,
Trace the current matte using the specified vectorizer and options.
Sourcepub fn pad(self, padding: impl Into<Padding>) -> Self
pub fn pad(self, padding: impl Into<Padding>) -> Self
Expand the matte canvas by the given padding while keeping content at the same offset.
Any pending matte operations are applied before padding so method call order is preserved.
The underlying RGB canvas is padded with black to keep foreground
aligned with the matte.
Sourcepub fn crop(self, bounds: BoundingBox) -> Option<Self>
pub fn crop(self, bounds: BoundingBox) -> Option<Self>
Crop the matte and source RGB image to bounds.
Returns None when bounds is empty or outside the current matte canvas.
Sourcepub fn crop_to_content(self) -> Option<Self>
pub fn crop_to_content(self) -> Option<Self>
Crop the matte and source RGB image to the smallest non-zero content box.
Returns None when the current matte has no non-zero pixels.
Sourcepub fn crop_to_content_with(self, threshold: u8) -> Option<Self>
pub fn crop_to_content_with(self, threshold: u8) -> Option<Self>
Crop the matte and source RGB image to the smallest content box at or above threshold.
Returns None when the current matte has no pixels at or above threshold.
Trait Implementations§
Source§impl Clone for MatteHandle
impl Clone for MatteHandle
Auto Trait Implementations§
impl Freeze for MatteHandle
impl RefUnwindSafe for MatteHandle
impl Send for MatteHandle
impl Sync for MatteHandle
impl Unpin for MatteHandle
impl UnsafeUnpin for MatteHandle
impl UnwindSafe for MatteHandle
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
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 moreSource§impl<T> Pointable for T
impl<T> Pointable for T
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
impl<SS, SP> SupersetOf<SS> for SPwhere
SS: SubsetOf<SP>,
Source§fn to_subset(&self) -> Option<SS>
fn to_subset(&self) -> Option<SS>
self from the equivalent element of its
superset. Read moreSource§fn is_in_subset(&self) -> bool
fn is_in_subset(&self) -> bool
self is actually part of its subset T (and can be converted to it).Source§fn to_subset_unchecked(&self) -> SS
fn to_subset_unchecked(&self) -> SS
self.to_subset but without any property checks. Always succeeds.Source§fn from_subset(element: &SS) -> SP
fn from_subset(element: &SS) -> SP
self to the equivalent element of its superset.