classDiagram direction TB class ImageFilter { <> +Capabilities capabilities +apply(image, metadata) FilterResult +apply_batch(items) list~FilterResult~ } class NumericFilter { <> +apply(image, metadata) FilterResult #_apply_with_layout(image, metadata, layout) FilterResult #_compute(image, layout) ndarray #_history_entry(image, output, layout) dict } class Pipeline { +tuple~ImageFilter~ steps +Capabilities capabilities +apply(image, metadata) FilterResult } class SliceWise { +ImageFilter filter +int axis +apply(image, metadata) FilterResult #_compute(image, layout) ndarray } ImageFilter <|-- NumericFilter ImageFilter <|-- Pipeline NumericFilter <|-- SliceWise Pipeline "0..*" o-- "1..*" ImageFilter : ordered children SliceWise "0..*" o-- "1" ImageFilter : adapts NumericFilter <|-- MeanFilter NumericFilter <|-- GaussianFilter NumericFilter <|-- MedianFilter NumericFilter <|-- SobelFilter NumericFilter <|-- LaplacianFilter NumericFilter <|-- LoGFilter NumericFilter <|-- LawsFilter NumericFilter <|-- GaborFilter NumericFilter <|-- CannyFilter NumericFilter <|-- WaveletFilter