use crate::core::Pix;
use crate::recog::{RecogError, RecogResult};
use super::dewarpa::Dewarpa;
use super::types::{Dewarp, DewarpOptions};
pub fn dewarp_single_page_init(pix: &Pix) -> RecogResult<Dewarpa> {
let opts = DewarpOptions::default();
let mut da = Dewarpa::new(1, opts.sampling, opts.reduction_factor, opts.min_lines, 5);
let mut dw = Dewarp::new(pix.width(), pix.height(), 0, &opts);
dw.build_page_model(pix)?;
da.insert(dw)
.map_err(|e| RecogError::InvalidParameter(format!("failed to insert page model: {e}")))?;
Ok(da)
}
pub fn dewarp_single_page_run(dewarpa: &Dewarpa, pix: &Pix) -> RecogResult<Pix> {
dewarpa.apply_disparity(0, pix, 0, 0)
}
#[cfg(test)]
mod tests {
use super::*;
use crate::core::PixelDepth;
#[test]
fn test_dewarp_single_page_init_empty_image() {
let pix = Pix::new(100, 100, PixelDepth::Bit1).unwrap();
let result = dewarp_single_page_init(&pix);
assert!(result.is_err());
}
#[test]
fn test_dewarp_single_page_run_no_model() {
let da = Dewarpa::new(1, 30, 1, 15, 5);
let pix = Pix::new(100, 100, PixelDepth::Bit1).unwrap();
let result = dewarp_single_page_run(&da, &pix);
assert!(result.is_err());
}
}