pub mod detector;
pub mod descriptor;
pub mod matcher;
pub mod sift;
pub mod orb;
pub mod brief;
pub mod fast;
pub mod gpu;
pub mod geometric;
pub mod pipeline;
pub use detector::{
FeatureDetector, DetectorType, DetectorConfig, DetectorFactory,
SiftDetector, OrbDetector, FastDetector, SurfDetector, HarrisDetector,
};
pub use fast::{FastDetector as AdvancedFastDetector, FastConfig};
pub use descriptor::{
DescriptorExtractor, DescriptorType, ExtractorType, ExtractorConfig, ExtractorFactory,
SiftExtractor, OrbExtractor, BriskExtractor,
};
pub use brief::BriefExtractor;
pub use gpu::{
GpuBackend, GpuDevice, GpuConfig, GpuFeatureDetector, GpuDescriptorExtractor,
GpuManager, GpuSiftDetector, GpuMemoryManager,
};
pub use matcher::{
FeatureMatcher, FeatureMatch, MatcherType, DistanceType, MatcherConfig, MatcherFactory,
BruteForceMatcher, FlannMatcher, RatioTestMatcher, CrossCheckMatcher,
};
pub use pipeline::{
FeaturePipeline, PipelineConfig, PipelineBuilder,
ExtractionResult, MatchingResult,
};
pub use geometric::{
GeometricVerifier, GeometricConfig, GeometricResult, GeometricModel,
};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct FeatureConfig {
pub detector_type: DetectorType,
pub max_features: usize,
pub quality_threshold: f32,
pub min_distance: f32,
}
impl Default for FeatureConfig {
fn default() -> Self {
Self {
detector_type: DetectorType::Sift,
max_features: 8000,
quality_threshold: 0.01,
min_distance: 3.0,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct MatchConfig {
pub max_distance: f32,
pub ratio_threshold: f32,
pub cross_check: bool,
pub max_matches: usize,
}
impl Default for MatchConfig {
fn default() -> Self {
Self {
max_distance: 0.7,
ratio_threshold: 0.8,
cross_check: true,
max_matches: 1000,
}
}
}