From 94a3e447cc4cfd09b697108919df8fbc3d737bdc Mon Sep 17 00:00:00 2001 From: "James R. Barlow" Date: Sat, 12 Mar 2016 00:09:20 -0800 Subject: [PATCH] Add otsu threshold to leptonica --- ocrmypdf/leptonica.py | 19 +++++++++++++++++++ ocrmypdf/lib/compile_leptonica.py | 10 ++++++++++ 2 files changed, 29 insertions(+) diff --git a/ocrmypdf/leptonica.py b/ocrmypdf/leptonica.py index 17eeca00..83c697dd 100644 --- a/ocrmypdf/leptonica.py +++ b/ocrmypdf/leptonica.py @@ -195,6 +195,25 @@ class Pix: else: return (None, None) + def otsu_adaptive_threshold( + self, tile_size=(300, 300), kernel_size=(4, 4), scorefract=0.1): + with LeptonicaErrorTrap(): + sx, sy = tile_size + smoothx, smoothy = kernel_size + p_cpix = ffi.new('PIX **') + + result = lept.pixOtsuAdaptiveThreshold( + self.cpix, + sx, sy, + smoothx, smoothy, + scorefract, + ffi.NULL, + p_cpix) + if result == 0: + return Pix(p_cpix[0]) + else: + return None + @staticmethod @lru_cache(maxsize=1) def make_pixel_sum_tab8(): diff --git a/ocrmypdf/lib/compile_leptonica.py b/ocrmypdf/lib/compile_leptonica.py index e15ce513..6c013389 100644 --- a/ocrmypdf/lib/compile_leptonica.py +++ b/ocrmypdf/lib/compile_leptonica.py @@ -62,6 +62,16 @@ l_int32 * makePixelSumTab8 ( void ); PIX * pixDeserializeFromMemory ( const l_uint32 *data, size_t nbytes ); l_int32 pixSerializeToMemory ( PIX *pixs, l_uint32 **pdata, size_t *pnbytes ); +l_int32 +pixOtsuAdaptiveThreshold(PIX *pixs, + l_int32 sx, + l_int32 sy, + l_int32 smoothx, + l_int32 smoothy, + l_float32 scorefract, + PIX **ppixth, + PIX **ppixd); + void lept_free(void *ptr); """)