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,158 @@
|
|
|
1
|
+
/******************************************************************************
|
|
2
|
+
** Filename: cluster.h
|
|
3
|
+
** Purpose: Definition of feature space clustering routines
|
|
4
|
+
** Author: Dan Johnson
|
|
5
|
+
** History: 5/29/89, DSJ, Created.
|
|
6
|
+
**
|
|
7
|
+
** (c) Copyright Hewlett-Packard Company, 1988.
|
|
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
|
+
#ifndef CLUSTER_H
|
|
19
|
+
#define CLUSTER_H
|
|
20
|
+
|
|
21
|
+
#include "kdtree.h"
|
|
22
|
+
#include "oldlist.h"
|
|
23
|
+
|
|
24
|
+
/*----------------------------------------------------------------------
|
|
25
|
+
Types
|
|
26
|
+
----------------------------------------------------------------------*/
|
|
27
|
+
typedef struct sample
|
|
28
|
+
{
|
|
29
|
+
unsigned Clustered:1; // TRUE if included in a higher cluster
|
|
30
|
+
unsigned Prototype:1; // TRUE if cluster represented by a proto
|
|
31
|
+
unsigned SampleCount:30; // number of samples in this cluster
|
|
32
|
+
struct sample *Left; // ptr to left sub-cluster
|
|
33
|
+
struct sample *Right; // ptr to right sub-cluster
|
|
34
|
+
inT32 CharID; // identifier of char sample came from
|
|
35
|
+
FLOAT32 Mean[1]; // mean of cluster - SampleSize floats
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
CLUSTER;
|
|
40
|
+
|
|
41
|
+
typedef CLUSTER SAMPLE; // can refer to as either sample or cluster
|
|
42
|
+
|
|
43
|
+
typedef enum {
|
|
44
|
+
spherical, elliptical, mixed, automatic
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
PROTOSTYLE;
|
|
49
|
+
|
|
50
|
+
typedef struct // parameters to control clustering
|
|
51
|
+
{
|
|
52
|
+
PROTOSTYLE ProtoStyle; // specifies types of protos to be made
|
|
53
|
+
FLOAT32 MinSamples; // min # of samples per proto - % of total
|
|
54
|
+
FLOAT32 MaxIllegal; // max percentage of samples in a cluster which have
|
|
55
|
+
// more than 1 feature in that cluster
|
|
56
|
+
FLOAT32 Independence; // desired independence between dimensions
|
|
57
|
+
FLOAT64 Confidence; // desired confidence in prototypes created
|
|
58
|
+
int MagicSamples; // Ideal number of samples in a cluster.
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
CLUSTERCONFIG;
|
|
63
|
+
|
|
64
|
+
typedef enum {
|
|
65
|
+
normal, uniform, D_random
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
DISTRIBUTION;
|
|
70
|
+
|
|
71
|
+
typedef union
|
|
72
|
+
{
|
|
73
|
+
FLOAT32 Spherical;
|
|
74
|
+
FLOAT32 *Elliptical;
|
|
75
|
+
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
FLOATUNION;
|
|
80
|
+
|
|
81
|
+
typedef struct proto
|
|
82
|
+
{
|
|
83
|
+
unsigned Significant:1; // TRUE if prototype is significant
|
|
84
|
+
unsigned Merged:1; // Merged after clustering so do not output
|
|
85
|
+
// but kept for display purposes. If it has no
|
|
86
|
+
// samples then it was actually merged.
|
|
87
|
+
// Otherwise it matched an already significant
|
|
88
|
+
// cluster.
|
|
89
|
+
unsigned Style:2; // spherical, elliptical, or mixed
|
|
90
|
+
unsigned NumSamples:28; // number of samples in the cluster
|
|
91
|
+
CLUSTER *Cluster; // ptr to cluster which made prototype
|
|
92
|
+
DISTRIBUTION *Distrib; // different distribution for each dimension
|
|
93
|
+
FLOAT32 *Mean; // prototype mean
|
|
94
|
+
FLOAT32 TotalMagnitude; // total magnitude over all dimensions
|
|
95
|
+
FLOAT32 LogMagnitude; // log base e of TotalMagnitude
|
|
96
|
+
FLOATUNION Variance; // prototype variance
|
|
97
|
+
FLOATUNION Magnitude; // magnitude of density function
|
|
98
|
+
FLOATUNION Weight; // weight of density function
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
PROTOTYPE;
|
|
103
|
+
|
|
104
|
+
typedef struct
|
|
105
|
+
{
|
|
106
|
+
inT16 SampleSize; // number of parameters per sample
|
|
107
|
+
PARAM_DESC *ParamDesc; // description of each parameter
|
|
108
|
+
inT32 NumberOfSamples; // total number of samples being clustered
|
|
109
|
+
KDTREE *KDTree; // for optimal nearest neighbor searching
|
|
110
|
+
CLUSTER *Root; // ptr to root cluster of cluster tree
|
|
111
|
+
LIST ProtoList; // list of prototypes
|
|
112
|
+
inT32 NumChar; // # of characters represented by samples
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
CLUSTERER;
|
|
117
|
+
|
|
118
|
+
typedef struct
|
|
119
|
+
{
|
|
120
|
+
inT32 NumSamples; // number of samples in list
|
|
121
|
+
inT32 MaxNumSamples; // maximum size of list
|
|
122
|
+
SAMPLE *Sample[1]; // array of ptrs to sample data structures
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
SAMPLELIST;
|
|
127
|
+
|
|
128
|
+
// low level cluster tree analysis routines.
|
|
129
|
+
#define InitSampleSearch(S,C) (((C)==NULL)?(S=NIL):(S=push(NIL,(C))))
|
|
130
|
+
|
|
131
|
+
/*--------------------------------------------------------------------------
|
|
132
|
+
Public Function Prototypes
|
|
133
|
+
--------------------------------------------------------------------------*/
|
|
134
|
+
CLUSTERER *MakeClusterer (inT16 SampleSize, PARAM_DESC ParamDesc[]);
|
|
135
|
+
|
|
136
|
+
SAMPLE *MakeSample (CLUSTERER * Clusterer, FLOAT32 Feature[], inT32 CharID);
|
|
137
|
+
|
|
138
|
+
LIST ClusterSamples(CLUSTERER *Clusterer, CLUSTERCONFIG *Config);
|
|
139
|
+
|
|
140
|
+
void FreeClusterer(CLUSTERER *Clusterer);
|
|
141
|
+
|
|
142
|
+
void FreeProtoList(LIST *ProtoList);
|
|
143
|
+
|
|
144
|
+
void FreePrototype(void *arg); //PROTOTYPE *Prototype);
|
|
145
|
+
|
|
146
|
+
CLUSTER *NextSample(LIST *SearchState);
|
|
147
|
+
|
|
148
|
+
FLOAT32 Mean(PROTOTYPE *Proto, uinT16 Dimension);
|
|
149
|
+
|
|
150
|
+
FLOAT32 StandardDeviation(PROTOTYPE *Proto, uinT16 Dimension);
|
|
151
|
+
|
|
152
|
+
inT32 MergeClusters(inT16 N, PARAM_DESC ParamDesc[], inT32 n1, inT32 n2,
|
|
153
|
+
FLOAT32 m[], FLOAT32 m1[], FLOAT32 m2[]);
|
|
154
|
+
|
|
155
|
+
//--------------Global Data Definitions and Declarations---------------------------
|
|
156
|
+
// define errors that can be trapped
|
|
157
|
+
#define ALREADYCLUSTERED 4000
|
|
158
|
+
#endif
|
|
@@ -0,0 +1,507 @@
|
|
|
1
|
+
/******************************************************************************
|
|
2
|
+
** Filename: clustertool.c
|
|
3
|
+
** Purpose: Misc. tools for use with the clustering routines
|
|
4
|
+
** Author: Dan Johnson
|
|
5
|
+
** History: 6/6/89, DSJ, Created.
|
|
6
|
+
**
|
|
7
|
+
** (c) Copyright Hewlett-Packard Company, 1988.
|
|
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
|
+
//--------------------------Include Files----------------------------------
|
|
20
|
+
#include "clusttool.h"
|
|
21
|
+
#include "const.h"
|
|
22
|
+
#include "danerror.h"
|
|
23
|
+
#include "emalloc.h"
|
|
24
|
+
#include "scanutils.h"
|
|
25
|
+
#include <stdio.h>
|
|
26
|
+
#include <math.h>
|
|
27
|
+
|
|
28
|
+
//---------------Global Data Definitions and Declarations--------------------
|
|
29
|
+
#define TOKENSIZE 80 //max size of tokens read from an input file
|
|
30
|
+
#define MAXSAMPLESIZE 65535 //max num of dimensions in feature space
|
|
31
|
+
//#define MAXBLOCKSIZE 65535 //max num of samples in a character (block size)
|
|
32
|
+
|
|
33
|
+
/*---------------------------------------------------------------------------
|
|
34
|
+
Public Code
|
|
35
|
+
-----------------------------------------------------------------------------*/
|
|
36
|
+
/** ReadSampleSize ***********************************************************
|
|
37
|
+
Parameters: File open text file to read sample size from
|
|
38
|
+
Globals: None
|
|
39
|
+
Operation: This routine reads a single integer from the specified
|
|
40
|
+
file and checks to ensure that it is between 0 and
|
|
41
|
+
MAXSAMPLESIZE.
|
|
42
|
+
Return: Sample size
|
|
43
|
+
Exceptions: ILLEGALSAMPLESIZE illegal format or range
|
|
44
|
+
History: 6/6/89, DSJ, Created.
|
|
45
|
+
******************************************************************************/
|
|
46
|
+
uinT16 ReadSampleSize(FILE *File) {
|
|
47
|
+
int SampleSize;
|
|
48
|
+
|
|
49
|
+
if ((fscanf (File, "%d", &SampleSize) != 1) ||
|
|
50
|
+
(SampleSize < 0) || (SampleSize > MAXSAMPLESIZE))
|
|
51
|
+
DoError (ILLEGALSAMPLESIZE, "Illegal sample size");
|
|
52
|
+
return (SampleSize);
|
|
53
|
+
} // ReadSampleSize
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
/** ReadParamDesc *************************************************************
|
|
57
|
+
Parameters: File open text file to read N parameter descriptions from
|
|
58
|
+
N number of parameter descriptions to read
|
|
59
|
+
Globals: None
|
|
60
|
+
Operation: This routine reads textual descriptions of sets of parameters
|
|
61
|
+
which describe the characteristics of feature dimensions.
|
|
62
|
+
Return: Pointer to an array of parameter descriptors.
|
|
63
|
+
Exceptions: ILLEGALCIRCULARSPEC
|
|
64
|
+
ILLEGALESSENTIALSPEC
|
|
65
|
+
ILLEGALMINMAXSPEC
|
|
66
|
+
History: 6/6/89, DSJ, Created.
|
|
67
|
+
******************************************************************************/
|
|
68
|
+
PARAM_DESC *ReadParamDesc(FILE *File, uinT16 N) {
|
|
69
|
+
int i;
|
|
70
|
+
PARAM_DESC *ParamDesc;
|
|
71
|
+
char Token[TOKENSIZE];
|
|
72
|
+
|
|
73
|
+
ParamDesc = (PARAM_DESC *) Emalloc (N * sizeof (PARAM_DESC));
|
|
74
|
+
for (i = 0; i < N; i++) {
|
|
75
|
+
if (fscanf (File, "%s", Token) != 1)
|
|
76
|
+
DoError (ILLEGALCIRCULARSPEC,
|
|
77
|
+
"Illegal circular/linear specification");
|
|
78
|
+
if (Token[0] == 'c')
|
|
79
|
+
ParamDesc[i].Circular = TRUE;
|
|
80
|
+
else
|
|
81
|
+
ParamDesc[i].Circular = FALSE;
|
|
82
|
+
|
|
83
|
+
if (fscanf (File, "%s", Token) != 1)
|
|
84
|
+
DoError (ILLEGALESSENTIALSPEC,
|
|
85
|
+
"Illegal essential/non-essential spec");
|
|
86
|
+
if (Token[0] == 'e')
|
|
87
|
+
ParamDesc[i].NonEssential = FALSE;
|
|
88
|
+
else
|
|
89
|
+
ParamDesc[i].NonEssential = TRUE;
|
|
90
|
+
if (fscanf (File, "%f%f", &(ParamDesc[i].Min), &(ParamDesc[i].Max)) !=
|
|
91
|
+
2)
|
|
92
|
+
DoError (ILLEGALMINMAXSPEC, "Illegal min or max specification");
|
|
93
|
+
ParamDesc[i].Range = ParamDesc[i].Max - ParamDesc[i].Min;
|
|
94
|
+
ParamDesc[i].HalfRange = ParamDesc[i].Range / 2;
|
|
95
|
+
ParamDesc[i].MidRange = (ParamDesc[i].Max + ParamDesc[i].Min) / 2;
|
|
96
|
+
}
|
|
97
|
+
return (ParamDesc);
|
|
98
|
+
} // ReadParamDesc
|
|
99
|
+
|
|
100
|
+
|
|
101
|
+
/** ReadPrototype *************************************************************
|
|
102
|
+
Parameters: File open text file to read prototype from
|
|
103
|
+
N number of dimensions used in prototype
|
|
104
|
+
Globals: None
|
|
105
|
+
Operation: This routine reads a textual description of a prototype from
|
|
106
|
+
the specified file.
|
|
107
|
+
Return: List of prototypes
|
|
108
|
+
Exceptions: ILLEGALSIGNIFICANCESPEC
|
|
109
|
+
ILLEGALSAMPLECOUNT
|
|
110
|
+
ILLEGALMEANSPEC
|
|
111
|
+
ILLEGALVARIANCESPEC
|
|
112
|
+
ILLEGALDISTRIBUTION
|
|
113
|
+
History: 6/6/89, DSJ, Created.
|
|
114
|
+
******************************************************************************/
|
|
115
|
+
PROTOTYPE *ReadPrototype(FILE *File, uinT16 N) {
|
|
116
|
+
char Token[TOKENSIZE];
|
|
117
|
+
int Status;
|
|
118
|
+
PROTOTYPE *Proto;
|
|
119
|
+
int SampleCount;
|
|
120
|
+
int i;
|
|
121
|
+
|
|
122
|
+
if ((Status = fscanf (File, "%s", Token)) == 1) {
|
|
123
|
+
Proto = (PROTOTYPE *) Emalloc (sizeof (PROTOTYPE));
|
|
124
|
+
Proto->Cluster = NULL;
|
|
125
|
+
if (Token[0] == 's')
|
|
126
|
+
Proto->Significant = TRUE;
|
|
127
|
+
else
|
|
128
|
+
Proto->Significant = FALSE;
|
|
129
|
+
|
|
130
|
+
Proto->Style = ReadProtoStyle (File);
|
|
131
|
+
|
|
132
|
+
if ((fscanf (File, "%d", &SampleCount) != 1) || (SampleCount < 0))
|
|
133
|
+
DoError (ILLEGALSAMPLECOUNT, "Illegal sample count");
|
|
134
|
+
Proto->NumSamples = SampleCount;
|
|
135
|
+
|
|
136
|
+
Proto->Mean = ReadNFloats (File, N, NULL);
|
|
137
|
+
if (Proto->Mean == NULL)
|
|
138
|
+
DoError (ILLEGALMEANSPEC, "Illegal prototype mean");
|
|
139
|
+
|
|
140
|
+
switch (Proto->Style) {
|
|
141
|
+
case spherical:
|
|
142
|
+
if (ReadNFloats (File, 1, &(Proto->Variance.Spherical)) == NULL)
|
|
143
|
+
DoError (ILLEGALVARIANCESPEC, "Illegal prototype variance");
|
|
144
|
+
Proto->Magnitude.Spherical =
|
|
145
|
+
1.0 / sqrt ((double) (2.0 * PI * Proto->Variance.Spherical));
|
|
146
|
+
Proto->TotalMagnitude =
|
|
147
|
+
pow (Proto->Magnitude.Spherical, (float) N);
|
|
148
|
+
Proto->LogMagnitude = log ((double) Proto->TotalMagnitude);
|
|
149
|
+
Proto->Weight.Spherical = 1.0 / Proto->Variance.Spherical;
|
|
150
|
+
Proto->Distrib = NULL;
|
|
151
|
+
break;
|
|
152
|
+
case elliptical:
|
|
153
|
+
Proto->Variance.Elliptical = ReadNFloats (File, N, NULL);
|
|
154
|
+
if (Proto->Variance.Elliptical == NULL)
|
|
155
|
+
DoError (ILLEGALVARIANCESPEC, "Illegal prototype variance");
|
|
156
|
+
Proto->Magnitude.Elliptical =
|
|
157
|
+
(FLOAT32 *) Emalloc (N * sizeof (FLOAT32));
|
|
158
|
+
Proto->Weight.Elliptical =
|
|
159
|
+
(FLOAT32 *) Emalloc (N * sizeof (FLOAT32));
|
|
160
|
+
Proto->TotalMagnitude = 1.0;
|
|
161
|
+
for (i = 0; i < N; i++) {
|
|
162
|
+
Proto->Magnitude.Elliptical[i] =
|
|
163
|
+
1.0 /
|
|
164
|
+
sqrt ((double) (2.0 * PI * Proto->Variance.Elliptical[i]));
|
|
165
|
+
Proto->Weight.Elliptical[i] =
|
|
166
|
+
1.0 / Proto->Variance.Elliptical[i];
|
|
167
|
+
Proto->TotalMagnitude *= Proto->Magnitude.Elliptical[i];
|
|
168
|
+
}
|
|
169
|
+
Proto->LogMagnitude = log ((double) Proto->TotalMagnitude);
|
|
170
|
+
Proto->Distrib = NULL;
|
|
171
|
+
break;
|
|
172
|
+
case mixed:
|
|
173
|
+
Proto->Distrib =
|
|
174
|
+
(DISTRIBUTION *) Emalloc (N * sizeof (DISTRIBUTION));
|
|
175
|
+
for (i = 0; i < N; i++) {
|
|
176
|
+
if (fscanf (File, "%s", Token) != 1)
|
|
177
|
+
DoError (ILLEGALDISTRIBUTION,
|
|
178
|
+
"Illegal prototype distribution");
|
|
179
|
+
switch (Token[0]) {
|
|
180
|
+
case 'n':
|
|
181
|
+
Proto->Distrib[i] = normal;
|
|
182
|
+
break;
|
|
183
|
+
case 'u':
|
|
184
|
+
Proto->Distrib[i] = uniform;
|
|
185
|
+
break;
|
|
186
|
+
case 'r':
|
|
187
|
+
Proto->Distrib[i] = D_random;
|
|
188
|
+
break;
|
|
189
|
+
default:
|
|
190
|
+
DoError (ILLEGALDISTRIBUTION,
|
|
191
|
+
"Illegal prototype distribution");
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
Proto->Variance.Elliptical = ReadNFloats (File, N, NULL);
|
|
195
|
+
if (Proto->Variance.Elliptical == NULL)
|
|
196
|
+
DoError (ILLEGALVARIANCESPEC, "Illegal prototype variance");
|
|
197
|
+
Proto->Magnitude.Elliptical =
|
|
198
|
+
(FLOAT32 *) Emalloc (N * sizeof (FLOAT32));
|
|
199
|
+
Proto->Weight.Elliptical =
|
|
200
|
+
(FLOAT32 *) Emalloc (N * sizeof (FLOAT32));
|
|
201
|
+
Proto->TotalMagnitude = 1.0;
|
|
202
|
+
for (i = 0; i < N; i++) {
|
|
203
|
+
switch (Proto->Distrib[i]) {
|
|
204
|
+
case normal:
|
|
205
|
+
Proto->Magnitude.Elliptical[i] = 1.0 /
|
|
206
|
+
sqrt ((double)
|
|
207
|
+
(2.0 * PI * Proto->Variance.Elliptical[i]));
|
|
208
|
+
Proto->Weight.Elliptical[i] =
|
|
209
|
+
1.0 / Proto->Variance.Elliptical[i];
|
|
210
|
+
break;
|
|
211
|
+
case uniform:
|
|
212
|
+
case D_random:
|
|
213
|
+
Proto->Magnitude.Elliptical[i] = 1.0 /
|
|
214
|
+
(2.0 * Proto->Variance.Elliptical[i]);
|
|
215
|
+
break;
|
|
216
|
+
}
|
|
217
|
+
Proto->TotalMagnitude *= Proto->Magnitude.Elliptical[i];
|
|
218
|
+
}
|
|
219
|
+
Proto->LogMagnitude = log ((double) Proto->TotalMagnitude);
|
|
220
|
+
break;
|
|
221
|
+
}
|
|
222
|
+
return (Proto);
|
|
223
|
+
}
|
|
224
|
+
else if (Status == EOF)
|
|
225
|
+
return (NULL);
|
|
226
|
+
else {
|
|
227
|
+
DoError (ILLEGALSIGNIFICANCESPEC, "Illegal significance specification");
|
|
228
|
+
return (NULL);
|
|
229
|
+
}
|
|
230
|
+
} // ReadPrototype
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
/* ReadProtoStyle *************************************************************
|
|
234
|
+
Parameters: File open text file to read prototype style from
|
|
235
|
+
Globals: None
|
|
236
|
+
Operation: This routine reads an single token from the specified
|
|
237
|
+
text file and interprets it as a prototype specification.
|
|
238
|
+
Return: Prototype style read from text file
|
|
239
|
+
Exceptions: ILLEGALSTYLESPEC illegal prototype style specification
|
|
240
|
+
History: 6/8/89, DSJ, Created.
|
|
241
|
+
*******************************************************************************/
|
|
242
|
+
PROTOSTYLE ReadProtoStyle(FILE *File) {
|
|
243
|
+
char Token[TOKENSIZE];
|
|
244
|
+
PROTOSTYLE Style;
|
|
245
|
+
|
|
246
|
+
if (fscanf (File, "%s", Token) != 1)
|
|
247
|
+
DoError (ILLEGALSTYLESPEC, "Illegal prototype style specification");
|
|
248
|
+
switch (Token[0]) {
|
|
249
|
+
case 's':
|
|
250
|
+
Style = spherical;
|
|
251
|
+
break;
|
|
252
|
+
case 'e':
|
|
253
|
+
Style = elliptical;
|
|
254
|
+
break;
|
|
255
|
+
case 'm':
|
|
256
|
+
Style = mixed;
|
|
257
|
+
break;
|
|
258
|
+
case 'a':
|
|
259
|
+
Style = automatic;
|
|
260
|
+
break;
|
|
261
|
+
default:
|
|
262
|
+
Style = elliptical;
|
|
263
|
+
DoError (ILLEGALSTYLESPEC, "Illegal prototype style specification");
|
|
264
|
+
}
|
|
265
|
+
return (Style);
|
|
266
|
+
} // ReadProtoStyle
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
/** ReadNFloats *************************************************************
|
|
270
|
+
Parameters: File open text file to read floats from
|
|
271
|
+
N number of floats to read
|
|
272
|
+
Buffer pointer to buffer to place floats into
|
|
273
|
+
Globals: None
|
|
274
|
+
Operation: This routine reads N floats from the specified text file
|
|
275
|
+
and places them into Buffer. If Buffer is NULL, a buffer
|
|
276
|
+
is created and passed back to the caller. If EOF is
|
|
277
|
+
encountered before any floats can be read, NULL is
|
|
278
|
+
returned.
|
|
279
|
+
Return: Pointer to buffer holding floats or NULL if EOF
|
|
280
|
+
Exceptions: ILLEGALFLOAT
|
|
281
|
+
History: 6/6/89, DSJ, Created.
|
|
282
|
+
******************************************************************************/
|
|
283
|
+
FLOAT32 *
|
|
284
|
+
ReadNFloats (FILE * File, uinT16 N, FLOAT32 Buffer[]) {
|
|
285
|
+
int i;
|
|
286
|
+
int NumFloatsRead;
|
|
287
|
+
|
|
288
|
+
if (Buffer == NULL)
|
|
289
|
+
Buffer = (FLOAT32 *) Emalloc (N * sizeof (FLOAT32));
|
|
290
|
+
|
|
291
|
+
for (i = 0; i < N; i++) {
|
|
292
|
+
NumFloatsRead = fscanf (File, "%f", &(Buffer[i]));
|
|
293
|
+
if (NumFloatsRead != 1) {
|
|
294
|
+
if ((NumFloatsRead == EOF) && (i == 0))
|
|
295
|
+
return (NULL);
|
|
296
|
+
else
|
|
297
|
+
DoError (ILLEGALFLOAT, "Illegal float specification");
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
return (Buffer);
|
|
301
|
+
} // ReadNFloats
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
/** WriteParamDesc ************************************************************
|
|
305
|
+
Parameters: File open text file to write param descriptors to
|
|
306
|
+
N number of param descriptors to write
|
|
307
|
+
ParamDesc array of param descriptors to write
|
|
308
|
+
Globals: None
|
|
309
|
+
Operation: This routine writes an array of dimension descriptors to
|
|
310
|
+
the specified text file.
|
|
311
|
+
Return: None
|
|
312
|
+
Exceptions: None
|
|
313
|
+
History: 6/6/89, DSJ, Created.
|
|
314
|
+
******************************************************************************/
|
|
315
|
+
void
|
|
316
|
+
WriteParamDesc (FILE * File, uinT16 N, PARAM_DESC ParamDesc[]) {
|
|
317
|
+
int i;
|
|
318
|
+
|
|
319
|
+
for (i = 0; i < N; i++) {
|
|
320
|
+
if (ParamDesc[i].Circular)
|
|
321
|
+
fprintf (File, "circular ");
|
|
322
|
+
else
|
|
323
|
+
fprintf (File, "linear ");
|
|
324
|
+
|
|
325
|
+
if (ParamDesc[i].NonEssential)
|
|
326
|
+
fprintf (File, "non-essential ");
|
|
327
|
+
else
|
|
328
|
+
fprintf (File, "essential ");
|
|
329
|
+
|
|
330
|
+
fprintf (File, "%10.6f %10.6f\n", ParamDesc[i].Min, ParamDesc[i].Max);
|
|
331
|
+
}
|
|
332
|
+
} // WriteParamDesc
|
|
333
|
+
|
|
334
|
+
|
|
335
|
+
/** WritePrototype ************************************************************
|
|
336
|
+
Parameters: File open text file to write prototype to
|
|
337
|
+
N number of dimensions in feature space
|
|
338
|
+
Proto prototype to write out
|
|
339
|
+
Globals: None
|
|
340
|
+
Operation: This routine writes a textual description of a prototype
|
|
341
|
+
to the specified text file.
|
|
342
|
+
Return: None
|
|
343
|
+
Exceptions: None
|
|
344
|
+
History: 6/12/89, DSJ, Created.
|
|
345
|
+
*******************************************************************************/
|
|
346
|
+
void WritePrototype(FILE *File, uinT16 N, PROTOTYPE *Proto) {
|
|
347
|
+
int i;
|
|
348
|
+
|
|
349
|
+
if (Proto->Significant)
|
|
350
|
+
fprintf (File, "significant ");
|
|
351
|
+
else
|
|
352
|
+
fprintf (File, "insignificant ");
|
|
353
|
+
WriteProtoStyle (File, (PROTOSTYLE) Proto->Style);
|
|
354
|
+
fprintf (File, "%6d\n\t", Proto->NumSamples);
|
|
355
|
+
WriteNFloats (File, N, Proto->Mean);
|
|
356
|
+
fprintf (File, "\t");
|
|
357
|
+
|
|
358
|
+
switch (Proto->Style) {
|
|
359
|
+
case spherical:
|
|
360
|
+
WriteNFloats (File, 1, &(Proto->Variance.Spherical));
|
|
361
|
+
break;
|
|
362
|
+
case elliptical:
|
|
363
|
+
WriteNFloats (File, N, Proto->Variance.Elliptical);
|
|
364
|
+
break;
|
|
365
|
+
case mixed:
|
|
366
|
+
for (i = 0; i < N; i++)
|
|
367
|
+
switch (Proto->Distrib[i]) {
|
|
368
|
+
case normal:
|
|
369
|
+
fprintf (File, " %9s", "normal");
|
|
370
|
+
break;
|
|
371
|
+
case uniform:
|
|
372
|
+
fprintf (File, " %9s", "uniform");
|
|
373
|
+
break;
|
|
374
|
+
case D_random:
|
|
375
|
+
fprintf (File, " %9s", "random");
|
|
376
|
+
break;
|
|
377
|
+
}
|
|
378
|
+
fprintf (File, "\n\t");
|
|
379
|
+
WriteNFloats (File, N, Proto->Variance.Elliptical);
|
|
380
|
+
}
|
|
381
|
+
} // WritePrototype
|
|
382
|
+
|
|
383
|
+
|
|
384
|
+
/** WriteNFloats ***********************************************************
|
|
385
|
+
Parameters: File open text file to write N floats to
|
|
386
|
+
N number of floats to write
|
|
387
|
+
Array array of floats to write
|
|
388
|
+
Globals: None
|
|
389
|
+
Operation: This routine writes a text representation of N floats from
|
|
390
|
+
an array to a file. All of the floats are placed on one line.
|
|
391
|
+
Return: None
|
|
392
|
+
Exceptions: None
|
|
393
|
+
History: 6/6/89, DSJ, Created.
|
|
394
|
+
****************************************************************************/
|
|
395
|
+
void
|
|
396
|
+
WriteNFloats (FILE * File, uinT16 N, FLOAT32 Array[]) {
|
|
397
|
+
int i;
|
|
398
|
+
|
|
399
|
+
for (i = 0; i < N; i++)
|
|
400
|
+
fprintf (File, " %9.6f", Array[i]);
|
|
401
|
+
fprintf (File, "\n");
|
|
402
|
+
} // WriteNFloats
|
|
403
|
+
|
|
404
|
+
|
|
405
|
+
/** WriteProtoSyle **********************************************************
|
|
406
|
+
Parameters: File open text file to write prototype style to
|
|
407
|
+
ProtoStyle prototype style to write
|
|
408
|
+
Globals: None
|
|
409
|
+
Operation: This routine writes to the specified text file a word
|
|
410
|
+
which represents the ProtoStyle. It does not append
|
|
411
|
+
a carriage return to the end.
|
|
412
|
+
Return: None
|
|
413
|
+
Exceptions: None
|
|
414
|
+
History: 6/8/89, DSJ, Created.
|
|
415
|
+
****************************************************************************/
|
|
416
|
+
void WriteProtoStyle(FILE *File, PROTOSTYLE ProtoStyle) {
|
|
417
|
+
switch (ProtoStyle) {
|
|
418
|
+
case spherical:
|
|
419
|
+
fprintf (File, "spherical");
|
|
420
|
+
break;
|
|
421
|
+
case elliptical:
|
|
422
|
+
fprintf (File, "elliptical");
|
|
423
|
+
break;
|
|
424
|
+
case mixed:
|
|
425
|
+
fprintf (File, "mixed");
|
|
426
|
+
break;
|
|
427
|
+
case automatic:
|
|
428
|
+
fprintf (File, "automatic");
|
|
429
|
+
break;
|
|
430
|
+
}
|
|
431
|
+
} // WriteProtoStyle
|
|
432
|
+
|
|
433
|
+
/*---------------------------------------------------------------------------*/
|
|
434
|
+
void WriteProtoList(
|
|
435
|
+
FILE *File,
|
|
436
|
+
uinT16 N,
|
|
437
|
+
PARAM_DESC ParamDesc[],
|
|
438
|
+
LIST ProtoList,
|
|
439
|
+
BOOL8 WriteSigProtos,
|
|
440
|
+
BOOL8 WriteInsigProtos)
|
|
441
|
+
|
|
442
|
+
/*
|
|
443
|
+
** Parameters:
|
|
444
|
+
** File open text file to write prototypes to
|
|
445
|
+
** N number of dimensions in feature space
|
|
446
|
+
** ParamDesc descriptions for each dimension
|
|
447
|
+
** ProtoList list of prototypes to be written
|
|
448
|
+
** WriteSigProtos TRUE to write out significant prototypes
|
|
449
|
+
** WriteInsigProtos TRUE to write out insignificants
|
|
450
|
+
** Globals:
|
|
451
|
+
** None
|
|
452
|
+
** Operation:
|
|
453
|
+
** This routine writes a textual description of each prototype
|
|
454
|
+
** in the prototype list to the specified file. It also
|
|
455
|
+
** writes a file header which includes the number of dimensions
|
|
456
|
+
** in feature space and the descriptions for each dimension.
|
|
457
|
+
** Return:
|
|
458
|
+
** None
|
|
459
|
+
** Exceptions:
|
|
460
|
+
** None
|
|
461
|
+
** History:
|
|
462
|
+
** 6/12/89, DSJ, Created.
|
|
463
|
+
*/
|
|
464
|
+
|
|
465
|
+
{
|
|
466
|
+
PROTOTYPE *Proto;
|
|
467
|
+
|
|
468
|
+
/* write file header */
|
|
469
|
+
fprintf(File,"%0d\n",N);
|
|
470
|
+
WriteParamDesc(File,N,ParamDesc);
|
|
471
|
+
|
|
472
|
+
/* write prototypes */
|
|
473
|
+
iterate(ProtoList)
|
|
474
|
+
{
|
|
475
|
+
Proto = (PROTOTYPE *) first_node ( ProtoList );
|
|
476
|
+
if (( Proto->Significant && WriteSigProtos ) ||
|
|
477
|
+
( ! Proto->Significant && WriteInsigProtos ) )
|
|
478
|
+
WritePrototype( File, N, Proto );
|
|
479
|
+
}
|
|
480
|
+
} /* WriteProtoList */
|
|
481
|
+
|
|
482
|
+
/** UniformRandomNumber ********************************************************
|
|
483
|
+
Parameters: MMin lower range of uniform distribution
|
|
484
|
+
MMax upper range of uniform distribution
|
|
485
|
+
Globals: None
|
|
486
|
+
Operation: This routine computes a random number which comes from a
|
|
487
|
+
uniform distribution over the range from MMin to MMax.
|
|
488
|
+
Return: Uniform random number
|
|
489
|
+
Exceptions: None
|
|
490
|
+
History: 6/6/89, DSJ, Created.
|
|
491
|
+
*******************************************************************************/
|
|
492
|
+
FLOAT32 UniformRandomNumber(FLOAT32 MMin, FLOAT32 MMax) {
|
|
493
|
+
double fake_drand48();
|
|
494
|
+
FLOAT32 RandomNumber;
|
|
495
|
+
|
|
496
|
+
RandomNumber = fake_drand48 ();
|
|
497
|
+
return (MMin + (RandomNumber * (MMax - MMin)));
|
|
498
|
+
} // UniformRandomNumber
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
/** drand48 *************************************************************
|
|
502
|
+
Cheap replacement for drand48 which is not available on the PC.
|
|
503
|
+
**********************************************************************/
|
|
504
|
+
|
|
505
|
+
double fake_drand48() {
|
|
506
|
+
return rand () / (RAND_MAX + 1.0);
|
|
507
|
+
}
|