Commit graph

2 commits

Author SHA1 Message Date
jedarden
ff82fdce90 feat(pdftract-5xyjv): implement 3x3 median-filter denoising for OCR preprocessing
- Add median_denoise() function using imageproc::filter::median_filter
- 3x3 kernel (radius 1,1) removes salt-and-pepper noise while preserving edges
- Comprehensive tests: noise removal, edge preservation, binary output
- Export median_denoise from ocr::preprocessing module

Closes: pdftract-5xyjv
2026-05-24 16:09:08 -04:00
jedarden
61b94b49d2 feat(pdftract-6dki1): implement histogram stretch contrast normalization
Implement Phase 5.3.2a: histogram-based contrast normalization for OCR
preprocessing. The algorithm stretches the input gray value range (from
1st to 99th percentile) to the full [0, 255] output range, improving
downstream binarization effectiveness.

Key implementation details:
- 256-bin histogram computation for percentile calculation
- 1st/99th percentile robustness against hot pixels and artifacts
- In-place mutation for performance (no double allocation)
- Proper error handling for uniform images and invalid dimensions
- Overflow-safe arithmetic using i32 intermediate values

Acceptance criteria:
- Image with [50, 200] range → stretched to [0, 255]
- Hot pixel robustness: single 0/255 pixels handled correctly
- Uniform image → early return with UniformImage error
- Invalid dimensions (zero width/height) → InvalidDimensions error
- Full performance: < 50 ms for 8 MP images

Closes: pdftract-6dki1
2026-05-24 10:30:20 -04:00