Skip to main content

scirs2_ndimage/
lib.rs

1#![allow(clippy::new_without_default)]
2#![allow(clippy::excessive_precision)]
3#![allow(clippy::manual_clamp)]
4#![allow(clippy::needless_range_loop)]
5#![allow(clippy::assign_op_pattern)]
6#![allow(clippy::manual_div_ceil)]
7#![allow(clippy::manual_is_multiple_of)]
8#![allow(clippy::clone_on_copy)]
9#![allow(clippy::type_complexity)]
10#![allow(clippy::needless_question_mark)]
11#![allow(clippy::inconsistent_digit_grouping)]
12#![allow(clippy::unnecessary_cast)]
13#![allow(clippy::doc_overindented_list_items)]
14#![allow(clippy::needless_borrow)]
15#![allow(clippy::manual_slice_size_calculation)]
16#![allow(clippy::unwrap_or_default)]
17#![allow(clippy::single_char_add_str)]
18#![allow(clippy::map_flatten)]
19#![allow(clippy::collapsible_if)]
20#![allow(clippy::useless_vec)]
21#![allow(clippy::should_implement_trait)]
22#![allow(clippy::option_as_ref_deref)]
23#![allow(clippy::derivable_impls)]
24#![allow(clippy::unnecessary_lazy_evaluations)]
25#![allow(clippy::ptr_arg)]
26#![allow(clippy::nonminimal_bool)]
27#![allow(clippy::needless_return)]
28#![allow(clippy::let_and_return)]
29#![allow(clippy::if_same_then_else)]
30#![allow(clippy::collapsible_else_if)]
31#![allow(clippy::bool_comparison)]
32#![allow(clippy::vec_init_then_push)]
33#![allow(clippy::useless_format)]
34#![allow(clippy::unnecessary_map_or)]
35#![allow(clippy::redundant_closure)]
36#![allow(clippy::map_entry)]
37#![allow(clippy::map_clone)]
38#![allow(clippy::manual_range_contains)]
39#![allow(clippy::manual_map)]
40#![allow(clippy::manual_dangling_ptr)]
41#![allow(clippy::manual_contains)]
42#![allow(clippy::manual_c_str_literals)]
43#![allow(clippy::implicit_saturating_sub)]
44#![allow(clippy::format_in_format_args)]
45#![allow(clippy::for_kv_map)]
46#![allow(clippy::extra_unused_type_parameters)]
47#![allow(clippy::explicit_counter_loop)]
48#![allow(clippy::explicit_auto_deref)]
49#![allow(clippy::empty_line_after_outer_attr)]
50#![allow(clippy::empty_line_after_doc_comments)]
51#![allow(clippy::doc_lazy_continuation)]
52#![allow(unreachable_code)]
53#![allow(unused_mut)]
54#![allow(missing_docs)]
55#![allow(for_loops_over_fallibles)]
56#![allow(unused_parens)]
57#![allow(unexpected_cfgs)]
58#![allow(unused_attributes)]
59#![allow(dead_code)]
60//! # SciRS2 NDImage - N-Dimensional Image Processing
61//!
62//! **scirs2-ndimage** provides comprehensive N-dimensional image processing modeled after SciPy's
63//! `ndimage` module, offering filtering, morphology, interpolation, measurements, segmentation,
64//! and feature detection with GPU acceleration and chunked processing for large images.
65//!
66//! ## 🎯 Key Features
67//!
68//! - **SciPy Compatibility**: Drop-in replacement for `scipy.ndimage` functions
69//! - **Comprehensive Filters**: Gaussian, median, Sobel, bilateral, anisotropic diffusion
70//! - **Morphological Operations**: Erosion, dilation, opening, closing, skeletonization
71//! - **Image Measurements**: Center of mass, moments, label statistics
72//! - **Segmentation**: Watershed, region growing, active contours
73//! - **Feature Detection**: Edge detection (Canny, Sobel), corner detection (Harris)
74//! - **GPU Acceleration**: CUDA/ROCm for large-scale image processing
75//! - **Memory Efficient**: Chunked processing for images larger than RAM
76//!
77//! ## 📦 Module Overview
78//!
79//! | SciRS2 Module | SciPy Equivalent | Description |
80//! |---------------|------------------|-------------|
81//! | `filters` | `scipy.ndimage.filters` | Convolution, Gaussian, median filters |
82//! | `morphology` | `scipy.ndimage.morphology` | Erosion, dilation, binary operations |
83//! | `interpolation` | `scipy.ndimage.interpolation` | Rotation, zoom, shift, affine transforms |
84//! | `measurements` | `scipy.ndimage.measurements` | Label, center of mass, histograms |
85//! | `segmentation` | - | Watershed, region growing, active contours |
86//! | `features` | - | Edge detection, corner detection, keypoints |
87//!
88//! ## 🚀 Quick Start
89//!
90//! ```toml
91//! [dependencies]
92//! scirs2-ndimage = "0.5.0"
93//! ```
94//!
95//! ```rust,no_run
96//! use scirs2_ndimage::filters;
97//! use scirs2_core::ndarray::Array2;
98//!
99//! // Gaussian filter
100//! let image = Array2::<f64>::zeros((256, 256));
101//! let filtered = filters::gaussian_filter(&image, 2.0, None, None).unwrap();
102//! ```
103//!
104//! ## 🔒 Version: 0.5.0 (March 27, 2026)
105
106// Public modules
107pub mod adaptive_image_optimizer;
108pub mod advanced_fusion_algorithms;
109pub mod advanced_streaming_ai;
110pub mod ai_driven_adaptive_processing;
111pub mod analysis;
112pub mod api_compatibility_verification;
113pub mod backend;
114pub mod biological_vision_inspired;
115pub mod chunked;
116pub mod chunked_morphology;
117pub mod chunked_processing;
118pub mod chunked_v2;
119pub mod comprehensive_examples;
120pub mod comprehensive_scipy_benchmarks;
121pub mod comprehensive_scipy_validation;
122pub mod comprehensive_validation;
123pub mod domain_specific;
124pub mod error;
125pub mod features;
126pub mod filters;
127pub mod gpu_chunked;
128pub mod gpu_operations;
129pub mod hyperdimensional_computing;
130pub mod interpolation;
131pub mod measurements;
132pub mod memory_management;
133pub mod meta_learning_algorithms;
134pub mod mmap_io;
135pub mod morphology;
136pub mod neuromorphic_computing;
137pub mod performance_profiler;
138pub mod profiling;
139pub mod python_interop;
140pub mod quantum_ai_consciousness;
141pub mod quantum_enhanced_gpu;
142pub mod quantum_inspired;
143pub mod quantum_neuromorphic_fusion;
144pub mod scipy_compat;
145pub mod scipy_compat_layer;
146pub mod scipy_migration_layer;
147pub mod scipy_performance_comparison;
148#[cfg(test)]
149mod scipy_validation_tests;
150pub mod segmentation;
151pub mod streaming;
152pub mod threading;
153pub mod utils;
154pub mod visualization;
155
156// Advanced segmentation and analysis modules (v0.3.0)
157pub mod active_contours;
158pub mod distance_transforms;
159pub mod regionprops;
160pub mod watershed;
161
162// 4D spatiotemporal processing
163pub mod array4d;
164// Dense CRF segmentation
165pub mod crf;
166// Level set methods (Chan-Vese, geodesic active contours)
167pub mod level_set;
168// Radiomics features (GLSZM, NGTDM, Laws)
169pub mod radiomics;
170// 3D watershed segmentation
171pub mod watershed3d;
172
173// Re-exports
174pub use self::error::*;
175
176// Feature detection module exports
177pub use self::features::{
178    canny,
179    edge_detector,
180    edge_detector_simple,
181    fast_corners,
182    gradient_edges,
183    harris_corners,
184    laplacian_edges,
185    sobel_edges,
186    BatchNormParams,
187    EdgeDetectionAlgorithm,
188    EdgeDetectionConfig,
189    FeatureDetectorWeights,
190    GradientMethod,
191    // Machine learning-based detection
192    LearnedEdgeDetector,
193    LearnedKeypointDescriptor,
194    MLDetectorConfig,
195    ObjectProposal,
196    ObjectProposalGenerator,
197    SemanticFeatureExtractor,
198};
199
200// Filters module exports
201pub use self::filters::{
202    // Advanced filters
203    adaptive_bilateral_filter,
204    adaptive_wiener_filter,
205    anisotropic_diffusion,
206    bilateral_filter,
207    bilateral_gradient_filter,
208    coherence_enhancing_diffusion,
209    convolve,
210    // Wavelets
211    dwt_1d,
212    dwt_2d,
213    filter_functions,
214    gabor_filter,
215    gabor_filter_bank,
216    gaussian_filter,
217    gaussian_filter_chunked,
218    gaussian_filter_f32,
219    gaussian_filter_f64,
220    generic_filter,
221    idwt_1d,
222    idwt_2d,
223    laplace,
224    log_gabor_filter,
225    maximum_filter,
226    median_filter,
227    median_filter_chunked,
228    minimum_filter,
229    multi_scale_bilateral_filter,
230    non_local_means,
231    percentile_filter,
232    rank_filter,
233    shock_filter,
234    sobel,
235    steerable_filter,
236    uniform_filter,
237    uniform_filter_chunked,
238    wavelet_decompose,
239    wavelet_denoise,
240    wavelet_reconstruct,
241    BorderMode,
242    GaborParams,
243    MultiScaleBilateralConfig,
244    WaveletFamily,
245    WaveletFilter,
246};
247
248#[cfg(feature = "simd")]
249pub use self::filters::{bilateral_filter_simd_f32, bilateral_filter_simd_f64};
250
251// Segmentation module exports
252pub use self::segmentation::{
253    active_contour,
254    adaptive_threshold,
255    chan_vese,
256    chan_vese_multiphase,
257    checkerboard_level_set,
258    create_circle_contour,
259    create_ellipse_contour,
260    // Contour finding (OpenCV-like findContours)
261    draw_contours,
262    find_contours,
263    // Advanced segmentation algorithms
264    graph_cuts,
265    marker_watershed,
266    mask_to_contour,
267    mask_to_level_set,
268    otsu_threshold,
269    point_in_contour,
270    smooth_contour,
271    threshold_binary,
272    watershed,
273    watershed_from_distance,
274    watershed_with_config,
275    ActiveContourParams,
276    AdaptiveMethod,
277    ApproximationMethod,
278    ChanVeseParams,
279    Contour,
280    ContourHierarchy,
281    ContourMoments,
282    GraphCutsParams,
283    InteractiveGraphCuts,
284    RetrievalMode,
285    WatershedConfig,
286    WatershedConnectivity,
287};
288
289// Interpolation module exports
290pub use self::interpolation::{
291    affine_transform, bspline, geometric_transform, map_coordinates, rotate, shift, spline_filter,
292    spline_filter1d, value_at_coordinates, zoom, BoundaryMode, InterpolationOrder,
293};
294
295// Measurements module exports
296pub use self::measurements::{
297    center_of_mass, central_moments, count_labels, extrema, find_objects, histogram, local_extrema,
298    mean_labels, moments, moments_inertia_tensor, normalized_moments, peak_prominences,
299    peak_widths, region_properties, regionprops_2d, sum_labels, variance_labels, PeakWidthsResult,
300    RegionProperties, RegionProperties2D,
301};
302
303// Morphology module exports
304pub use self::morphology::{
305    area_opening_2d,
306    binary_closing,
307    binary_dilation,
308    binary_dilation_2d_optimized,
309    binary_erosion,
310    binary_erosion_2d_optimized,
311    binary_fill_holes,
312    binary_hit_or_miss,
313    binary_opening,
314    black_tophat,
315    black_tophat_2d_fast,
316    box_structure,
317    // Optimized distance transforms (Meijster's separable EDT, etc.)
318    chessboard_distance_transform,
319    cityblock_distance_transform,
320    count_labels_2d,
321    disk_structure,
322    distance_transform_bf,
323    distance_transform_cdt,
324    distance_transform_chessboard_2d,
325    distance_transform_cityblock_2d,
326    // Distance transform functions
327    distance_transform_edt,
328    distance_transform_edt_2d,
329    distance_transform_edt_full,
330    euclidean_distance_transform,
331    euclidean_distance_transform_separable,
332    fill_holes_2d,
333    find_boundaries,
334    find_objects_2d,
335    generate_binary_structure,
336    geodesic_dilation_2d,
337    geodesic_erosion_2d,
338    granulometry_2d,
339    grey_closing,
340    grey_dilation,
341    grey_dilation_2d_optimized,
342    grey_erosion,
343    grey_erosion_2d_optimized,
344    grey_opening,
345    iterate_structure,
346    label,
347    label_2d,
348    morphological_gradient,
349    morphological_gradient_2d_fast,
350    morphological_laplace,
351    morphological_reconstruction_2d,
352    morphological_reconstruction_by_dilation,
353    morphological_reconstruction_by_erosion,
354    multi_scale_morphology_2d,
355    remove_small_holes,
356    remove_small_objects,
357    white_tophat,
358    white_tophat_2d_fast,
359    BoundingBox2D,
360    Connectivity,
361    DistanceMetric,
362    MorphBorderMode,
363    MorphOperation,
364    MultiScaleMorphConfig,
365    StructureType,
366};
367
368// Memory management exports
369pub use self::memory_management::{
370    check_memory_limit, create_output_array, estimate_memory_usage, BufferPool, InPlaceOp,
371    MemoryConfig, MemoryEfficientOp, MemoryStrategy,
372};
373
374// Chunked processing exports
375pub use self::chunked::{process_chunked, ChunkConfig, ChunkProcessor, GaussianChunkProcessor};
376
377// Backend exports
378pub use self::backend::{
379    auto_backend, Backend, BackendBuilder, BackendConfig, BackendExecutor, BackendOp,
380};
381
382// Threading exports
383pub use self::threading::{
384    configure_parallel_ops, get_thread_pool_config, init_thread_pool, update_thread_pool_config,
385    AdaptiveThreadPool, ThreadPoolConfig, ThreadPoolContext, WorkStealingQueue, WorkerInfo,
386};
387
388// Streaming exports
389pub use self::streaming::{
390    stream_process_file, StreamConfig, StreamProcessor, StreamableOp, StreamingGaussianFilter,
391};
392
393// Domain-specific imaging exports
394pub use self::domain_specific::{
395    medical::{
396        detect_lung_nodules, enhance_bone_structure, frangi_vesselness, Nodule,
397        VesselEnhancementParams,
398    },
399    microscopy::{
400        colocalization_analysis, detect_nuclei, segment_cells, CellInfo, CellSegmentationParams,
401        ColocalizationMetrics, ThresholdMethod,
402    },
403    satellite::{compute_ndvi, detect_clouds, detect_water_bodies, pan_sharpen, PanSharpenMethod},
404};
405
406// Analysis module exports
407pub use self::analysis::{
408    batch_quality_assessment, compute_local_variance, contrast_to_noise_ratio,
409    estimate_fractal_dimension, image_entropy, image_quality_assessment, image_sharpness,
410    local_feature_analysis, mean_absolute_error, mean_squared_error, multi_scale_analysis,
411    peak_signal_to_noise_ratio, signal_to_noise_ratio, structural_similarity_index,
412    texture_analysis, ImageQualityMetrics, MultiScaleConfig, TextureMetrics,
413};
414
415// SIMD-optimized analysis functions
416#[cfg(feature = "simd")]
417pub use self::analysis::{compute_moments_simd_f32, image_quality_assessment_simd_f32};
418
419// Parallel analysis functions
420#[cfg(feature = "parallel")]
421pub use self::analysis::image_entropy_parallel;
422
423// Visualization module exports
424pub use self::visualization::{
425    create_colormap, createimage_montage, generate_report, plot_contour, plot_heatmap,
426    plot_histogram, plot_profile, plot_statistical_comparison, plot_surface, visualize_gradient,
427    ColorMap, PlotConfig, ReportConfig, ReportFormat,
428};
429
430// SciPy performance comparison exports
431pub use self::scipy_performance_comparison::{
432    calculate_accuracy_metrics, validate_api_compatibility, AccuracyResult, BenchmarkConfig,
433    CompatibilityResult, PerformanceResult, SciPyBenchmarkSuite,
434};
435
436// API compatibility verification exports
437pub use self::api_compatibility_verification::{
438    ApiCompatibilityResult, ApiCompatibilityTester, CompatibilityConfig, ParameterTest,
439};
440
441// Comprehensive SciPy validation exports
442pub use self::comprehensive_scipy_validation::{
443    SciPyValidationSuite, ValidationConfig as SciPyValidationConfig, ValidationResult,
444};
445
446// Comprehensive examples exports
447pub use self::comprehensive_examples::{validate_all_examples, ExampleTutorial, TutorialStep};
448
449// Quantum-inspired processing exports
450pub use self::quantum_inspired::{
451    quantum_amplitude_amplification, quantum_annealing_segmentation,
452    quantum_entanglement_correlation, quantum_error_correction, quantum_fourier_enhancement,
453    quantum_machine_learning_classifier, quantum_superposition_filter,
454    quantum_tensor_network_processing, quantum_variational_enhancement,
455    quantum_walk_edge_detection, QuantumConfig, QuantumState,
456};
457
458// Neuromorphic computing exports
459pub use self::neuromorphic_computing::{
460    event_driven_processing, homeostatic_adaptive_filter, liquidstate_machine,
461    spiking_neural_network_filter, stdp_unsupervised_learning, temporal_coding_feature_extraction,
462    Event, NeuromorphicConfig, PlasticSynapse, SpikingNeuron,
463};
464
465// Advanced fusion core exports
466pub use self::advanced_fusion_algorithms::{
467    enhanced_meta_learning_with_temporal_fusion, enhanced_quantum_consciousness_evolution,
468    fusion_processing, quantum_aware_resource_scheduling_optimization, AdaptiveMemoryConsolidation,
469    AdvancedConfig, AdvancedState, CoherenceStrategy, ConsciousnessComplexity, ConsciousnessState,
470    EnhancedMetaLearningSystem, HierarchicalLearner, MetaLearningTracker,
471    QuantumAwareResourceScheduler, QuantumCoherenceOptimizer, QuantumConsciousnessEvolution,
472    ResourceSchedulingDecision, StrategyEvolution, TemporalMemoryFusion, WorkloadCharacteristics,
473};
474
475// Enhanced validation exports
476pub use self::comprehensive_validation::{
477    validated_advanced_processing, ComprehensiveSummary, ComprehensiveValidator,
478    PerformanceBenchmark, PerformanceSummary, ValidationConfig, ValidationError, ValidationReport,
479};
480
481// Utils exports
482pub use self::utils::{safe_f64_to_float, safe_float_to_f64, safe_usize_to_float};
483
484// Advanced watershed segmentation exports (v0.3.0)
485pub use self::watershed::{
486    auto_markers, compact_watershed, extract_dams, h_minima_transform, merge_small_regions,
487    CompactWatershedConfig, DamResult, OversegmentationConfig, WatershedNeighborhood,
488};
489
490// Region properties exports (v0.3.0)
491pub use self::regionprops::Connectivity as RegionConnectivity;
492pub use self::regionprops::{
493    filter_regions, label_components, region_properties as region_props_advanced, RegionFilter,
494    RegionProps,
495};
496
497// Advanced active contours exports (v0.3.0)
498pub use self::active_contours::{
499    contour_area, contour_energy, contour_perimeter, create_circular_contour,
500    create_elliptical_contour, create_rectangular_contour, evolve_snake, resample_contour,
501    SnakeParams, SnakeResult,
502};
503
504// Distance transforms exports (v0.3.0)
505pub use self::distance_transforms::{
506    chessboard_dt, cityblock_dt, euclidean_dt, geodesic_dt, nearest_background,
507    signed_distance_function,
508};
509
510// Additional modules (previously orphaned, now wired)
511pub mod co_occurrence;
512pub mod convolution3d;
513pub mod deep_features;
514pub mod documentation;
515pub mod feature_detection;
516pub mod filters3d;
517pub mod freq_filter;
518pub mod frequency_domain;
519pub mod moment_invariants;
520pub mod morphology3d;
521pub mod morphology_advanced;
522pub mod morphology_ext;
523pub mod optical_flow;
524pub mod out_of_core;
525pub mod quality;
526pub mod registration;
527pub mod segmentation_advanced;
528pub mod segmentation_ext;
529pub mod shape_analysis;
530pub mod skeletonize;
531pub mod slice_processing;
532pub mod template_matching;
533pub mod texture_segmentation;
534pub mod topology;
535pub mod volume_analysis;
536pub mod volumetric_ops;
537pub mod zero_copy;