tesseract_bin 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +23 -0
- data/LICENSE.txt +20 -0
- data/README.rdoc +19 -0
- data/Rakefile +46 -0
- data/VERSION +1 -0
- data/ext/tesseract_bin/extconf.rb +17 -0
- data/lib/tesseract_bin.rb +12 -0
- data/tesseract_bin.gemspec +660 -0
- data/test/helper.rb +18 -0
- data/test/test_tesseract_bin.rb +7 -0
- data/vendor/tesseract-2.04/AUTHORS +8 -0
- data/vendor/tesseract-2.04/COPYING +23 -0
- data/vendor/tesseract-2.04/ChangeLog +71 -0
- data/vendor/tesseract-2.04/INSTALL +229 -0
- data/vendor/tesseract-2.04/Makefile.am +20 -0
- data/vendor/tesseract-2.04/Makefile.in +641 -0
- data/vendor/tesseract-2.04/NEWS +1 -0
- data/vendor/tesseract-2.04/README +138 -0
- data/vendor/tesseract-2.04/ReleaseNotes +213 -0
- data/vendor/tesseract-2.04/StdAfx.cpp +8 -0
- data/vendor/tesseract-2.04/StdAfx.h +24 -0
- data/vendor/tesseract-2.04/ccmain/Makefile.am +63 -0
- data/vendor/tesseract-2.04/ccmain/Makefile.in +735 -0
- data/vendor/tesseract-2.04/ccmain/adaptions.cpp +1082 -0
- data/vendor/tesseract-2.04/ccmain/adaptions.h +109 -0
- data/vendor/tesseract-2.04/ccmain/applybox.cpp +891 -0
- data/vendor/tesseract-2.04/ccmain/applybox.h +73 -0
- data/vendor/tesseract-2.04/ccmain/baseapi.cpp +1105 -0
- data/vendor/tesseract-2.04/ccmain/baseapi.h +256 -0
- data/vendor/tesseract-2.04/ccmain/blobcmp.cpp +76 -0
- data/vendor/tesseract-2.04/ccmain/blobcmp.h +29 -0
- data/vendor/tesseract-2.04/ccmain/callnet.cpp +93 -0
- data/vendor/tesseract-2.04/ccmain/callnet.h +32 -0
- data/vendor/tesseract-2.04/ccmain/charcut.cpp +704 -0
- data/vendor/tesseract-2.04/ccmain/charcut.h +120 -0
- data/vendor/tesseract-2.04/ccmain/charsample.cpp +699 -0
- data/vendor/tesseract-2.04/ccmain/control.cpp +1842 -0
- data/vendor/tesseract-2.04/ccmain/control.h +198 -0
- data/vendor/tesseract-2.04/ccmain/docqual.cpp +1481 -0
- data/vendor/tesseract-2.04/ccmain/docqual.h +155 -0
- data/vendor/tesseract-2.04/ccmain/expandblob.cpp +82 -0
- data/vendor/tesseract-2.04/ccmain/expandblob.h +13 -0
- data/vendor/tesseract-2.04/ccmain/fixspace.cpp +989 -0
- data/vendor/tesseract-2.04/ccmain/fixspace.h +72 -0
- data/vendor/tesseract-2.04/ccmain/fixxht.cpp +825 -0
- data/vendor/tesseract-2.04/ccmain/fixxht.h +93 -0
- data/vendor/tesseract-2.04/ccmain/imgscale.cpp +154 -0
- data/vendor/tesseract-2.04/ccmain/imgscale.h +32 -0
- data/vendor/tesseract-2.04/ccmain/matmatch.cpp +391 -0
- data/vendor/tesseract-2.04/ccmain/matmatch.h +48 -0
- data/vendor/tesseract-2.04/ccmain/output.cpp +1273 -0
- data/vendor/tesseract-2.04/ccmain/output.h +116 -0
- data/vendor/tesseract-2.04/ccmain/pagewalk.cpp +666 -0
- data/vendor/tesseract-2.04/ccmain/pagewalk.h +155 -0
- data/vendor/tesseract-2.04/ccmain/paircmp.cpp +107 -0
- data/vendor/tesseract-2.04/ccmain/paircmp.h +43 -0
- data/vendor/tesseract-2.04/ccmain/pgedit.cpp +1867 -0
- data/vendor/tesseract-2.04/ccmain/pgedit.h +181 -0
- data/vendor/tesseract-2.04/ccmain/reject.cpp +1775 -0
- data/vendor/tesseract-2.04/ccmain/reject.h +181 -0
- data/vendor/tesseract-2.04/ccmain/scaleimg.cpp +366 -0
- data/vendor/tesseract-2.04/ccmain/scaleimg.h +35 -0
- data/vendor/tesseract-2.04/ccmain/tessbox.cpp +375 -0
- data/vendor/tesseract-2.04/ccmain/tessbox.h +110 -0
- data/vendor/tesseract-2.04/ccmain/tessedit.cpp +278 -0
- data/vendor/tesseract-2.04/ccmain/tessedit.h +49 -0
- data/vendor/tesseract-2.04/ccmain/tessembedded.cpp +110 -0
- data/vendor/tesseract-2.04/ccmain/tessembedded.h +38 -0
- data/vendor/tesseract-2.04/ccmain/tesseractfull.cc +37 -0
- data/vendor/tesseract-2.04/ccmain/tesseractmain.cpp +387 -0
- data/vendor/tesseract-2.04/ccmain/tesseractmain.h +58 -0
- data/vendor/tesseract-2.04/ccmain/tessio.h +110 -0
- data/vendor/tesseract-2.04/ccmain/tessvars.cpp +38 -0
- data/vendor/tesseract-2.04/ccmain/tessvars.h +48 -0
- data/vendor/tesseract-2.04/ccmain/tfacep.h +62 -0
- data/vendor/tesseract-2.04/ccmain/tfacepp.cpp +443 -0
- data/vendor/tesseract-2.04/ccmain/tfacepp.h +85 -0
- data/vendor/tesseract-2.04/ccmain/tstruct.cpp +549 -0
- data/vendor/tesseract-2.04/ccmain/tstruct.h +108 -0
- data/vendor/tesseract-2.04/ccmain/varabled.cpp +346 -0
- data/vendor/tesseract-2.04/ccmain/varabled.h +125 -0
- data/vendor/tesseract-2.04/ccmain/werdit.cpp +193 -0
- data/vendor/tesseract-2.04/ccmain/werdit.h +67 -0
- data/vendor/tesseract-2.04/ccstruct/Makefile.am +25 -0
- data/vendor/tesseract-2.04/ccstruct/Makefile.in +650 -0
- data/vendor/tesseract-2.04/ccstruct/blckerr.h +29 -0
- data/vendor/tesseract-2.04/ccstruct/blobbox.cpp +778 -0
- data/vendor/tesseract-2.04/ccstruct/blobbox.h +381 -0
- data/vendor/tesseract-2.04/ccstruct/blobs.cpp +247 -0
- data/vendor/tesseract-2.04/ccstruct/blobs.h +119 -0
- data/vendor/tesseract-2.04/ccstruct/blread.cpp +537 -0
- data/vendor/tesseract-2.04/ccstruct/blread.h +63 -0
- data/vendor/tesseract-2.04/ccstruct/callcpp.cpp +252 -0
- data/vendor/tesseract-2.04/ccstruct/coutln.cpp +650 -0
- data/vendor/tesseract-2.04/ccstruct/coutln.h +186 -0
- data/vendor/tesseract-2.04/ccstruct/crakedge.h +39 -0
- data/vendor/tesseract-2.04/ccstruct/genblob.cpp +133 -0
- data/vendor/tesseract-2.04/ccstruct/genblob.h +52 -0
- data/vendor/tesseract-2.04/ccstruct/hpddef.h +39 -0
- data/vendor/tesseract-2.04/ccstruct/hpdsizes.h +8 -0
- data/vendor/tesseract-2.04/ccstruct/ipoints.h +479 -0
- data/vendor/tesseract-2.04/ccstruct/labls.cpp +188 -0
- data/vendor/tesseract-2.04/ccstruct/labls.h +38 -0
- data/vendor/tesseract-2.04/ccstruct/linlsq.cpp +249 -0
- data/vendor/tesseract-2.04/ccstruct/linlsq.h +102 -0
- data/vendor/tesseract-2.04/ccstruct/lmedsq.cpp +453 -0
- data/vendor/tesseract-2.04/ccstruct/lmedsq.h +84 -0
- data/vendor/tesseract-2.04/ccstruct/mod128.cpp +100 -0
- data/vendor/tesseract-2.04/ccstruct/mod128.h +85 -0
- data/vendor/tesseract-2.04/ccstruct/normalis.cpp +176 -0
- data/vendor/tesseract-2.04/ccstruct/normalis.h +108 -0
- data/vendor/tesseract-2.04/ccstruct/ocrblock.cpp +369 -0
- data/vendor/tesseract-2.04/ccstruct/ocrblock.h +235 -0
- data/vendor/tesseract-2.04/ccstruct/ocrrow.cpp +216 -0
- data/vendor/tesseract-2.04/ccstruct/ocrrow.h +133 -0
- data/vendor/tesseract-2.04/ccstruct/pageblk.cpp +879 -0
- data/vendor/tesseract-2.04/ccstruct/pageblk.h +318 -0
- data/vendor/tesseract-2.04/ccstruct/pageres.cpp +330 -0
- data/vendor/tesseract-2.04/ccstruct/pageres.h +313 -0
- data/vendor/tesseract-2.04/ccstruct/pdblock.cpp +361 -0
- data/vendor/tesseract-2.04/ccstruct/pdblock.h +181 -0
- data/vendor/tesseract-2.04/ccstruct/pdclass.h +54 -0
- data/vendor/tesseract-2.04/ccstruct/points.cpp +102 -0
- data/vendor/tesseract-2.04/ccstruct/points.h +299 -0
- data/vendor/tesseract-2.04/ccstruct/polyaprx.cpp +588 -0
- data/vendor/tesseract-2.04/ccstruct/polyaprx.h +51 -0
- data/vendor/tesseract-2.04/ccstruct/polyblk.cpp +398 -0
- data/vendor/tesseract-2.04/ccstruct/polyblk.h +122 -0
- data/vendor/tesseract-2.04/ccstruct/polyblob.cpp +357 -0
- data/vendor/tesseract-2.04/ccstruct/polyblob.h +102 -0
- data/vendor/tesseract-2.04/ccstruct/polyvert.cpp +23 -0
- data/vendor/tesseract-2.04/ccstruct/polyvert.h +58 -0
- data/vendor/tesseract-2.04/ccstruct/poutline.cpp +441 -0
- data/vendor/tesseract-2.04/ccstruct/poutline.h +125 -0
- data/vendor/tesseract-2.04/ccstruct/quadlsq.cpp +147 -0
- data/vendor/tesseract-2.04/ccstruct/quadlsq.h +67 -0
- data/vendor/tesseract-2.04/ccstruct/quadratc.cpp +21 -0
- data/vendor/tesseract-2.04/ccstruct/quadratc.h +63 -0
- data/vendor/tesseract-2.04/ccstruct/quspline.cpp +382 -0
- data/vendor/tesseract-2.04/ccstruct/quspline.h +113 -0
- data/vendor/tesseract-2.04/ccstruct/ratngs.cpp +372 -0
- data/vendor/tesseract-2.04/ccstruct/ratngs.h +198 -0
- data/vendor/tesseract-2.04/ccstruct/rect.cpp +229 -0
- data/vendor/tesseract-2.04/ccstruct/rect.h +320 -0
- data/vendor/tesseract-2.04/ccstruct/rejctmap.cpp +545 -0
- data/vendor/tesseract-2.04/ccstruct/rejctmap.h +284 -0
- data/vendor/tesseract-2.04/ccstruct/rwpoly.cpp +89 -0
- data/vendor/tesseract-2.04/ccstruct/rwpoly.h +45 -0
- data/vendor/tesseract-2.04/ccstruct/statistc.cpp +905 -0
- data/vendor/tesseract-2.04/ccstruct/statistc.h +135 -0
- data/vendor/tesseract-2.04/ccstruct/stepblob.cpp +296 -0
- data/vendor/tesseract-2.04/ccstruct/stepblob.h +88 -0
- data/vendor/tesseract-2.04/ccstruct/txtregn.cpp +230 -0
- data/vendor/tesseract-2.04/ccstruct/txtregn.h +155 -0
- data/vendor/tesseract-2.04/ccstruct/vecfuncs.cpp +63 -0
- data/vendor/tesseract-2.04/ccstruct/vecfuncs.h +91 -0
- data/vendor/tesseract-2.04/ccstruct/werd.cpp +967 -0
- data/vendor/tesseract-2.04/ccstruct/werd.h +277 -0
- data/vendor/tesseract-2.04/ccutil/Makefile.am +19 -0
- data/vendor/tesseract-2.04/ccutil/Makefile.in +626 -0
- data/vendor/tesseract-2.04/ccutil/basedir.cpp +118 -0
- data/vendor/tesseract-2.04/ccutil/basedir.h +32 -0
- data/vendor/tesseract-2.04/ccutil/bits16.cpp +30 -0
- data/vendor/tesseract-2.04/ccutil/bits16.h +61 -0
- data/vendor/tesseract-2.04/ccutil/boxread.cpp +105 -0
- data/vendor/tesseract-2.04/ccutil/boxread.h +44 -0
- data/vendor/tesseract-2.04/ccutil/clst.cpp +626 -0
- data/vendor/tesseract-2.04/ccutil/clst.h +1085 -0
- data/vendor/tesseract-2.04/ccutil/debugwin.cpp +500 -0
- data/vendor/tesseract-2.04/ccutil/debugwin.h +103 -0
- data/vendor/tesseract-2.04/ccutil/elst.cpp +593 -0
- data/vendor/tesseract-2.04/ccutil/elst.h +1125 -0
- data/vendor/tesseract-2.04/ccutil/elst2.cpp +606 -0
- data/vendor/tesseract-2.04/ccutil/elst2.h +1121 -0
- data/vendor/tesseract-2.04/ccutil/errcode.cpp +104 -0
- data/vendor/tesseract-2.04/ccutil/errcode.h +104 -0
- data/vendor/tesseract-2.04/ccutil/fileerr.h +34 -0
- data/vendor/tesseract-2.04/ccutil/globaloc.cpp +115 -0
- data/vendor/tesseract-2.04/ccutil/globaloc.h +40 -0
- data/vendor/tesseract-2.04/ccutil/hashfn.cpp +57 -0
- data/vendor/tesseract-2.04/ccutil/hashfn.h +30 -0
- data/vendor/tesseract-2.04/ccutil/host.h +180 -0
- data/vendor/tesseract-2.04/ccutil/hosthplb.h +1 -0
- data/vendor/tesseract-2.04/ccutil/lsterr.h +43 -0
- data/vendor/tesseract-2.04/ccutil/mainblk.cpp +126 -0
- data/vendor/tesseract-2.04/ccutil/mainblk.h +39 -0
- data/vendor/tesseract-2.04/ccutil/memblk.cpp +1106 -0
- data/vendor/tesseract-2.04/ccutil/memblk.h +189 -0
- data/vendor/tesseract-2.04/ccutil/memry.cpp +532 -0
- data/vendor/tesseract-2.04/ccutil/memry.h +192 -0
- data/vendor/tesseract-2.04/ccutil/memryerr.h +38 -0
- data/vendor/tesseract-2.04/ccutil/mfcpch.cpp +5 -0
- data/vendor/tesseract-2.04/ccutil/mfcpch.h +37 -0
- data/vendor/tesseract-2.04/ccutil/ndminx.h +31 -0
- data/vendor/tesseract-2.04/ccutil/notdll.h +28 -0
- data/vendor/tesseract-2.04/ccutil/nwmain.h +176 -0
- data/vendor/tesseract-2.04/ccutil/ocrclass.h +345 -0
- data/vendor/tesseract-2.04/ccutil/ocrshell.cpp +772 -0
- data/vendor/tesseract-2.04/ccutil/ocrshell.h +191 -0
- data/vendor/tesseract-2.04/ccutil/platform.h +18 -0
- data/vendor/tesseract-2.04/ccutil/scanutils.cpp +543 -0
- data/vendor/tesseract-2.04/ccutil/scanutils.h +55 -0
- data/vendor/tesseract-2.04/ccutil/secname.h +9 -0
- data/vendor/tesseract-2.04/ccutil/serialis.cpp +117 -0
- data/vendor/tesseract-2.04/ccutil/serialis.h +93 -0
- data/vendor/tesseract-2.04/ccutil/stderr.h +26 -0
- data/vendor/tesseract-2.04/ccutil/strngs.cpp +495 -0
- data/vendor/tesseract-2.04/ccutil/strngs.h +138 -0
- data/vendor/tesseract-2.04/ccutil/tessclas.h +135 -0
- data/vendor/tesseract-2.04/ccutil/tessopt.cpp +61 -0
- data/vendor/tesseract-2.04/ccutil/tessopt.h +30 -0
- data/vendor/tesseract-2.04/ccutil/tprintf.cpp +122 -0
- data/vendor/tesseract-2.04/ccutil/tprintf.h +35 -0
- data/vendor/tesseract-2.04/ccutil/unichar.cpp +144 -0
- data/vendor/tesseract-2.04/ccutil/unichar.h +84 -0
- data/vendor/tesseract-2.04/ccutil/unicharmap.cpp +172 -0
- data/vendor/tesseract-2.04/ccutil/unicharmap.h +82 -0
- data/vendor/tesseract-2.04/ccutil/unicharset.cpp +307 -0
- data/vendor/tesseract-2.04/ccutil/unicharset.h +267 -0
- data/vendor/tesseract-2.04/ccutil/varable.cpp +672 -0
- data/vendor/tesseract-2.04/ccutil/varable.h +419 -0
- data/vendor/tesseract-2.04/classify/Makefile.am +24 -0
- data/vendor/tesseract-2.04/classify/Makefile.in +647 -0
- data/vendor/tesseract-2.04/classify/adaptive.cpp +535 -0
- data/vendor/tesseract-2.04/classify/adaptive.h +199 -0
- data/vendor/tesseract-2.04/classify/adaptmatch.cpp +2958 -0
- data/vendor/tesseract-2.04/classify/adaptmatch.h +86 -0
- data/vendor/tesseract-2.04/classify/baseline.cpp +58 -0
- data/vendor/tesseract-2.04/classify/baseline.h +91 -0
- data/vendor/tesseract-2.04/classify/blobclass.cpp +123 -0
- data/vendor/tesseract-2.04/classify/blobclass.h +49 -0
- data/vendor/tesseract-2.04/classify/chartoname.cpp +74 -0
- data/vendor/tesseract-2.04/classify/chartoname.h +21 -0
- data/vendor/tesseract-2.04/classify/cluster.cpp +2834 -0
- data/vendor/tesseract-2.04/classify/cluster.h +158 -0
- data/vendor/tesseract-2.04/classify/clusttool.cpp +507 -0
- data/vendor/tesseract-2.04/classify/clusttool.h +70 -0
- data/vendor/tesseract-2.04/classify/cutoffs.cpp +73 -0
- data/vendor/tesseract-2.04/classify/cutoffs.h +49 -0
- data/vendor/tesseract-2.04/classify/extern.h +32 -0
- data/vendor/tesseract-2.04/classify/extract.cpp +100 -0
- data/vendor/tesseract-2.04/classify/extract.h +36 -0
- data/vendor/tesseract-2.04/classify/featdefs.cpp +244 -0
- data/vendor/tesseract-2.04/classify/featdefs.h +71 -0
- data/vendor/tesseract-2.04/classify/flexfx.cpp +87 -0
- data/vendor/tesseract-2.04/classify/flexfx.h +34 -0
- data/vendor/tesseract-2.04/classify/float2int.cpp +126 -0
- data/vendor/tesseract-2.04/classify/float2int.h +65 -0
- data/vendor/tesseract-2.04/classify/fpoint.cpp +73 -0
- data/vendor/tesseract-2.04/classify/fpoint.h +63 -0
- data/vendor/tesseract-2.04/classify/fxdefs.cpp +74 -0
- data/vendor/tesseract-2.04/classify/fxdefs.h +93 -0
- data/vendor/tesseract-2.04/classify/fxid.h +69 -0
- data/vendor/tesseract-2.04/classify/hideedge.cpp +35 -0
- data/vendor/tesseract-2.04/classify/hideedge.h +76 -0
- data/vendor/tesseract-2.04/classify/intfx.cpp +608 -0
- data/vendor/tesseract-2.04/classify/intfx.h +63 -0
- data/vendor/tesseract-2.04/classify/intmatcher.cpp +1524 -0
- data/vendor/tesseract-2.04/classify/intmatcher.h +199 -0
- data/vendor/tesseract-2.04/classify/intproto.cpp +1823 -0
- data/vendor/tesseract-2.04/classify/intproto.h +320 -0
- data/vendor/tesseract-2.04/classify/kdtree.cpp +884 -0
- data/vendor/tesseract-2.04/classify/kdtree.h +118 -0
- data/vendor/tesseract-2.04/classify/mf.cpp +106 -0
- data/vendor/tesseract-2.04/classify/mf.h +43 -0
- data/vendor/tesseract-2.04/classify/mfdefs.cpp +58 -0
- data/vendor/tesseract-2.04/classify/mfdefs.h +60 -0
- data/vendor/tesseract-2.04/classify/mfoutline.cpp +1087 -0
- data/vendor/tesseract-2.04/classify/mfoutline.h +277 -0
- data/vendor/tesseract-2.04/classify/mfx.cpp +436 -0
- data/vendor/tesseract-2.04/classify/mfx.h +52 -0
- data/vendor/tesseract-2.04/classify/normfeat.cpp +132 -0
- data/vendor/tesseract-2.04/classify/normfeat.h +63 -0
- data/vendor/tesseract-2.04/classify/normmatch.cpp +305 -0
- data/vendor/tesseract-2.04/classify/normmatch.h +38 -0
- data/vendor/tesseract-2.04/classify/ocrfeatures.cpp +310 -0
- data/vendor/tesseract-2.04/classify/ocrfeatures.h +148 -0
- data/vendor/tesseract-2.04/classify/outfeat.cpp +262 -0
- data/vendor/tesseract-2.04/classify/outfeat.h +76 -0
- data/vendor/tesseract-2.04/classify/picofeat.cpp +297 -0
- data/vendor/tesseract-2.04/classify/picofeat.h +65 -0
- data/vendor/tesseract-2.04/classify/protos.cpp +472 -0
- data/vendor/tesseract-2.04/classify/protos.h +258 -0
- data/vendor/tesseract-2.04/classify/sigmenu.cpp +225 -0
- data/vendor/tesseract-2.04/classify/sigmenu.h +39 -0
- data/vendor/tesseract-2.04/classify/speckle.cpp +127 -0
- data/vendor/tesseract-2.04/classify/speckle.h +69 -0
- data/vendor/tesseract-2.04/classify/xform2d.cpp +120 -0
- data/vendor/tesseract-2.04/classify/xform2d.h +60 -0
- data/vendor/tesseract-2.04/config/config.guess +1466 -0
- data/vendor/tesseract-2.04/config/config.h.in +188 -0
- data/vendor/tesseract-2.04/config/config.sub +1579 -0
- data/vendor/tesseract-2.04/config/depcomp +530 -0
- data/vendor/tesseract-2.04/config/install-sh +269 -0
- data/vendor/tesseract-2.04/config/missing +198 -0
- data/vendor/tesseract-2.04/config/mkinstalldirs +40 -0
- data/vendor/tesseract-2.04/config/stamp-h.in +0 -0
- data/vendor/tesseract-2.04/configure +10424 -0
- data/vendor/tesseract-2.04/cutil/Makefile.am +14 -0
- data/vendor/tesseract-2.04/cutil/Makefile.in +612 -0
- data/vendor/tesseract-2.04/cutil/bitvec.cpp +115 -0
- data/vendor/tesseract-2.04/cutil/bitvec.h +100 -0
- data/vendor/tesseract-2.04/cutil/callcpp.h +190 -0
- data/vendor/tesseract-2.04/cutil/const.h +108 -0
- data/vendor/tesseract-2.04/cutil/cutil.cpp +92 -0
- data/vendor/tesseract-2.04/cutil/cutil.h +159 -0
- data/vendor/tesseract-2.04/cutil/danerror.cpp +144 -0
- data/vendor/tesseract-2.04/cutil/danerror.h +41 -0
- data/vendor/tesseract-2.04/cutil/debug.cpp +97 -0
- data/vendor/tesseract-2.04/cutil/debug.h +348 -0
- data/vendor/tesseract-2.04/cutil/efio.cpp +62 -0
- data/vendor/tesseract-2.04/cutil/efio.h +32 -0
- data/vendor/tesseract-2.04/cutil/emalloc.cpp +91 -0
- data/vendor/tesseract-2.04/cutil/emalloc.h +44 -0
- data/vendor/tesseract-2.04/cutil/freelist.cpp +75 -0
- data/vendor/tesseract-2.04/cutil/freelist.h +45 -0
- data/vendor/tesseract-2.04/cutil/funcdefs.h +35 -0
- data/vendor/tesseract-2.04/cutil/general.h +33 -0
- data/vendor/tesseract-2.04/cutil/globals.cpp +69 -0
- data/vendor/tesseract-2.04/cutil/globals.h +70 -0
- data/vendor/tesseract-2.04/cutil/listio.cpp +68 -0
- data/vendor/tesseract-2.04/cutil/listio.h +43 -0
- data/vendor/tesseract-2.04/cutil/minmax.h +40 -0
- data/vendor/tesseract-2.04/cutil/oldheap.cpp +337 -0
- data/vendor/tesseract-2.04/cutil/oldheap.h +126 -0
- data/vendor/tesseract-2.04/cutil/oldlist.cpp +393 -0
- data/vendor/tesseract-2.04/cutil/oldlist.h +350 -0
- data/vendor/tesseract-2.04/cutil/structures.cpp +66 -0
- data/vendor/tesseract-2.04/cutil/structures.h +112 -0
- data/vendor/tesseract-2.04/cutil/tessarray.cpp +115 -0
- data/vendor/tesseract-2.04/cutil/tessarray.h +166 -0
- data/vendor/tesseract-2.04/cutil/tordvars.cpp +95 -0
- data/vendor/tesseract-2.04/cutil/tordvars.h +61 -0
- data/vendor/tesseract-2.04/cutil/variables.cpp +317 -0
- data/vendor/tesseract-2.04/cutil/variables.h +170 -0
- data/vendor/tesseract-2.04/dict/Makefile.am +13 -0
- data/vendor/tesseract-2.04/dict/Makefile.in +609 -0
- data/vendor/tesseract-2.04/dict/choicearr.h +96 -0
- data/vendor/tesseract-2.04/dict/choices.cpp +210 -0
- data/vendor/tesseract-2.04/dict/choices.h +241 -0
- data/vendor/tesseract-2.04/dict/context.cpp +270 -0
- data/vendor/tesseract-2.04/dict/context.h +82 -0
- data/vendor/tesseract-2.04/dict/dawg.cpp +363 -0
- data/vendor/tesseract-2.04/dict/dawg.h +394 -0
- data/vendor/tesseract-2.04/dict/hyphen.cpp +84 -0
- data/vendor/tesseract-2.04/dict/hyphen.h +125 -0
- data/vendor/tesseract-2.04/dict/lookdawg.cpp +228 -0
- data/vendor/tesseract-2.04/dict/lookdawg.h +76 -0
- data/vendor/tesseract-2.04/dict/makedawg.cpp +449 -0
- data/vendor/tesseract-2.04/dict/makedawg.h +83 -0
- data/vendor/tesseract-2.04/dict/matchdefs.h +145 -0
- data/vendor/tesseract-2.04/dict/permdawg.cpp +415 -0
- data/vendor/tesseract-2.04/dict/permdawg.h +98 -0
- data/vendor/tesseract-2.04/dict/permngram.cpp +358 -0
- data/vendor/tesseract-2.04/dict/permngram.h +33 -0
- data/vendor/tesseract-2.04/dict/permnum.cpp +522 -0
- data/vendor/tesseract-2.04/dict/permnum.h +83 -0
- data/vendor/tesseract-2.04/dict/permute.cpp +1704 -0
- data/vendor/tesseract-2.04/dict/permute.h +93 -0
- data/vendor/tesseract-2.04/dict/reduce.cpp +424 -0
- data/vendor/tesseract-2.04/dict/reduce.h +112 -0
- data/vendor/tesseract-2.04/dict/states.cpp +382 -0
- data/vendor/tesseract-2.04/dict/states.h +111 -0
- data/vendor/tesseract-2.04/dict/stopper.cpp +1458 -0
- data/vendor/tesseract-2.04/dict/stopper.h +103 -0
- data/vendor/tesseract-2.04/dict/trie.cpp +683 -0
- data/vendor/tesseract-2.04/dict/trie.h +190 -0
- data/vendor/tesseract-2.04/dlltest/Makefile.am +2 -0
- data/vendor/tesseract-2.04/dlltest/Makefile.in +388 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.cpp +163 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.dsp +186 -0
- data/vendor/tesseract-2.04/dlltest/dlltest.vcproj +637 -0
- data/vendor/tesseract-2.04/eurotext.tif +0 -0
- data/vendor/tesseract-2.04/image/Makefile.am +10 -0
- data/vendor/tesseract-2.04/image/Makefile.in +596 -0
- data/vendor/tesseract-2.04/image/bitstrm.cpp +157 -0
- data/vendor/tesseract-2.04/image/bitstrm.h +73 -0
- data/vendor/tesseract-2.04/image/img.h +336 -0
- data/vendor/tesseract-2.04/image/imgbmp.cpp +223 -0
- data/vendor/tesseract-2.04/image/imgbmp.h +50 -0
- data/vendor/tesseract-2.04/image/imgerrs.h +35 -0
- data/vendor/tesseract-2.04/image/imgio.cpp +321 -0
- data/vendor/tesseract-2.04/image/imgio.h +22 -0
- data/vendor/tesseract-2.04/image/imgs.cpp +1764 -0
- data/vendor/tesseract-2.04/image/imgs.h +102 -0
- data/vendor/tesseract-2.04/image/imgtiff.cpp +723 -0
- data/vendor/tesseract-2.04/image/imgtiff.h +89 -0
- data/vendor/tesseract-2.04/image/imgunpk.h +1377 -0
- data/vendor/tesseract-2.04/image/svshowim.cpp +40 -0
- data/vendor/tesseract-2.04/image/svshowim.h +25 -0
- data/vendor/tesseract-2.04/java/Makefile.am +4 -0
- data/vendor/tesseract-2.04/java/Makefile.in +473 -0
- data/vendor/tesseract-2.04/java/com/Makefile.am +1 -0
- data/vendor/tesseract-2.04/java/com/Makefile.in +470 -0
- data/vendor/tesseract-2.04/java/com/google/Makefile.am +1 -0
- data/vendor/tesseract-2.04/java/com/google/Makefile.in +470 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/Makefile.am +4 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/Makefile.in +473 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ScrollView.java +421 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/Makefile.am +5 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/Makefile.in +474 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEvent.java +87 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEventHandler.java +296 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/events/SVEventType.java +31 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/Makefile.am +7 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/Makefile.in +476 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVAbstractMenuItem.java +58 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVCheckboxMenuItem.java +60 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVEmptyMenuItem.java +48 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVImageHandler.java +228 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVMenuBar.java +130 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVMenuItem.java +61 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVPopupMenu.java +142 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVSubMenuItem.java +41 -0
- data/vendor/tesseract-2.04/java/com/google/scrollview/ui/SVWindow.java +643 -0
- data/vendor/tesseract-2.04/java/makefile +55 -0
- data/vendor/tesseract-2.04/pageseg/Makefile.am +13 -0
- data/vendor/tesseract-2.04/pageseg/Makefile.in +596 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg.cpp +363 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg.h +90 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg_interface.cpp +82 -0
- data/vendor/tesseract-2.04/pageseg/leptonica_pageseg_interface.h +30 -0
- data/vendor/tesseract-2.04/pageseg/pageseg.cpp +170 -0
- data/vendor/tesseract-2.04/pageseg/pageseg.h +29 -0
- data/vendor/tesseract-2.04/phototest.tif +0 -0
- data/vendor/tesseract-2.04/tessdata/Makefile.am +31 -0
- data/vendor/tesseract-2.04/tessdata/Makefile.in +529 -0
- data/vendor/tesseract-2.04/tessdata/configs/Makefile.am +3 -0
- data/vendor/tesseract-2.04/tessdata/configs/Makefile.in +344 -0
- data/vendor/tesseract-2.04/tessdata/configs/api_config +1 -0
- data/vendor/tesseract-2.04/tessdata/configs/box.train +19 -0
- data/vendor/tesseract-2.04/tessdata/configs/box.train.stderr +18 -0
- data/vendor/tesseract-2.04/tessdata/configs/inter +4 -0
- data/vendor/tesseract-2.04/tessdata/configs/kannada +4 -0
- data/vendor/tesseract-2.04/tessdata/configs/makebox +1 -0
- data/vendor/tesseract-2.04/tessdata/configs/unlv +3 -0
- data/vendor/tesseract-2.04/tessdata/confsets +3 -0
- data/vendor/tesseract-2.04/tessdata/eng.DangAmbigs +39 -0
- data/vendor/tesseract-2.04/tessdata/eng.freq-dawg +0 -0
- data/vendor/tesseract-2.04/tessdata/eng.inttemp +0 -0
- data/vendor/tesseract-2.04/tessdata/eng.normproto +1247 -0
- data/vendor/tesseract-2.04/tessdata/eng.pffmtable +111 -0
- data/vendor/tesseract-2.04/tessdata/eng.unicharset +113 -0
- data/vendor/tesseract-2.04/tessdata/eng.user-words +921 -0
- data/vendor/tesseract-2.04/tessdata/eng.word-dawg +0 -0
- data/vendor/tesseract-2.04/tessdata/makedummies +8 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/Makefile.am +3 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/Makefile.in +344 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/batch +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/batch.nochop +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/matdemo +7 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/msdemo +13 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/nobatch +2 -0
- data/vendor/tesseract-2.04/tessdata/tessconfigs/segdemo +9 -0
- data/vendor/tesseract-2.04/tessdll.cpp +351 -0
- data/vendor/tesseract-2.04/tessdll.dsp +2050 -0
- data/vendor/tesseract-2.04/tessdll.h +143 -0
- data/vendor/tesseract-2.04/tessdll.vcproj +5495 -0
- data/vendor/tesseract-2.04/tesseract.dsp +2124 -0
- data/vendor/tesseract-2.04/tesseract.dsw +116 -0
- data/vendor/tesseract-2.04/tesseract.sln +59 -0
- data/vendor/tesseract-2.04/tesseract.spec +188 -0
- data/vendor/tesseract-2.04/tesseract.vcproj +5859 -0
- data/vendor/tesseract-2.04/testing/Makefile.am +2 -0
- data/vendor/tesseract-2.04/testing/Makefile.in +312 -0
- data/vendor/tesseract-2.04/testing/README +43 -0
- data/vendor/tesseract-2.04/testing/counttestset.sh +61 -0
- data/vendor/tesseract-2.04/testing/reorgdata.sh +44 -0
- data/vendor/tesseract-2.04/testing/reports/1995.bus.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.doe3.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.mag.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/1995.news.3B.sum +1 -0
- data/vendor/tesseract-2.04/testing/reports/2.03.summary +9 -0
- data/vendor/tesseract-2.04/testing/reports/2.04.summary +9 -0
- data/vendor/tesseract-2.04/testing/runalltests.sh +110 -0
- data/vendor/tesseract-2.04/testing/runtestset.sh +61 -0
- data/vendor/tesseract-2.04/textord/Makefile.am +20 -0
- data/vendor/tesseract-2.04/textord/Makefile.in +624 -0
- data/vendor/tesseract-2.04/textord/blkocc.cpp +809 -0
- data/vendor/tesseract-2.04/textord/blkocc.h +327 -0
- data/vendor/tesseract-2.04/textord/blobcmpl.h +31 -0
- data/vendor/tesseract-2.04/textord/drawedg.cpp +77 -0
- data/vendor/tesseract-2.04/textord/drawedg.h +34 -0
- data/vendor/tesseract-2.04/textord/drawtord.cpp +469 -0
- data/vendor/tesseract-2.04/textord/drawtord.h +107 -0
- data/vendor/tesseract-2.04/textord/edgblob.cpp +412 -0
- data/vendor/tesseract-2.04/textord/edgblob.h +100 -0
- data/vendor/tesseract-2.04/textord/edgloop.cpp +211 -0
- data/vendor/tesseract-2.04/textord/edgloop.h +66 -0
- data/vendor/tesseract-2.04/textord/fpchop.cpp +1641 -0
- data/vendor/tesseract-2.04/textord/fpchop.h +238 -0
- data/vendor/tesseract-2.04/textord/gap_map.cpp +166 -0
- data/vendor/tesseract-2.04/textord/gap_map.h +40 -0
- data/vendor/tesseract-2.04/textord/makerow.cpp +2628 -0
- data/vendor/tesseract-2.04/textord/makerow.h +295 -0
- data/vendor/tesseract-2.04/textord/oldbasel.cpp +1761 -0
- data/vendor/tesseract-2.04/textord/oldbasel.h +195 -0
- data/vendor/tesseract-2.04/textord/pithsync.cpp +696 -0
- data/vendor/tesseract-2.04/textord/pithsync.h +134 -0
- data/vendor/tesseract-2.04/textord/pitsync1.cpp +425 -0
- data/vendor/tesseract-2.04/textord/pitsync1.h +135 -0
- data/vendor/tesseract-2.04/textord/scanedg.cpp +452 -0
- data/vendor/tesseract-2.04/textord/scanedg.h +74 -0
- data/vendor/tesseract-2.04/textord/sortflts.cpp +80 -0
- data/vendor/tesseract-2.04/textord/sortflts.h +64 -0
- data/vendor/tesseract-2.04/textord/tessout.h +76 -0
- data/vendor/tesseract-2.04/textord/topitch.cpp +2019 -0
- data/vendor/tesseract-2.04/textord/topitch.h +195 -0
- data/vendor/tesseract-2.04/textord/tordmain.cpp +907 -0
- data/vendor/tesseract-2.04/textord/tordmain.h +132 -0
- data/vendor/tesseract-2.04/textord/tospace.cpp +1939 -0
- data/vendor/tesseract-2.04/textord/tospace.h +193 -0
- data/vendor/tesseract-2.04/textord/tovars.cpp +87 -0
- data/vendor/tesseract-2.04/textord/tovars.h +94 -0
- data/vendor/tesseract-2.04/textord/underlin.cpp +312 -0
- data/vendor/tesseract-2.04/textord/underlin.h +53 -0
- data/vendor/tesseract-2.04/textord/wordseg.cpp +620 -0
- data/vendor/tesseract-2.04/textord/wordseg.h +70 -0
- data/vendor/tesseract-2.04/training/Makefile.am +54 -0
- data/vendor/tesseract-2.04/training/Makefile.in +720 -0
- data/vendor/tesseract-2.04/training/cnTraining.cpp +855 -0
- data/vendor/tesseract-2.04/training/cntraining.dsp +243 -0
- data/vendor/tesseract-2.04/training/cntraining.vcproj +950 -0
- data/vendor/tesseract-2.04/training/mergenf.cpp +451 -0
- data/vendor/tesseract-2.04/training/mergenf.h +106 -0
- data/vendor/tesseract-2.04/training/mfTraining.cpp +1341 -0
- data/vendor/tesseract-2.04/training/mftraining.dsp +285 -0
- data/vendor/tesseract-2.04/training/mftraining.vcproj +1055 -0
- data/vendor/tesseract-2.04/training/name2char.cpp +166 -0
- data/vendor/tesseract-2.04/training/name2char.h +38 -0
- data/vendor/tesseract-2.04/training/training.cpp +190 -0
- data/vendor/tesseract-2.04/training/training.h +130 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.cpp +140 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.dsp +335 -0
- data/vendor/tesseract-2.04/training/unicharset_extractor.vcproj +769 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.cpp +69 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.dsp +319 -0
- data/vendor/tesseract-2.04/training/wordlist2dawg.vcproj +1113 -0
- data/vendor/tesseract-2.04/viewer/Makefile.am +9 -0
- data/vendor/tesseract-2.04/viewer/Makefile.in +591 -0
- data/vendor/tesseract-2.04/viewer/scrollview.cpp +825 -0
- data/vendor/tesseract-2.04/viewer/scrollview.h +414 -0
- data/vendor/tesseract-2.04/viewer/svmnode.cpp +140 -0
- data/vendor/tesseract-2.04/viewer/svmnode.h +94 -0
- data/vendor/tesseract-2.04/viewer/svpaint.cpp +220 -0
- data/vendor/tesseract-2.04/viewer/svutil.cpp +347 -0
- data/vendor/tesseract-2.04/viewer/svutil.h +138 -0
- data/vendor/tesseract-2.04/wordrec/Makefile.am +23 -0
- data/vendor/tesseract-2.04/wordrec/Makefile.in +641 -0
- data/vendor/tesseract-2.04/wordrec/associate.cpp +62 -0
- data/vendor/tesseract-2.04/wordrec/associate.h +93 -0
- data/vendor/tesseract-2.04/wordrec/badwords.cpp +106 -0
- data/vendor/tesseract-2.04/wordrec/badwords.h +51 -0
- data/vendor/tesseract-2.04/wordrec/bestfirst.cpp +526 -0
- data/vendor/tesseract-2.04/wordrec/bestfirst.h +203 -0
- data/vendor/tesseract-2.04/wordrec/charsample.h +208 -0
- data/vendor/tesseract-2.04/wordrec/chop.cpp +458 -0
- data/vendor/tesseract-2.04/wordrec/chop.h +153 -0
- data/vendor/tesseract-2.04/wordrec/chopper.cpp +750 -0
- data/vendor/tesseract-2.04/wordrec/chopper.h +104 -0
- data/vendor/tesseract-2.04/wordrec/closed.cpp +136 -0
- data/vendor/tesseract-2.04/wordrec/closed.h +65 -0
- data/vendor/tesseract-2.04/wordrec/djmenus.cpp +118 -0
- data/vendor/tesseract-2.04/wordrec/djmenus.h +33 -0
- data/vendor/tesseract-2.04/wordrec/drawfx.cpp +92 -0
- data/vendor/tesseract-2.04/wordrec/drawfx.h +33 -0
- data/vendor/tesseract-2.04/wordrec/findseam.cpp +566 -0
- data/vendor/tesseract-2.04/wordrec/findseam.h +69 -0
- data/vendor/tesseract-2.04/wordrec/gradechop.cpp +226 -0
- data/vendor/tesseract-2.04/wordrec/gradechop.h +91 -0
- data/vendor/tesseract-2.04/wordrec/heuristic.cpp +194 -0
- data/vendor/tesseract-2.04/wordrec/heuristic.h +120 -0
- data/vendor/tesseract-2.04/wordrec/makechop.cpp +281 -0
- data/vendor/tesseract-2.04/wordrec/makechop.h +69 -0
- data/vendor/tesseract-2.04/wordrec/matchtab.cpp +191 -0
- data/vendor/tesseract-2.04/wordrec/matchtab.h +45 -0
- data/vendor/tesseract-2.04/wordrec/matrix.cpp +118 -0
- data/vendor/tesseract-2.04/wordrec/matrix.h +104 -0
- data/vendor/tesseract-2.04/wordrec/measure.h +135 -0
- data/vendor/tesseract-2.04/wordrec/metrics.cpp +363 -0
- data/vendor/tesseract-2.04/wordrec/metrics.h +130 -0
- data/vendor/tesseract-2.04/wordrec/mfvars.cpp +51 -0
- data/vendor/tesseract-2.04/wordrec/mfvars.h +27 -0
- data/vendor/tesseract-2.04/wordrec/msmenus.cpp +110 -0
- data/vendor/tesseract-2.04/wordrec/msmenus.h +45 -0
- data/vendor/tesseract-2.04/wordrec/olutil.cpp +153 -0
- data/vendor/tesseract-2.04/wordrec/olutil.h +128 -0
- data/vendor/tesseract-2.04/wordrec/outlines.cpp +172 -0
- data/vendor/tesseract-2.04/wordrec/outlines.h +148 -0
- data/vendor/tesseract-2.04/wordrec/pieces.cpp +410 -0
- data/vendor/tesseract-2.04/wordrec/pieces.h +154 -0
- data/vendor/tesseract-2.04/wordrec/plotedges.cpp +134 -0
- data/vendor/tesseract-2.04/wordrec/plotedges.h +71 -0
- data/vendor/tesseract-2.04/wordrec/plotseg.cpp +116 -0
- data/vendor/tesseract-2.04/wordrec/plotseg.h +73 -0
- data/vendor/tesseract-2.04/wordrec/render.cpp +152 -0
- data/vendor/tesseract-2.04/wordrec/render.h +58 -0
- data/vendor/tesseract-2.04/wordrec/seam.cpp +482 -0
- data/vendor/tesseract-2.04/wordrec/seam.h +136 -0
- data/vendor/tesseract-2.04/wordrec/split.cpp +182 -0
- data/vendor/tesseract-2.04/wordrec/split.h +115 -0
- data/vendor/tesseract-2.04/wordrec/tally.cpp +68 -0
- data/vendor/tesseract-2.04/wordrec/tally.h +94 -0
- data/vendor/tesseract-2.04/wordrec/tessinit.cpp +108 -0
- data/vendor/tesseract-2.04/wordrec/tessinit.h +46 -0
- data/vendor/tesseract-2.04/wordrec/tface.cpp +272 -0
- data/vendor/tesseract-2.04/wordrec/tface.h +35 -0
- data/vendor/tesseract-2.04/wordrec/wordclass.cpp +284 -0
- data/vendor/tesseract-2.04/wordrec/wordclass.h +64 -0
- metadata +708 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**********************************************************************
|
|
2
|
+
* File: pithsync.h (Formerly pitsync2.h)
|
|
3
|
+
* Description: Code to find the optimum fixed pitch segmentation of some blobs.
|
|
4
|
+
* Author: Ray Smith
|
|
5
|
+
* Created: Thu Nov 19 11:48:05 GMT 1992
|
|
6
|
+
*
|
|
7
|
+
* (C) Copyright 1992, Hewlett-Packard Ltd.
|
|
8
|
+
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
** you may not use this file except in compliance with the License.
|
|
10
|
+
** You may obtain a copy of the License at
|
|
11
|
+
** http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
** Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
** See the License for the specific language governing permissions and
|
|
16
|
+
** limitations under the License.
|
|
17
|
+
*
|
|
18
|
+
**********************************************************************/
|
|
19
|
+
|
|
20
|
+
#ifndef PITHSYNC_H
|
|
21
|
+
#define PITHSYNC_H
|
|
22
|
+
|
|
23
|
+
#include "blobbox.h"
|
|
24
|
+
#include "varable.h"
|
|
25
|
+
#include "statistc.h"
|
|
26
|
+
#include "notdll.h"
|
|
27
|
+
|
|
28
|
+
class FPSEGPT_LIST;
|
|
29
|
+
|
|
30
|
+
class FPCUTPT
|
|
31
|
+
{
|
|
32
|
+
public:
|
|
33
|
+
FPCUTPT() { //empty
|
|
34
|
+
}
|
|
35
|
+
void setup ( //start of cut
|
|
36
|
+
FPCUTPT cutpts[], //predecessors
|
|
37
|
+
inT16 array_origin, //start coord
|
|
38
|
+
STATS * projection, //occupation
|
|
39
|
+
inT16 zero_count, //official zero
|
|
40
|
+
inT16 pitch, //proposed pitch
|
|
41
|
+
inT16 x, //position
|
|
42
|
+
inT16 offset); //dist to gap
|
|
43
|
+
|
|
44
|
+
void assign ( //evaluate cut
|
|
45
|
+
FPCUTPT cutpts[], //predecessors
|
|
46
|
+
inT16 array_origin, //start coord
|
|
47
|
+
inT16 x, //position
|
|
48
|
+
BOOL8 faking, //faking this one
|
|
49
|
+
BOOL8 mid_cut, //doing free cut
|
|
50
|
+
inT16 offset, //extra cost dist
|
|
51
|
+
STATS * projection, //occupation
|
|
52
|
+
float projection_scale, //scaling
|
|
53
|
+
inT16 zero_count, //official zero
|
|
54
|
+
inT16 pitch, //proposed pitch
|
|
55
|
+
inT16 pitch_error); //allowed tolerance
|
|
56
|
+
|
|
57
|
+
void assign_cheap ( //evaluate cut
|
|
58
|
+
FPCUTPT cutpts[], //predecessors
|
|
59
|
+
inT16 array_origin, //start coord
|
|
60
|
+
inT16 x, //position
|
|
61
|
+
BOOL8 faking, //faking this one
|
|
62
|
+
BOOL8 mid_cut, //doing free cut
|
|
63
|
+
inT16 offset, //extra cost dist
|
|
64
|
+
STATS * projection, //occupation
|
|
65
|
+
float projection_scale, //scaling
|
|
66
|
+
inT16 zero_count, //official zero
|
|
67
|
+
inT16 pitch, //proposed pitch
|
|
68
|
+
inT16 pitch_error); //allowed tolerance
|
|
69
|
+
|
|
70
|
+
inT32 position() { //acces func
|
|
71
|
+
return xpos;
|
|
72
|
+
}
|
|
73
|
+
double cost_function() {
|
|
74
|
+
return cost;
|
|
75
|
+
}
|
|
76
|
+
double squares() {
|
|
77
|
+
return sq_sum;
|
|
78
|
+
}
|
|
79
|
+
double sum() {
|
|
80
|
+
return mean_sum;
|
|
81
|
+
}
|
|
82
|
+
FPCUTPT *previous() {
|
|
83
|
+
return pred;
|
|
84
|
+
}
|
|
85
|
+
inT16 cheap_cuts() const { //no of mi cuts
|
|
86
|
+
return mid_cuts;
|
|
87
|
+
}
|
|
88
|
+
inT16 index() const {
|
|
89
|
+
return region_index;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
BOOL8 faked; //faked split point
|
|
93
|
+
BOOL8 terminal; //successful end
|
|
94
|
+
inT16 fake_count; //total fakes to here
|
|
95
|
+
|
|
96
|
+
private:
|
|
97
|
+
inT16 region_index; //cut serial number
|
|
98
|
+
inT16 mid_cuts; //no of cheap cuts
|
|
99
|
+
inT32 xpos; //location
|
|
100
|
+
uinT32 back_balance; //proj backwards
|
|
101
|
+
uinT32 fwd_balance; //proj forwards
|
|
102
|
+
FPCUTPT *pred; //optimal previous
|
|
103
|
+
double mean_sum; //mean so far
|
|
104
|
+
double sq_sum; //summed distsances
|
|
105
|
+
double cost; //cost function
|
|
106
|
+
};
|
|
107
|
+
double check_pitch_sync2( //find segmentation
|
|
108
|
+
BLOBNBOX_IT *blob_it, //blobs to do
|
|
109
|
+
inT16 blob_count, //no of blobs
|
|
110
|
+
inT16 pitch, //pitch estimate
|
|
111
|
+
inT16 pitch_error, //tolerance
|
|
112
|
+
STATS *projection, //vertical
|
|
113
|
+
inT16 projection_left, //edges //scale factor
|
|
114
|
+
inT16 projection_right,
|
|
115
|
+
float projection_scale,
|
|
116
|
+
inT16 &occupation_count, //no of occupied cells
|
|
117
|
+
FPSEGPT_LIST *seg_list, //output list
|
|
118
|
+
inT16 start, //start of good range
|
|
119
|
+
inT16 end //end of good range
|
|
120
|
+
);
|
|
121
|
+
double check_pitch_sync3( //find segmentation
|
|
122
|
+
inT16 projection_left, //edges //to be considered 0
|
|
123
|
+
inT16 projection_right,
|
|
124
|
+
inT16 zero_count,
|
|
125
|
+
inT16 pitch, //pitch estimate
|
|
126
|
+
inT16 pitch_error, //tolerance
|
|
127
|
+
STATS *projection, //vertical
|
|
128
|
+
float projection_scale, //scale factor
|
|
129
|
+
inT16 &occupation_count, //no of occupied cells
|
|
130
|
+
FPSEGPT_LIST *seg_list, //output list
|
|
131
|
+
inT16 start, //start of good range
|
|
132
|
+
inT16 end //end of good range
|
|
133
|
+
);
|
|
134
|
+
#endif
|
|
@@ -0,0 +1,425 @@
|
|
|
1
|
+
/**********************************************************************
|
|
2
|
+
* File: pitsync1.cpp (Formerly pitsync.c)
|
|
3
|
+
* Description: Code to find the optimum fixed pitch segmentation of some blobs.
|
|
4
|
+
* Author: Ray Smith
|
|
5
|
+
* Created: Thu Nov 19 11:48:05 GMT 1992
|
|
6
|
+
*
|
|
7
|
+
* (C) Copyright 1992, Hewlett-Packard Ltd.
|
|
8
|
+
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
** you may not use this file except in compliance with the License.
|
|
10
|
+
** You may obtain a copy of the License at
|
|
11
|
+
** http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
** Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
** See the License for the specific language governing permissions and
|
|
16
|
+
** limitations under the License.
|
|
17
|
+
*
|
|
18
|
+
**********************************************************************/
|
|
19
|
+
|
|
20
|
+
#include "mfcpch.h"
|
|
21
|
+
#ifdef __UNIX__
|
|
22
|
+
#include <assert.h>
|
|
23
|
+
#endif
|
|
24
|
+
#include <math.h>
|
|
25
|
+
#include "memry.h"
|
|
26
|
+
#include "pitsync1.h"
|
|
27
|
+
|
|
28
|
+
#include "notdll.h"
|
|
29
|
+
|
|
30
|
+
ELISTIZE (FPSEGPT) CLISTIZE (FPSEGPT_LIST)
|
|
31
|
+
#define EXTERN
|
|
32
|
+
EXTERN
|
|
33
|
+
INT_VAR (pitsync_linear_version, 6, "Use new fast algorithm");
|
|
34
|
+
EXTERN
|
|
35
|
+
double_VAR (pitsync_joined_edge, 0.75,
|
|
36
|
+
"Dist inside big blob for chopping");
|
|
37
|
+
EXTERN
|
|
38
|
+
double_VAR (pitsync_offset_freecut_fraction, 0.25,
|
|
39
|
+
"Fraction of cut for free cuts");
|
|
40
|
+
EXTERN
|
|
41
|
+
INT_VAR (pitsync_fake_depth, 1, "Max advance fake generation");
|
|
42
|
+
|
|
43
|
+
/**********************************************************************
|
|
44
|
+
* FPSEGPT::FPSEGPT
|
|
45
|
+
*
|
|
46
|
+
* Constructor to make a new FPSEGPT.
|
|
47
|
+
* The existing FPCUTPT is duplicated.
|
|
48
|
+
**********************************************************************/
|
|
49
|
+
|
|
50
|
+
FPSEGPT::FPSEGPT( //constructor
|
|
51
|
+
FPCUTPT *cutpt //create from new form
|
|
52
|
+
) {
|
|
53
|
+
pred = NULL;
|
|
54
|
+
mean_sum = cutpt->sum ();
|
|
55
|
+
sq_sum = cutpt->squares ();
|
|
56
|
+
cost = cutpt->cost_function ();
|
|
57
|
+
faked = cutpt->faked;
|
|
58
|
+
terminal = cutpt->terminal;
|
|
59
|
+
fake_count = cutpt->fake_count;
|
|
60
|
+
xpos = cutpt->position ();
|
|
61
|
+
mid_cuts = cutpt->cheap_cuts ();
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
/**********************************************************************
|
|
66
|
+
* FPSEGPT::FPSEGPT
|
|
67
|
+
*
|
|
68
|
+
* Constructor to make a new FPSEGPT.
|
|
69
|
+
**********************************************************************/
|
|
70
|
+
|
|
71
|
+
FPSEGPT::FPSEGPT ( //constructor
|
|
72
|
+
inT16 x //position
|
|
73
|
+
):xpos (x) {
|
|
74
|
+
pred = NULL;
|
|
75
|
+
mean_sum = 0;
|
|
76
|
+
sq_sum = 0;
|
|
77
|
+
cost = 0;
|
|
78
|
+
faked = FALSE;
|
|
79
|
+
terminal = FALSE;
|
|
80
|
+
fake_count = 0;
|
|
81
|
+
mid_cuts = 0;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
/**********************************************************************
|
|
86
|
+
* FPSEGPT::FPSEGPT
|
|
87
|
+
*
|
|
88
|
+
* Constructor to make a new FPSEGPT.
|
|
89
|
+
**********************************************************************/
|
|
90
|
+
|
|
91
|
+
FPSEGPT::FPSEGPT ( //constructor
|
|
92
|
+
inT16 x, //position
|
|
93
|
+
BOOL8 faking, //faking this one
|
|
94
|
+
inT16 offset, //dist to gap
|
|
95
|
+
inT16 region_index, //segment number
|
|
96
|
+
inT16 pitch, //proposed pitch
|
|
97
|
+
inT16 pitch_error, //allowed tolerance
|
|
98
|
+
FPSEGPT_LIST * prev_list //previous segment
|
|
99
|
+
):xpos (x) {
|
|
100
|
+
inT16 best_fake; //on previous
|
|
101
|
+
FPSEGPT *segpt; //segment point
|
|
102
|
+
inT32 dist; //from prev segment
|
|
103
|
+
double sq_dist; //squared distance
|
|
104
|
+
double mean; //mean pitch
|
|
105
|
+
double total; //total dists
|
|
106
|
+
double factor; //cost function
|
|
107
|
+
FPSEGPT_IT pred_it = prev_list;//for previuos segment
|
|
108
|
+
|
|
109
|
+
cost = MAX_FLOAT32;
|
|
110
|
+
pred = NULL;
|
|
111
|
+
faked = faking;
|
|
112
|
+
terminal = FALSE;
|
|
113
|
+
best_fake = MAX_INT16;
|
|
114
|
+
mid_cuts = 0;
|
|
115
|
+
for (pred_it.mark_cycle_pt (); !pred_it.cycled_list (); pred_it.forward ()) {
|
|
116
|
+
segpt = pred_it.data ();
|
|
117
|
+
if (segpt->fake_count < best_fake)
|
|
118
|
+
best_fake = segpt->fake_count;
|
|
119
|
+
dist = x - segpt->xpos;
|
|
120
|
+
if (dist >= pitch - pitch_error && dist <= pitch + pitch_error
|
|
121
|
+
&& !segpt->terminal) {
|
|
122
|
+
total = segpt->mean_sum + dist;
|
|
123
|
+
sq_dist = dist * dist + segpt->sq_sum + offset * offset;
|
|
124
|
+
//sum of squarees
|
|
125
|
+
mean = total / region_index;
|
|
126
|
+
factor = mean - pitch;
|
|
127
|
+
factor *= factor;
|
|
128
|
+
factor += sq_dist / (region_index) - mean * mean;
|
|
129
|
+
if (factor < cost) {
|
|
130
|
+
cost = factor; //find least cost
|
|
131
|
+
pred = segpt; //save path
|
|
132
|
+
mean_sum = total;
|
|
133
|
+
sq_sum = sq_dist;
|
|
134
|
+
fake_count = segpt->fake_count + faked;
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
if (fake_count > best_fake + 1)
|
|
139
|
+
pred = NULL; //fail it
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
/**********************************************************************
|
|
144
|
+
* check_pitch_sync
|
|
145
|
+
*
|
|
146
|
+
* Construct the lattice of possible segmentation points and choose the
|
|
147
|
+
* optimal path. Return the optimal path only.
|
|
148
|
+
* The return value is a measure of goodness of the sync.
|
|
149
|
+
**********************************************************************/
|
|
150
|
+
|
|
151
|
+
double check_pitch_sync( //find segmentation
|
|
152
|
+
BLOBNBOX_IT *blob_it, //blobs to do
|
|
153
|
+
inT16 blob_count, //no of blobs
|
|
154
|
+
inT16 pitch, //pitch estimate
|
|
155
|
+
inT16 pitch_error, //tolerance
|
|
156
|
+
STATS *projection, //vertical
|
|
157
|
+
FPSEGPT_LIST *seg_list //output list
|
|
158
|
+
) {
|
|
159
|
+
inT16 x; //current coord
|
|
160
|
+
inT16 min_index; //blob number
|
|
161
|
+
inT16 max_index; //blob number
|
|
162
|
+
inT16 left_edge; //of word
|
|
163
|
+
inT16 right_edge; //of word
|
|
164
|
+
inT16 right_max; //max allowed x
|
|
165
|
+
inT16 min_x; //in this region
|
|
166
|
+
inT16 max_x;
|
|
167
|
+
inT16 region_index;
|
|
168
|
+
inT16 best_region_index = 0; //for best result
|
|
169
|
+
inT16 offset; //dist to legal area
|
|
170
|
+
inT16 left_best_x; //edge of good region
|
|
171
|
+
inT16 right_best_x; //right edge
|
|
172
|
+
TBOX min_box; //bounding box
|
|
173
|
+
TBOX max_box; //bounding box
|
|
174
|
+
TBOX next_box; //box of next blob
|
|
175
|
+
FPSEGPT *segpt; //segment point
|
|
176
|
+
FPSEGPT_LIST *segpts; //points in a segment
|
|
177
|
+
double best_cost; //best path
|
|
178
|
+
double mean_sum; //computes result
|
|
179
|
+
FPSEGPT *best_end; //end of best path
|
|
180
|
+
BLOBNBOX_IT min_it; //copy iterator
|
|
181
|
+
BLOBNBOX_IT max_it; //copy iterator
|
|
182
|
+
FPSEGPT_IT segpt_it; //iterator
|
|
183
|
+
//output segments
|
|
184
|
+
FPSEGPT_IT outseg_it = seg_list;
|
|
185
|
+
FPSEGPT_LIST_CLIST lattice; //list of lists
|
|
186
|
+
//region iterator
|
|
187
|
+
FPSEGPT_LIST_C_IT lattice_it = &lattice;
|
|
188
|
+
|
|
189
|
+
// tprintf("Computing sync on word of %d blobs with pitch %d\n",
|
|
190
|
+
// blob_count, pitch);
|
|
191
|
+
// if (blob_count==8 && pitch==27)
|
|
192
|
+
// projection->print(stdout,TRUE);
|
|
193
|
+
if (pitch < 3)
|
|
194
|
+
pitch = 3; //nothing ludicrous
|
|
195
|
+
if ((pitch - 3) / 2 < pitch_error)
|
|
196
|
+
pitch_error = (pitch - 3) / 2;
|
|
197
|
+
min_it = *blob_it;
|
|
198
|
+
min_box = box_next (&min_it); //get box
|
|
199
|
+
// if (blob_count==8 && pitch==27)
|
|
200
|
+
// tprintf("1st box at (%d,%d)->(%d,%d)\n",
|
|
201
|
+
// min_box.left(),min_box.bottom(),
|
|
202
|
+
// min_box.right(),min_box.top());
|
|
203
|
+
//left of word
|
|
204
|
+
left_edge = min_box.left () + pitch_error;
|
|
205
|
+
for (min_index = 1; min_index < blob_count; min_index++) {
|
|
206
|
+
min_box = box_next (&min_it);
|
|
207
|
+
// if (blob_count==8 && pitch==27)
|
|
208
|
+
// tprintf("Box at (%d,%d)->(%d,%d)\n",
|
|
209
|
+
// min_box.left(),min_box.bottom(),
|
|
210
|
+
// min_box.right(),min_box.top());
|
|
211
|
+
}
|
|
212
|
+
right_edge = min_box.right (); //end of word
|
|
213
|
+
max_x = left_edge;
|
|
214
|
+
//min permissible
|
|
215
|
+
min_x = max_x - pitch + pitch_error * 2 + 1;
|
|
216
|
+
right_max = right_edge + pitch - pitch_error - 1;
|
|
217
|
+
segpts = new FPSEGPT_LIST; //list of points
|
|
218
|
+
segpt_it.set_to_list (segpts);
|
|
219
|
+
for (x = min_x; x <= max_x; x++) {
|
|
220
|
+
segpt = new FPSEGPT (x); //make a new one
|
|
221
|
+
//put in list
|
|
222
|
+
segpt_it.add_after_then_move (segpt);
|
|
223
|
+
}
|
|
224
|
+
//first segment
|
|
225
|
+
lattice_it.add_before_then_move (segpts);
|
|
226
|
+
min_index = 0;
|
|
227
|
+
region_index = 1;
|
|
228
|
+
best_cost = MAX_FLOAT32;
|
|
229
|
+
best_end = NULL;
|
|
230
|
+
min_it = *blob_it;
|
|
231
|
+
min_box = box_next (&min_it); //first box
|
|
232
|
+
do {
|
|
233
|
+
left_best_x = -1;
|
|
234
|
+
right_best_x = -1;
|
|
235
|
+
segpts = new FPSEGPT_LIST; //list of points
|
|
236
|
+
segpt_it.set_to_list (segpts);
|
|
237
|
+
min_x += pitch - pitch_error;//next limits
|
|
238
|
+
max_x += pitch + pitch_error;
|
|
239
|
+
while (min_box.right () < min_x && min_index < blob_count) {
|
|
240
|
+
min_index++;
|
|
241
|
+
min_box = box_next (&min_it);
|
|
242
|
+
}
|
|
243
|
+
max_it = min_it;
|
|
244
|
+
max_index = min_index;
|
|
245
|
+
max_box = min_box;
|
|
246
|
+
next_box = box_next (&max_it);
|
|
247
|
+
for (x = min_x; x <= max_x && x <= right_max; x++) {
|
|
248
|
+
while (x < right_edge && max_index < blob_count
|
|
249
|
+
&& x > max_box.right ()) {
|
|
250
|
+
max_index++;
|
|
251
|
+
max_box = next_box;
|
|
252
|
+
next_box = box_next (&max_it);
|
|
253
|
+
}
|
|
254
|
+
if (x <= max_box.left () + pitch_error
|
|
255
|
+
|| x >= max_box.right () - pitch_error || x >= right_edge
|
|
256
|
+
|| (max_index < blob_count - 1 && x >= next_box.left ())
|
|
257
|
+
|| (x - max_box.left () > pitch * pitsync_joined_edge
|
|
258
|
+
&& max_box.right () - x > pitch * pitsync_joined_edge)) {
|
|
259
|
+
// || projection->local_min(x))
|
|
260
|
+
if (x - max_box.left () > 0
|
|
261
|
+
&& x - max_box.left () <= pitch_error)
|
|
262
|
+
//dist to real break
|
|
263
|
+
offset = x - max_box.left ();
|
|
264
|
+
else if (max_box.right () - x > 0
|
|
265
|
+
&& max_box.right () - x <= pitch_error
|
|
266
|
+
&& (max_index >= blob_count - 1
|
|
267
|
+
|| x < next_box.left ()))
|
|
268
|
+
offset = max_box.right () - x;
|
|
269
|
+
else
|
|
270
|
+
offset = 0;
|
|
271
|
+
// offset=pitsync_offset_freecut_fraction*projection->pile_count(x);
|
|
272
|
+
segpt = new FPSEGPT (x, FALSE, offset, region_index,
|
|
273
|
+
pitch, pitch_error, lattice_it.data ());
|
|
274
|
+
}
|
|
275
|
+
else {
|
|
276
|
+
offset = projection->pile_count (x);
|
|
277
|
+
segpt = new FPSEGPT (x, TRUE, offset, region_index,
|
|
278
|
+
pitch, pitch_error, lattice_it.data ());
|
|
279
|
+
}
|
|
280
|
+
if (segpt->previous () != NULL) {
|
|
281
|
+
segpt_it.add_after_then_move (segpt);
|
|
282
|
+
if (x >= right_edge - pitch_error) {
|
|
283
|
+
segpt->terminal = TRUE;//no more wanted
|
|
284
|
+
if (segpt->cost_function () < best_cost) {
|
|
285
|
+
best_cost = segpt->cost_function ();
|
|
286
|
+
//find least
|
|
287
|
+
best_end = segpt;
|
|
288
|
+
best_region_index = region_index;
|
|
289
|
+
left_best_x = x;
|
|
290
|
+
right_best_x = x;
|
|
291
|
+
}
|
|
292
|
+
else if (segpt->cost_function () == best_cost
|
|
293
|
+
&& right_best_x == x - 1)
|
|
294
|
+
right_best_x = x;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
else {
|
|
298
|
+
delete segpt; //no good
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
if (segpts->empty ()) {
|
|
302
|
+
if (best_end != NULL)
|
|
303
|
+
break; //already found one
|
|
304
|
+
make_illegal_segment (lattice_it.data (), min_box, min_it,
|
|
305
|
+
region_index, pitch, pitch_error, segpts);
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
if (right_best_x > left_best_x + 1) {
|
|
309
|
+
left_best_x = (left_best_x + right_best_x + 1) / 2;
|
|
310
|
+
for (segpt_it.mark_cycle_pt (); !segpt_it.cycled_list ()
|
|
311
|
+
&& segpt_it.data ()->position () != left_best_x;
|
|
312
|
+
segpt_it.forward ());
|
|
313
|
+
if (segpt_it.data ()->position () == left_best_x)
|
|
314
|
+
//middle of region
|
|
315
|
+
best_end = segpt_it.data ();
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
//new segment
|
|
319
|
+
lattice_it.add_before_then_move (segpts);
|
|
320
|
+
region_index++;
|
|
321
|
+
}
|
|
322
|
+
while (min_x < right_edge);
|
|
323
|
+
ASSERT_HOST (best_end != NULL);//must always find some
|
|
324
|
+
|
|
325
|
+
for (lattice_it.mark_cycle_pt (); !lattice_it.cycled_list ();
|
|
326
|
+
lattice_it.forward ()) {
|
|
327
|
+
segpts = lattice_it.data ();
|
|
328
|
+
segpt_it.set_to_list (segpts);
|
|
329
|
+
// if (blob_count==8 && pitch==27)
|
|
330
|
+
// {
|
|
331
|
+
// for (segpt_it.mark_cycle_pt();!segpt_it.cycled_list();segpt_it.forward())
|
|
332
|
+
// {
|
|
333
|
+
// segpt=segpt_it.data();
|
|
334
|
+
// tprintf("At %d, (%x) cost=%g, m=%g, sq=%g, pred=%x\n",
|
|
335
|
+
// segpt->position(),segpt,segpt->cost_function(),
|
|
336
|
+
// segpt->sum(),segpt->squares(),segpt->previous());
|
|
337
|
+
// }
|
|
338
|
+
// tprintf("\n");
|
|
339
|
+
// }
|
|
340
|
+
for (segpt_it.mark_cycle_pt (); !segpt_it.cycled_list ()
|
|
341
|
+
&& segpt_it.data () != best_end; segpt_it.forward ());
|
|
342
|
+
if (segpt_it.data () == best_end) {
|
|
343
|
+
//save good one
|
|
344
|
+
segpt = segpt_it.extract ();
|
|
345
|
+
outseg_it.add_before_then_move (segpt);
|
|
346
|
+
best_end = segpt->previous ();
|
|
347
|
+
}
|
|
348
|
+
}
|
|
349
|
+
ASSERT_HOST (best_end == NULL);
|
|
350
|
+
ASSERT_HOST (!outseg_it.empty ());
|
|
351
|
+
outseg_it.move_to_last ();
|
|
352
|
+
mean_sum = outseg_it.data ()->sum ();
|
|
353
|
+
mean_sum = mean_sum * mean_sum / best_region_index;
|
|
354
|
+
if (outseg_it.data ()->squares () - mean_sum < 0)
|
|
355
|
+
tprintf ("Impossible sqsum=%g, mean=%g, total=%d\n",
|
|
356
|
+
outseg_it.data ()->squares (), outseg_it.data ()->sum (),
|
|
357
|
+
best_region_index);
|
|
358
|
+
lattice.deep_clear (); //shift the lot
|
|
359
|
+
return outseg_it.data ()->squares () - mean_sum;
|
|
360
|
+
}
|
|
361
|
+
|
|
362
|
+
|
|
363
|
+
/**********************************************************************
|
|
364
|
+
* make_illegal_segment
|
|
365
|
+
*
|
|
366
|
+
* Make a fake set of chop points due to having no legal places.
|
|
367
|
+
**********************************************************************/
|
|
368
|
+
|
|
369
|
+
void make_illegal_segment( //find segmentation
|
|
370
|
+
FPSEGPT_LIST *prev_list, //previous segments
|
|
371
|
+
TBOX blob_box, //bounding box
|
|
372
|
+
BLOBNBOX_IT blob_it, //iterator
|
|
373
|
+
inT16 region_index, //number of segment
|
|
374
|
+
inT16 pitch, //pitch estimate
|
|
375
|
+
inT16 pitch_error, //tolerance
|
|
376
|
+
FPSEGPT_LIST *seg_list //output list
|
|
377
|
+
) {
|
|
378
|
+
inT16 x; //current coord
|
|
379
|
+
inT16 min_x = 0; //in this region
|
|
380
|
+
inT16 max_x = 0;
|
|
381
|
+
inT16 offset; //dist to edge
|
|
382
|
+
FPSEGPT *segpt; //segment point
|
|
383
|
+
FPSEGPT *prevpt; //previous point
|
|
384
|
+
float best_cost; //best path
|
|
385
|
+
FPSEGPT_IT segpt_it = seg_list;//iterator
|
|
386
|
+
//previous points
|
|
387
|
+
FPSEGPT_IT prevpt_it = prev_list;
|
|
388
|
+
|
|
389
|
+
best_cost = MAX_FLOAT32;
|
|
390
|
+
for (prevpt_it.mark_cycle_pt (); !prevpt_it.cycled_list ();
|
|
391
|
+
prevpt_it.forward ()) {
|
|
392
|
+
prevpt = prevpt_it.data ();
|
|
393
|
+
if (prevpt->cost_function () < best_cost) {
|
|
394
|
+
//find least
|
|
395
|
+
best_cost = prevpt->cost_function ();
|
|
396
|
+
min_x = prevpt->position ();
|
|
397
|
+
max_x = min_x; //limits on coords
|
|
398
|
+
}
|
|
399
|
+
else if (prevpt->cost_function () == best_cost) {
|
|
400
|
+
max_x = prevpt->position ();
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
min_x += pitch - pitch_error;
|
|
404
|
+
max_x += pitch + pitch_error;
|
|
405
|
+
for (x = min_x; x <= max_x; x++) {
|
|
406
|
+
while (x > blob_box.right ()) {
|
|
407
|
+
blob_box = box_next (&blob_it);
|
|
408
|
+
}
|
|
409
|
+
offset = x - blob_box.left ();
|
|
410
|
+
if (blob_box.right () - x < offset)
|
|
411
|
+
offset = blob_box.right () - x;
|
|
412
|
+
segpt = new FPSEGPT (x, FALSE, offset,
|
|
413
|
+
region_index, pitch, pitch_error, prev_list);
|
|
414
|
+
if (segpt->previous () != NULL) {
|
|
415
|
+
ASSERT_HOST (offset >= 0);
|
|
416
|
+
fprintf (stderr, "made fake at %d\n", x);
|
|
417
|
+
//make one up
|
|
418
|
+
segpt_it.add_after_then_move (segpt);
|
|
419
|
+
segpt->faked = TRUE;
|
|
420
|
+
segpt->fake_count++;
|
|
421
|
+
}
|
|
422
|
+
else
|
|
423
|
+
delete segpt;
|
|
424
|
+
}
|
|
425
|
+
}
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
/**********************************************************************
|
|
2
|
+
* File: pitsync1.h (Formerly pitsync.h)
|
|
3
|
+
* Description: Code to find the optimum fixed pitch segmentation of some blobs.
|
|
4
|
+
* Author: Ray Smith
|
|
5
|
+
* Created: Thu Nov 19 11:48:05 GMT 1992
|
|
6
|
+
*
|
|
7
|
+
* (C) Copyright 1992, Hewlett-Packard Ltd.
|
|
8
|
+
** Licensed under the Apache License, Version 2.0 (the "License");
|
|
9
|
+
** you may not use this file except in compliance with the License.
|
|
10
|
+
** You may obtain a copy of the License at
|
|
11
|
+
** http://www.apache.org/licenses/LICENSE-2.0
|
|
12
|
+
** Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
** See the License for the specific language governing permissions and
|
|
16
|
+
** limitations under the License.
|
|
17
|
+
*
|
|
18
|
+
**********************************************************************/
|
|
19
|
+
|
|
20
|
+
#ifndef PITSYNC1_H
|
|
21
|
+
#define PITSYNC1_H
|
|
22
|
+
|
|
23
|
+
#include "elst.h"
|
|
24
|
+
#include "clst.h"
|
|
25
|
+
#include "blobbox.h"
|
|
26
|
+
#include "varable.h"
|
|
27
|
+
#include "statistc.h"
|
|
28
|
+
#include "pithsync.h"
|
|
29
|
+
#include "notdll.h"
|
|
30
|
+
#include "notdll.h"
|
|
31
|
+
|
|
32
|
+
class FPSEGPT_LIST;
|
|
33
|
+
|
|
34
|
+
class FPSEGPT:public ELIST_LINK
|
|
35
|
+
{
|
|
36
|
+
public:
|
|
37
|
+
FPSEGPT() { //empty
|
|
38
|
+
}
|
|
39
|
+
FPSEGPT( //constructor
|
|
40
|
+
inT16 x); //position
|
|
41
|
+
FPSEGPT( //constructor
|
|
42
|
+
inT16 x, //position
|
|
43
|
+
BOOL8 faking, //faking this one
|
|
44
|
+
inT16 offset, //extra cost dist
|
|
45
|
+
inT16 region_index, //segment number
|
|
46
|
+
inT16 pitch, //proposed pitch
|
|
47
|
+
inT16 pitch_error, //allowed tolerance
|
|
48
|
+
FPSEGPT_LIST *prev_list); //previous segment
|
|
49
|
+
FPSEGPT(FPCUTPT *cutpt); //build from new type
|
|
50
|
+
|
|
51
|
+
inT32 position() { //acces func
|
|
52
|
+
return xpos;
|
|
53
|
+
}
|
|
54
|
+
double cost_function() {
|
|
55
|
+
return cost;
|
|
56
|
+
}
|
|
57
|
+
double squares() {
|
|
58
|
+
return sq_sum;
|
|
59
|
+
}
|
|
60
|
+
double sum() {
|
|
61
|
+
return mean_sum;
|
|
62
|
+
}
|
|
63
|
+
FPSEGPT *previous() {
|
|
64
|
+
return pred;
|
|
65
|
+
}
|
|
66
|
+
inT16 cheap_cuts() const { //no of cheap cuts
|
|
67
|
+
return mid_cuts;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
//faked split point
|
|
71
|
+
NEWDELETE2 (FPSEGPT) BOOL8 faked;
|
|
72
|
+
BOOL8 terminal; //successful end
|
|
73
|
+
inT16 fake_count; //total fakes to here
|
|
74
|
+
|
|
75
|
+
private:
|
|
76
|
+
inT16 mid_cuts; //no of cheap cuts
|
|
77
|
+
inT32 xpos; //location
|
|
78
|
+
FPSEGPT *pred; //optimal previous
|
|
79
|
+
double mean_sum; //mean so far
|
|
80
|
+
double sq_sum; //summed distsances
|
|
81
|
+
double cost; //cost function
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
ELISTIZEH (FPSEGPT) CLISTIZEH (FPSEGPT_LIST)
|
|
85
|
+
extern
|
|
86
|
+
BOOL_VAR_H (pitsync_projection_fix, FALSE,
|
|
87
|
+
"Fix bug in projection profile");
|
|
88
|
+
extern
|
|
89
|
+
INT_VAR_H (pitsync_linear_version, 0, "Use new fast algorithm");
|
|
90
|
+
extern
|
|
91
|
+
double_VAR_H (pitsync_joined_edge, 0.75,
|
|
92
|
+
"Dist inside big blob for chopping");
|
|
93
|
+
extern
|
|
94
|
+
double_VAR_H (pitsync_offset_freecut_fraction, 0.25,
|
|
95
|
+
"Fraction of cut for free cuts");
|
|
96
|
+
extern
|
|
97
|
+
INT_VAR_H (pitsync_fake_depth, 1, "Max advance fake generation");
|
|
98
|
+
double check_pitch_sync( //find segmentation
|
|
99
|
+
BLOBNBOX_IT *blob_it, //blobs to do
|
|
100
|
+
inT16 blob_count, //no of blobs
|
|
101
|
+
inT16 pitch, //pitch estimate
|
|
102
|
+
inT16 pitch_error, //tolerance
|
|
103
|
+
STATS *projection, //vertical
|
|
104
|
+
FPSEGPT_LIST *seg_list //output list
|
|
105
|
+
);
|
|
106
|
+
void make_illegal_segment( //find segmentation
|
|
107
|
+
FPSEGPT_LIST *prev_list, //previous segments
|
|
108
|
+
TBOX blob_box, //bounding box
|
|
109
|
+
BLOBNBOX_IT blob_it, //iterator
|
|
110
|
+
inT16 region_index, //number of segment
|
|
111
|
+
inT16 pitch, //pitch estimate
|
|
112
|
+
inT16 pitch_error, //tolerance
|
|
113
|
+
FPSEGPT_LIST *seg_list //output list
|
|
114
|
+
);
|
|
115
|
+
inT16 vertical_torow_projection( //project whole row
|
|
116
|
+
TO_ROW *row, //row to do
|
|
117
|
+
STATS *projection //output
|
|
118
|
+
);
|
|
119
|
+
void vertical_blob_projection( //project outlines
|
|
120
|
+
PBLOB *blob, //blob to project
|
|
121
|
+
STATS *stats //output
|
|
122
|
+
);
|
|
123
|
+
void vertical_outline_projection( //project outlines
|
|
124
|
+
OUTLINE *outline, //outline to project
|
|
125
|
+
STATS *stats //output
|
|
126
|
+
);
|
|
127
|
+
void vertical_cblob_projection( //project outlines
|
|
128
|
+
C_BLOB *blob, //blob to project
|
|
129
|
+
STATS *stats //output
|
|
130
|
+
);
|
|
131
|
+
void vertical_coutline_projection( //project outlines
|
|
132
|
+
C_OUTLINE *outline, //outline to project
|
|
133
|
+
STATS *stats //output
|
|
134
|
+
);
|
|
135
|
+
#endif
|