scirs2_ndimage/
lib.rs

1#![allow(deprecated)]
2#![allow(clippy::new_without_default)]
3#![allow(clippy::excessive_precision)]
4#![allow(clippy::manual_clamp)]
5#![allow(clippy::needless_range_loop)]
6#![allow(clippy::assign_op_pattern)]
7#![allow(clippy::manual_div_ceil)]
8#![allow(clippy::manual_is_multiple_of)]
9#![allow(clippy::clone_on_copy)]
10#![allow(clippy::type_complexity)]
11#![allow(clippy::needless_question_mark)]
12#![allow(clippy::inconsistent_digit_grouping)]
13#![allow(clippy::unnecessary_cast)]
14#![allow(clippy::doc_overindented_list_items)]
15#![allow(clippy::needless_borrow)]
16#![allow(clippy::manual_slice_size_calculation)]
17#![allow(clippy::unwrap_or_default)]
18#![allow(clippy::single_char_add_str)]
19#![allow(clippy::map_flatten)]
20#![allow(clippy::collapsible_if)]
21#![allow(clippy::useless_vec)]
22#![allow(clippy::should_implement_trait)]
23#![allow(clippy::option_as_ref_deref)]
24#![allow(clippy::derivable_impls)]
25#![allow(clippy::unnecessary_lazy_evaluations)]
26#![allow(clippy::ptr_arg)]
27#![allow(clippy::nonminimal_bool)]
28#![allow(clippy::needless_return)]
29#![allow(clippy::let_and_return)]
30#![allow(clippy::if_same_then_else)]
31#![allow(clippy::collapsible_else_if)]
32#![allow(clippy::bool_comparison)]
33#![allow(clippy::vec_init_then_push)]
34#![allow(clippy::useless_format)]
35#![allow(clippy::unnecessary_map_or)]
36#![allow(clippy::redundant_closure)]
37#![allow(clippy::map_entry)]
38#![allow(clippy::map_clone)]
39#![allow(clippy::manual_range_contains)]
40#![allow(clippy::manual_map)]
41#![allow(clippy::manual_dangling_ptr)]
42#![allow(clippy::manual_contains)]
43#![allow(clippy::manual_c_str_literals)]
44#![allow(clippy::implicit_saturating_sub)]
45#![allow(clippy::format_in_format_args)]
46#![allow(clippy::for_kv_map)]
47#![allow(clippy::extra_unused_type_parameters)]
48#![allow(clippy::explicit_counter_loop)]
49#![allow(clippy::explicit_auto_deref)]
50#![allow(clippy::empty_line_after_outer_attr)]
51#![allow(clippy::empty_line_after_doc_comments)]
52#![allow(clippy::doc_lazy_continuation)]
53#![allow(unreachable_code)]
54#![allow(unused_mut)]
55#![allow(missing_docs)]
56#![allow(for_loops_over_fallibles)]
57#![allow(unused_parens)]
58#![allow(unexpected_cfgs)]
59#![allow(unused_attributes)]
60#![allow(dead_code)]
61//! # SciRS2 NDImage - N-Dimensional Image Processing
62//!
63//! **scirs2-ndimage** provides comprehensive N-dimensional image processing modeled after SciPy's
64//! `ndimage` module, offering filtering, morphology, interpolation, measurements, segmentation,
65//! and feature detection with GPU acceleration and chunked processing for large images.
66//!
67//! ## 🎯 Key Features
68//!
69//! - **SciPy Compatibility**: Drop-in replacement for `scipy.ndimage` functions
70//! - **Comprehensive Filters**: Gaussian, median, Sobel, bilateral, anisotropic diffusion
71//! - **Morphological Operations**: Erosion, dilation, opening, closing, skeletonization
72//! - **Image Measurements**: Center of mass, moments, label statistics
73//! - **Segmentation**: Watershed, region growing, active contours
74//! - **Feature Detection**: Edge detection (Canny, Sobel), corner detection (Harris)
75//! - **GPU Acceleration**: CUDA/ROCm for large-scale image processing
76//! - **Memory Efficient**: Chunked processing for images larger than RAM
77//!
78//! ## 📦 Module Overview
79//!
80//! | SciRS2 Module | SciPy Equivalent | Description |
81//! |---------------|------------------|-------------|
82//! | `filters` | `scipy.ndimage.filters` | Convolution, Gaussian, median filters |
83//! | `morphology` | `scipy.ndimage.morphology` | Erosion, dilation, binary operations |
84//! | `interpolation` | `scipy.ndimage.interpolation` | Rotation, zoom, shift, affine transforms |
85//! | `measurements` | `scipy.ndimage.measurements` | Label, center of mass, histograms |
86//! | `segmentation` | - | Watershed, region growing, active contours |
87//! | `features` | - | Edge detection, corner detection, keypoints |
88//!
89//! ## 🚀 Quick Start
90//!
91//! ```toml
92//! [dependencies]
93//! scirs2-ndimage = "0.1.0-rc.2"
94//! ```
95//!
96//! ```rust,no_run
97//! use scirs2_ndimage::filters;
98//! use scirs2_core::ndarray::Array2;
99//!
100//! // Gaussian filter
101//! let image = Array2::<f64>::zeros((256, 256));
102//! let filtered = filters::gaussian_filter(&image, 2.0, None, None).unwrap();
103//! ```
104//!
105//! ## 🔒 Version: 0.1.0-rc.2 (October 03, 2025)
106
107// Public modules
108pub mod adaptive_image_optimizer;
109pub mod advanced_fusion_algorithms;
110pub mod advanced_streaming_ai;
111pub mod ai_driven_adaptive_processing;
112pub mod analysis;
113pub mod api_compatibility_verification;
114pub mod backend;
115pub mod biological_vision_inspired;
116pub mod chunked;
117pub mod chunked_v2;
118pub mod comprehensive_examples;
119pub mod comprehensive_scipy_benchmarks;
120pub mod comprehensive_scipy_validation;
121pub mod comprehensive_validation;
122pub mod domain_specific;
123pub mod error;
124pub mod features;
125pub mod filters;
126pub mod gpu_operations;
127pub mod hyperdimensional_computing;
128pub mod interpolation;
129pub mod measurements;
130pub mod memory_management;
131pub mod meta_learning_algorithms;
132pub mod mmap_io;
133pub mod morphology;
134pub mod neuromorphic_computing;
135pub mod performance_profiler;
136pub mod profiling;
137pub mod python_interop;
138pub mod quantum_ai_consciousness;
139pub mod quantum_enhanced_gpu;
140pub mod quantum_inspired;
141pub mod quantum_neuromorphic_fusion;
142pub mod scipy_compat;
143pub mod scipy_compat_layer;
144pub mod scipy_migration_layer;
145pub mod scipy_performance_comparison;
146#[cfg(test)]
147mod scipy_validation_tests;
148pub mod segmentation;
149pub mod streaming;
150pub mod threading;
151pub mod utils;
152pub mod visualization;
153
154// Re-exports
155pub use self::error::*;
156
157// Feature detection module exports
158pub use self::features::{
159    canny,
160    edge_detector,
161    edge_detector_simple,
162    fast_corners,
163    gradient_edges,
164    harris_corners,
165    laplacian_edges,
166    sobel_edges,
167    BatchNormParams,
168    EdgeDetectionAlgorithm,
169    EdgeDetectionConfig,
170    FeatureDetectorWeights,
171    GradientMethod,
172    // Machine learning-based detection
173    LearnedEdgeDetector,
174    LearnedKeypointDescriptor,
175    MLDetectorConfig,
176    ObjectProposal,
177    ObjectProposalGenerator,
178    SemanticFeatureExtractor,
179};
180
181// Filters module exports
182pub use self::filters::{
183    // Advanced filters
184    adaptive_bilateral_filter,
185    adaptive_wiener_filter,
186    anisotropic_diffusion,
187    bilateral_filter,
188    bilateral_gradient_filter,
189    coherence_enhancing_diffusion,
190    convolve,
191    // Wavelets
192    dwt_1d,
193    dwt_2d,
194    filter_functions,
195    gabor_filter,
196    gabor_filter_bank,
197    gaussian_filter,
198    gaussian_filter_chunked,
199    gaussian_filter_f32,
200    gaussian_filter_f64,
201    generic_filter,
202    idwt_1d,
203    idwt_2d,
204    laplace,
205    log_gabor_filter,
206    maximum_filter,
207    median_filter,
208    median_filter_chunked,
209    minimum_filter,
210    multi_scale_bilateral_filter,
211    non_local_means,
212    percentile_filter,
213    rank_filter,
214    shock_filter,
215    sobel,
216    steerable_filter,
217    uniform_filter,
218    uniform_filter_chunked,
219    wavelet_decompose,
220    wavelet_denoise,
221    wavelet_reconstruct,
222    BorderMode,
223    GaborParams,
224    MultiScaleBilateralConfig,
225    WaveletFamily,
226    WaveletFilter,
227};
228
229#[cfg(feature = "simd")]
230pub use self::filters::{bilateral_filter_simd_f32, bilateral_filter_simd_f64};
231
232// Segmentation module exports
233pub use self::segmentation::{
234    active_contour,
235    adaptive_threshold,
236    chan_vese,
237    chan_vese_multiphase,
238    checkerboard_level_set,
239    create_circle_contour,
240    create_ellipse_contour,
241    // Advanced segmentation algorithms
242    graph_cuts,
243    marker_watershed,
244    mask_to_contour,
245    mask_to_level_set,
246    otsu_threshold,
247    smooth_contour,
248    threshold_binary,
249    watershed,
250    ActiveContourParams,
251    AdaptiveMethod,
252    ChanVeseParams,
253    GraphCutsParams,
254    InteractiveGraphCuts,
255};
256
257// Interpolation module exports
258pub use self::interpolation::{
259    affine_transform, bspline, geometric_transform, map_coordinates, rotate, shift, spline_filter,
260    spline_filter1d, value_at_coordinates, zoom, BoundaryMode, InterpolationOrder,
261};
262
263// Measurements module exports
264pub use self::measurements::{
265    center_of_mass, count_labels, extrema, find_objects, local_extrema, mean_labels, moments,
266    moments_inertia_tensor, peak_prominences, peak_widths, region_properties, sum_labels,
267    variance_labels, RegionProperties,
268};
269
270// Morphology module exports
271pub use self::morphology::{
272    binary_closing,
273    binary_dilation,
274    binary_erosion,
275    binary_fill_holes,
276    binary_hit_or_miss,
277    binary_opening,
278    black_tophat,
279    box_structure,
280    disk_structure,
281    distance_transform_bf,
282    distance_transform_cdt,
283    // Distance transform functions
284    distance_transform_edt,
285    find_boundaries,
286    generate_binary_structure,
287    geodesic_dilation_2d,
288    geodesic_erosion_2d,
289    granulometry_2d,
290    grey_closing,
291    grey_dilation,
292    grey_erosion,
293    grey_opening,
294    iterate_structure,
295    label,
296    morphological_gradient,
297    morphological_laplace,
298    morphological_reconstruction_2d,
299    multi_scale_morphology_2d,
300    remove_small_holes,
301    remove_small_objects,
302    white_tophat,
303    Connectivity,
304    DistanceMetric,
305    MorphBorderMode,
306    MorphOperation,
307    MultiScaleMorphConfig,
308    StructureType,
309};
310
311// Memory management exports
312pub use self::memory_management::{
313    check_memory_limit, create_output_array, estimate_memory_usage, BufferPool, InPlaceOp,
314    MemoryConfig, MemoryEfficientOp, MemoryStrategy,
315};
316
317// Chunked processing exports
318pub use self::chunked::{process_chunked, ChunkConfig, ChunkProcessor, GaussianChunkProcessor};
319
320// Backend exports
321pub use self::backend::{
322    auto_backend, Backend, BackendBuilder, BackendConfig, BackendExecutor, BackendOp,
323};
324
325// Threading exports
326pub use self::threading::{
327    configure_parallel_ops, get_thread_pool_config, init_thread_pool, update_thread_pool_config,
328    AdaptiveThreadPool, ThreadPoolConfig, ThreadPoolContext, WorkStealingQueue, WorkerInfo,
329};
330
331// Streaming exports
332pub use self::streaming::{
333    stream_process_file, StreamConfig, StreamProcessor, StreamableOp, StreamingGaussianFilter,
334};
335
336// Domain-specific imaging exports
337pub use self::domain_specific::{
338    medical::{
339        detect_lung_nodules, enhance_bone_structure, frangi_vesselness, Nodule,
340        VesselEnhancementParams,
341    },
342    microscopy::{
343        colocalization_analysis, detect_nuclei, segment_cells, CellInfo, CellSegmentationParams,
344        ColocalizationMetrics, ThresholdMethod,
345    },
346    satellite::{compute_ndvi, detect_clouds, detect_water_bodies, pan_sharpen, PanSharpenMethod},
347};
348
349// Analysis module exports
350pub use self::analysis::{
351    batch_quality_assessment, compute_local_variance, contrast_to_noise_ratio,
352    estimate_fractal_dimension, image_entropy, image_quality_assessment, image_sharpness,
353    local_feature_analysis, mean_absolute_error, mean_squared_error, multi_scale_analysis,
354    peak_signal_to_noise_ratio, signal_to_noise_ratio, structural_similarity_index,
355    texture_analysis, ImageQualityMetrics, MultiScaleConfig, TextureMetrics,
356};
357
358// SIMD-optimized analysis functions
359#[cfg(feature = "simd")]
360pub use self::analysis::{compute_moments_simd_f32, image_quality_assessment_simd_f32};
361
362// Parallel analysis functions
363#[cfg(feature = "parallel")]
364pub use self::analysis::image_entropy_parallel;
365
366// Visualization module exports
367pub use self::visualization::{
368    create_colormap, createimage_montage, generate_report, plot_contour, plot_heatmap,
369    plot_histogram, plot_profile, plot_statistical_comparison, plot_surface, visualize_gradient,
370    ColorMap, PlotConfig, ReportConfig, ReportFormat,
371};
372
373// SciPy performance comparison exports
374pub use self::scipy_performance_comparison::{
375    calculate_accuracy_metrics, validate_api_compatibility, AccuracyResult, BenchmarkConfig,
376    CompatibilityResult, PerformanceResult, SciPyBenchmarkSuite,
377};
378
379// API compatibility verification exports
380pub use self::api_compatibility_verification::{
381    ApiCompatibilityResult, ApiCompatibilityTester, CompatibilityConfig, ParameterTest,
382};
383
384// Comprehensive SciPy validation exports
385pub use self::comprehensive_scipy_validation::{
386    SciPyValidationSuite, ValidationConfig as SciPyValidationConfig, ValidationResult,
387};
388
389// Comprehensive examples exports
390pub use self::comprehensive_examples::{validate_all_examples, ExampleTutorial, TutorialStep};
391
392// Quantum-inspired processing exports
393pub use self::quantum_inspired::{
394    quantum_amplitude_amplification, quantum_annealing_segmentation,
395    quantum_entanglement_correlation, quantum_error_correction, quantum_fourier_enhancement,
396    quantum_machine_learning_classifier, quantum_superposition_filter,
397    quantum_tensor_network_processing, quantum_variational_enhancement,
398    quantum_walk_edge_detection, QuantumConfig, QuantumState,
399};
400
401// Neuromorphic computing exports
402pub use self::neuromorphic_computing::{
403    event_driven_processing, homeostatic_adaptive_filter, liquidstate_machine,
404    spiking_neural_network_filter, stdp_unsupervised_learning, temporal_coding_feature_extraction,
405    Event, NeuromorphicConfig, PlasticSynapse, SpikingNeuron,
406};
407
408// Advanced fusion core exports
409pub use self::advanced_fusion_algorithms::{
410    enhanced_meta_learning_with_temporal_fusion, enhanced_quantum_consciousness_evolution,
411    fusion_processing, quantum_aware_resource_scheduling_optimization, AdaptiveMemoryConsolidation,
412    AdvancedConfig, AdvancedState, CoherenceStrategy, ConsciousnessComplexity, ConsciousnessState,
413    EnhancedMetaLearningSystem, HierarchicalLearner, MetaLearningTracker,
414    QuantumAwareResourceScheduler, QuantumCoherenceOptimizer, QuantumConsciousnessEvolution,
415    ResourceSchedulingDecision, StrategyEvolution, TemporalMemoryFusion, WorkloadCharacteristics,
416};
417
418// Enhanced validation exports
419pub use self::comprehensive_validation::{
420    validated_advanced_processing, ComprehensiveValidator, PerformanceBenchmark,
421    PerformanceSummary, ValidationConfig, ValidationError, ValidationReport,
422};
423
424// Utils exports
425pub use self::utils::{safe_f64_to_float, safe_float_to_f64, safe_usize_to_float};