version-notes.html 92 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724
  1. <html>
  2. <body BGCOLOR=FFFFE4>
  3. <!-- JS Window Closer -----
  4. <form>
  5. <center>
  6. <input type="button" onclick="window.close();" value="Close this window">
  7. </center>
  8. </form>
  9. ----- JS Window Closer -->
  10. <!-- Creative Commons License -->
  11. <a rel="license" href="http://creativecommons.org/licenses/by/2.5/"><img alt="Creative Commons License" border="0" src="http://creativecommons.org/images/public/somerights20.gif" /></a>
  12. This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by/2.5/">Creative Commons Attribution 2.5 License</a>.
  13. <!-- /Creative Commons License -->
  14. <!--
  15. <rdf:RDF xmlns="http://web.resource.org/cc/"
  16. xmlns:dc="http://purl.org/dc/elements/1.1/"
  17. xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
  18. <Work rdf:about="">
  19. <dc:title>leptonica</dc:title>
  20. <dc:date>2001</dc:date>
  21. <dc:description>An open source C library for efficient image processing and image analysis operations</dc:description>
  22. <dc:creator><Agent>
  23. <dc:title>Dan S. Bloomberg</dc:title>
  24. </Agent></dc:creator>
  25. <dc:rights><Agent>
  26. <dc:title>Dan S. Bloomberg</dc:title>
  27. </Agent></dc:rights>
  28. <dc:type rdf:resource="http://purl.org/dc/dcmitype/Text" />
  29. <dc:source rdf:resource="www.leptonica.com"/>
  30. <license rdf:resource="http://creativecommons.org/licenses/by/2.5/" />
  31. </Work>
  32. <License rdf:about="http://creativecommons.org/licenses/by/2.5/">
  33. <permits rdf:resource="http://web.resource.org/cc/Reproduction" />
  34. <permits rdf:resource="http://web.resource.org/cc/Distribution" />
  35. <requires rdf:resource="http://web.resource.org/cc/Notice" />
  36. <requires rdf:resource="http://web.resource.org/cc/Attribution" />
  37. <permits rdf:resource="http://web.resource.org/cc/DerivativeWorks" />
  38. </License>
  39. </rdf:RDF>
  40. -->
  41. <pre>
  42. /*====================================================================*
  43. - Copyright (C) 2001 Leptonica. All rights reserved.
  44. -
  45. - Redistribution and use in source and binary forms, with or without
  46. - modification, are permitted provided that the following conditions
  47. - are met:
  48. - 1. Redistributions of source code must retain the above copyright
  49. - notice, this list of conditions and the following disclaimer.
  50. - 2. Redistributions in binary form must reproduce the above
  51. - copyright notice, this list of conditions and the following
  52. - disclaimer in the documentation and/or other materials
  53. - provided with the distribution.
  54. -
  55. - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  56. - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  57. - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  58. - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY
  59. - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  60. - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
  61. - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
  62. - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
  63. - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
  64. - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
  65. - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  66. *====================================================================*/
  67. </pre>
  68. <h2 align=center>Version Notes for Leptonica</h2>
  69. <h3 align=center>3 Jan 2024</h3>
  70. <hr>
  71. <h2 align=center> <IMG SRC="moller52.jpg" border=1 ALIGN_MIDDLE> </h2>
  72. <hr>
  73. <p>
  74. Note: The following are highlights of the changes in each version.
  75. They are <i>not</i> a complete listing of the modifications.
  76. <pre>
  77. 1.85.0 Oct 16, 2024
  78. * Use wrapper callSystemDebug() instead of system() in programs.
  79. * Fixed Issue #730: artifacts and bad compression with pixWriteJp2k.
  80. Results are now identical with ImageMagick convert (to jp2).
  81. * With PR732, Anton Tykhyy made pix(Read,Write)MemJp2k work with
  82. direct memory access using openjpeg opj_stream functions. This
  83. removes need for temp file on Windows when writing to/from memory.
  84. * Achieve consistency with fclose() in library and lept_fclose()
  85. in progs. Ditto for lept_free, lept_calloc, lept_fopen(), etc.
  86. * Fix generation of bad colormap indices in
  87. jbcorrelation and jbrankhaus
  88. * Fixed coverity scan issues.
  89. * Added findpattern2_reg.c to show generation of sels and their use.
  90. * Added misctest2.c to show crop and clean page functions.
  91. * Added page crop option for removing noise on left and right sides.
  92. * Added page crop option to allow printing to full width of paper.
  93. * Added page crop option to extract page within larger black image.
  94. * Added renderpdf.c to library, to render pdfs as page images with
  95. a specified resolution.
  96. * Modified cleanpdf.c to use l_pdfRenderFiles().
  97. * Issues #750, #752: problems in bmpio.c with taking address of
  98. packed member.
  99. * Source files changed: adaptmap.c affinecompose.c,
  100. bmpio.c, boxbasic.c, colormap.c, compare.c,
  101. dewarp1.c, dnabasic.c, fpix1.c, gifio.c,
  102. gplot.c, grayquant.c, jbclass.c, jp2kheader.c,
  103. jp2kheaderstub.c, jp2kio.c, jpegio.c, libversions.c,
  104. morphseq.c, numabasic.c, pageseg.c partify.c, pdfapp.c,
  105. pdfio2.c, pix2.c, pixabasic.c, pixcomp.c, pixconv.c,
  106. pnmio.c, psio2.c, ptabasic.c,
  107. readfile.c, recogbasic.c, renderpdf.c,
  108. sarray1.c, sel1.c, utils2.c, writefile.c,
  109. allheaders.h, environ.h
  110. * Prog files changed: alltests_reg.c, binmorph3_reg.c,
  111. blend2_reg.c, blend4_reg.c cleanpdf.c, compressedpdf.c, croppdf.c,
  112. findpattern_reg.c, findpattern1_reg.c findpattern2_reg.c,
  113. htmlviewer.c, jbcorrelation.c, jbrankhaus.c,
  114. jp2kio_reg.c, libre_makefigs.c, misctest1.c, misctest2.c,
  115. pdfio2_reg.c, printimage.c, printsplitimage.c,
  116. printtiff.c, psioseg_reg.c, splitpdf.c,
  117. string_reg.c, tiffpdftest.c, xtractprotos.c
  118. 1.84.1 Jan 3, 2024
  119. * Remove support for openjpeg versions < 2.1.
  120. * Improve error handling for stringLength() and stringCat(), and
  121. add tests in prog/string_reg.
  122. * Source files changed: blend.c, dnafunc1.c, jp2kio.c, pageseg.c,
  123. partify.c, pix1.c, ptafunc2.c, sarray2.c, utils2.c
  124. * Prog files changed: boxa3_reg.c, string_reg.c, writetext_reg.c,
  125. deskew_it.c
  126. 1.84.0 Dec 23, 2023
  127. * Add getPdfPageCount() to find the number of pages in a pdf file.
  128. * Add getPdfPageSizes() and getPdfMediaBoxSizes() to find the
  129. information necessary to render images properly. Modify cleanpdf.c
  130. and concatpdf.c to use this information.
  131. * Add prog/splitpdf.c to split a pdf file into nearly equal page sets.
  132. * Add ability to read and write rgba in bmp format, and
  133. test in ioformats_reg.
  134. * Add regression test prog/partition_reg.c
  135. * Change the autotools library name from liblept to libleptonica,
  136. to be consistent with the cmake library name. (Apologies to Jeff!)
  137. * Add tests for 24 bit pix reading and writing in bmp and png in
  138. ioformats_reg. Test new pixDisplayDiff() for visualizing diffs.
  139. * Allow prog/concatpdf to output pdf with tiffg4 encoding and with
  140. mixed tiffg4 and DCT encoding depending on image color content.
  141. * Rename prog/concatpdf --> prog/compresspdf
  142. * Put image processing and generation of output pdf from compresspdf
  143. and cleanpdf into functions in new files: pdfapp.c, pdfappstub.c.
  144. * Add versatile function for cropping an image and filling to
  145. page size, along with prog/croppdf to do this on pdf file.
  146. 1.83.0 Dec 20, 2022
  147. * Simplify setting the title of pdf files.
  148. * Catch tiff failure to open stream in fopenTiffMemStream()
  149. * Check for POSIX functions fstatat() and dirfd() before use.
  150. * In prog/cleanpdf: do not allow threshold to exceed 190. Make all
  151. parameters required; do not use default values for invalid parameters.
  152. * In prog/concatpdf: add input param for title; add jpeg quality factor
  153. * Fix flaky hash_reg test on i686: sets generated from SelectRange()
  154. can depend slightly on platform.
  155. * Convenience function for adding multiple black and white borders.
  156. * Fix oss-fuzz issue 42202: underined shift in l_convertCharstrToInt().
  157. * Fix oss-fuzz issue 43841: made pixCountPixels() more efficient.
  158. * Fix oss-fuzz issue 44008: pixCountArbInRect() used wrong depth.
  159. * Always return tiff resolution of 0 (unknown) if not set.
  160. * Simplify operations on pix memory to help avoid mem leaks
  161. * Make bmp non-support of 32-bit bmp (rgba) files explicit.
  162. * Improve tiff read resolution conversion by rounding.
  163. * Use stdatomic.h to make cloning string safe.
  164. Remove all *GetRefcount() and *ChangeRefcount() accessors.
  165. * Replace procName and mainName strings by __func__.
  166. * Remove information about fields in many structs from the public
  167. interface allheaders.h, instead putting them in internal files
  168. pix_internal.h, array_internal.h and ccbord_internal.h.
  169. * Increase the .so number from 5.4.0 to 6.0.0.
  170. * Rename the autotools generated libraries from liblept to libleptonica
  171. * Fix potential memory leaks from recogAverageSamples() and
  172. recogDebugAverages() by not destroying a recog.
  173. 1.82.0 Sept 22, 2021
  174. * Fix issue-585: reading tiff rgb with tiffbpl = 1.5 * packedbpl.
  175. * Fix issue-586: failure to properly wrap tiff-g4 in pdf without
  176. transcoding. The fix is to do transcoding for tiff-g4, as was
  177. done before April 2021.
  178. 1.81.1 June 11, 2021
  179. * Added choice of codec (JP2 or J2K) when writing jp2k files.
  180. * Fix use of hashmap with key based on dna.
  181. 1.81.0 June 6, 2021
  182. * Fixed problems with tiff pdf wrapping photometry.
  183. * Fixed scaling issues in prog/cleanpdf for printing.
  184. * New progs: tiffpdftest, hashtest
  185. * Fixed uninitialized data error in pixAddBorderGeneral() and
  186. pixRemoveBorderGeneral()
  187. * Rewrote Numa functions that discretize into bins. Have
  188. binning by both sorting and histogram.
  189. * Rewrote and simplified pixGetRankColorArray() and pixGetBinnedColor().
  190. * Added tests to prog/rankbin_reg.c.
  191. * Simplified fpixCopy() and dpixCopy(), and functions that use them.
  192. * Check input for bilateral transforms.
  193. * Add function for splitting a file evenly by lines.
  194. * Check input for getFilenamesInDirectory()
  195. * Many new fuzzers.
  196. * Use size_t for all size inputs to ascii85 encoding/decoding
  197. * New regression tests: encoding_reg.c, binmorph6_reg.c,
  198. flipdetect_reg.c
  199. * Reworked concatpdf for generality, using the Poppler package.
  200. * Removed dwa flipdetection from the library. All the dwa code
  201. is now in flipdetectdwa.c.notused. Likewise prog/flipselgen.c
  202. is retained for completeness, renamed flipselgen.c.notused,
  203. and is not compiled.
  204. * Added hashmap utility (hashmap.c, hashmap.h).
  205. * Removed functions using dnahash on strings, pts and doubles.
  206. * Improved the speed of hashing for strings and doubles.
  207. * Added function for tiling images in pairs for comparison.
  208. * Added null terminations to serialized strings written to memory,
  209. preventing buffer overrun by strlen() [fixed by Stefan Weil].
  210. * No longer use "NoInit" versions of pix creation in leptonica.
  211. because they risk reading uninitialized data. These functions
  212. remain in the library because they are in use in applications.
  213. * Add two composite binarization functions, from prog/binarize_set.
  214. * Giulio Lunati fixed pnm reading to work with stdin input.
  215. * Removed several of the boxa compare and modify functions.
  216. * Implemented reading jpeg200 data encded in j2k "codestream" format.
  217. Can now read data in both jp2 and j2k.
  218. 1.80.0 28 July 2020
  219. * Improve bmp handling of 1 bpp images and sanity checking of params.
  220. * Add function to display all rgb gamut colors
  221. * in Makefile.am, use option serial-tests to avoid races in testing
  222. * Make m4 subdirectory and add ax_split_version.m4 there
  223. * Simple function for hue-invariant mapping (pixMapWithInvariantHue)
  224. * Fixed bug in limit of ptra size when used for sorting by bins.
  225. * Use hashmap to count pixel colors in RGB(A) images.
  226. * Convert hashtest program to regression test hash_reg.
  227. * Convert croptest program to regression test crop_reg.
  228. * New color segmentation by region growing (colorfill.c)
  229. * New regression tests: colorfill_reg, circle_reg, ccbord_reg.
  230. * Set maxima for all allocations for common leptonica data structures.
  231. * Don't fail when downscaling 2, 4, 8, and 32 bpp images, even
  232. to one pixel, invoking pixScaleSmooth().
  233. * New functions that select 1 bpp components based on their area.
  234. * Incremental addition to sorted array of numbers.
  235. * new prog/fuzzing directory for oss-fuzz based fuzzing programs
  236. * use of pixcmapIsValid() with extra argument to determine validity
  237. with the pix it is attached to.
  238. * Use lept_stderr() in all programs in the prog directory.
  239. * New program rasteroptest() for thorough testing of rasterop functions.
  240. * Removed the pixSaveTiled*() functions
  241. * Stubbed pixDisplayWrite(). Last used in tesseract 3.04.01 (2/2016).
  242. 1.79.0 1 Jan 2020
  243. * Clean up auto-generation of files; removed 'register'
  244. * Some fixes for issues identified by fuzzer
  245. * New source files: checkerboard.c
  246. * New programs: replacebytes.c, webpanimio_reg.c, partifytest.c,
  247. rectangle_reg.c, lowsat_reg.c, rotate_it.c, scale_it.c, dewarp_it.c,
  248. pdfio1_reg.c, pdfio2_reg.c, checkerboard_reg.c, underlinetest.c.
  249. * Convert to standard reg test: heap_reg.c, pixa1_reg.c, smallpix_reg.c
  250. * Improve data checking when reading image file headers
  251. (pnm, png, jpeg, tiff)
  252. * Fix some bugs in pnm reading
  253. * Fix inconsistencies with the encoding type flags in pdf writing
  254. * Allow tiff to write images with colormaps
  255. * Fix errors in PS code; made some functions static
  256. * Add code for animated webp (requires webp mux and demux libraries)
  257. * Add "partify" application for separating parts in a musical score
  258. * Enable tif read/write of gray+alpha and rgba; filter out tiff
  259. pixels that are not uint and compression by tile
  260. * Apply consistent formatting of static const variables
  261. * Add programs for scaling, rotation and deskew, named dewkew_it,
  262. rotate_it and scale_it, for useful operations on arbitrary images.
  263. * Convert pdfiotest program to two regression tests: pdfio1_reg
  264. and pdfio2_reg.
  265. * Remove all use of strncat; use stringCat().
  266. * New functions from removing outliers in sequences of boxes.
  267. * Generalize pixAverageInRect(): mask, region and range filters,
  268. and subsampling. New pixAverageInRectRGB().
  269. * Fix int overflow bug in pixMedianCut(); required new heap accessor.
  270. * New pixMultiplyGray() allows pix to be multiplied by an array (or
  271. another pix)
  272. * Better routines for counting color.
  273. * Lossless conversion for RGB to cmap with not more than 256 colors.
  274. * New histo based global thresholding: pixThresholdByHisto().
  275. * Allow most reg tests to run even if external libraries are not
  276. available.
  277. * New one-line gplot functions that return a pix.
  278. * New application to find where corners meet in a checkerboard.
  279. * Add utility functions for painting through mask in cmap pix,
  280. creating a hit-miss sela from a color pix, equality of two pta.
  281. * Proper handling of 1 bpp colormap tiffs: remove when reading,
  282. preserve when writing.
  283. * Deprecate three pixSaveTile*() functions; removed all calls to
  284. these from the library and progs.
  285. * Include auto_config.h explicitly in all src and prog files.
  286. * Improve input data checking for bmp files.
  287. * Added pixAutoPhotoinvert() for tesseract, to automatically photo-
  288. invert text regions where the background is black and text is white.
  289. 1.78.0 21 Mar 19
  290. * Various improvements in handling boxa sequences and transforms.
  291. * New regression tests: boxa4_reg, string_reg
  292. * New function for copying a pix, filtered by a boxa.
  293. * Modify histogram method for image comparison.
  294. * More careful attention to invalid boxes in box geometry functions.
  295. * Better string and array functions for search and replace.
  296. * Convenience functions for generating simple masks.
  297. * Allow pdf writing of jp2k images, in full generality.
  298. * Allow writing compressed ps images for printing.
  299. * Modified enum comments to include a suggested enum name.
  300. * New program: imagetops
  301. 1.77.0 14 Dec 18
  302. Here is the current status of CVE issues with leptonica; see
  303. https://security-tracker.debian.org/tracker/source-package/leptonlib
  304. * CVE-2018-7442: potential injection attack because '/' is allowed
  305. in gplot rootdir.
  306. Functions using this command have been disabled by default in the
  307. distribution, starting with 1.76.0. As for the specific issue, it
  308. is impossible to specify a general path without using the standard
  309. directory subdivider '/'.
  310. * CVE-2018-7186: number of characters not limited in fscanf or sscanf,
  311. allowing possible attack with buffer overflow.
  312. This has been fixed in 1.75.3.
  313. * CVE-2018-3836: command injection vulnerability in gplotMakeOutput().
  314. This has been fixed in 1.75.3, using stringCheckForChars() to block
  315. rootnames containing any of: ;&|>"?*$()/<
  316. * CVE-2017-18196: duplicated path components.
  317. This was fixed in 1.75.3.
  318. * CVE-2018-7441: hardcoded /tmp pathnames.
  319. These are all wrapped in special debug functions that are not
  320. enabled by default in the distribution, starting with 1.76.0.
  321. * CVE-2018-7247: input 'rootname' can overflow a buffer.
  322. This was fixed in 1.76.0, using snprintf().
  323. * CVE-2018-7440: command injection in gplotMakeOutput using $(command).
  324. Fixed in 1.75.3, which blocks '$' as well as 11 other characters.
  325. Wrapped the few 'system' calls in an extra layer of debug code.
  326. More coverity scan fixes; defects are about 1 per 10,000 source lines.
  327. New regression tests: numa1_reg, numa2_reg, lowaccess_reg,
  328. pixmem_reg.
  329. New non-regression test programs: histoduptest
  330. Juergen Buchmueller is working on Lua bindings. He typedef'd l_ok
  331. and used it in 1100 functions that return a success/failure status.
  332. He also helped clean up remaining issues in the doxygen-generated
  333. documentation.
  334. Using a packed struct for bmp headers to avoid crash on
  335. some big-endians.
  336. Fixed a bug in the prototype parser for xtractprotos that was
  337. surfaced by a typedef declaration for the bmp headers.
  338. Cleaned up IOS guards to avoid compiling a system(3) call on IOS.
  339. Renamed autobuild --> autogen.sh
  340. Added some basic pixa functions for rotation and translation.
  341. Added an iterative method to find rectangular coverings for
  342. arbitrary connected components.
  343. Converted two tests to reg tests running in alltests_reg:
  344. ptra1_reg, ptra2_reg
  345. Enabled read/write for standard jpeg compressed tiff images.
  346. Enabled reading for the old (deprecated) jpeg-encoded tiffs.
  347. Fix range selectors for pixa, pixaa, boxa, boxaa, pta:
  348. Now, last = -1 goes to the end.
  349. When reading tiff --> pix, insert IMAGEDESCRIPTION into text field.
  350. Converted iotest to reg test iomisc_reg; added to alltests_reg
  351. Converted rasterop_reg into a standard regression test; added
  352. to alltests_reg.
  353. Converted boxa2_reg and fhmtauto_reg into standard regression tests;
  354. added to alltests_reg.
  355. Split boxa sequence functions out of boxfunc4.c, into a new boxfunc5.c.
  356. Simplified bmp header and made reading more clearly endian
  357. agnostic (Juergen Buchmueller)
  358. New boxa3_reg regression test. This tests sequences of boxes
  359. by two new boxfunctions in boxfunc5.c.
  360. New bootnumgen4.c for more digit templates.
  361. Rename prog/recog_bootnum.c --> prog/recog_bootname1.c
  362. New in prog: recog_bootnum2.c, recog_bootnum3.c, recogtest7.c
  363. Fixed uninitialized data in pixCentroid() on 1 bpp pix.
  364. New reg test: bytea_reg.c. (removed byteatest.c)
  365. Fixed bug in non-transcoding pdf generation from 1 bpp png.
  366. Added LGTM to static analyzers that run over the library.
  367. 1.76.0 1 May 18
  368. Modify infrastructure to fix outstanding security issues. By default,
  369. you can no longer create temp directories and temp files whose
  370. names are known to the compiler. Also, prevent "system" calls,
  371. which were used for image display and gnuplot.
  372. Replaced remaining sprintf() with snprintf() in prog tests.
  373. Added non-transcoding functions for generating pdf from jpeg pixacomp
  374. Add control of jpeg quality from pixWriteMem() and pixWriteStream()
  375. Fixed getFilenamesInDirectory() to properly identify directories
  376. Prevent size overflow in calloc for kernel; cleaned it up fpix and dpix
  377. bmp reading now accepts negative height
  378. Simplified splitimage2pdf; it no longer uses ps2pdf
  379. Remove name-mangling WRITE_AS_NAMED compile option.
  380. Removed 2 deprecated write functions.
  381. Added these regression tests:
  382. locminmax_reg, speckle_reg, watershed_reg,
  383. 1.75.3 15 Feb 18
  384. Fixed some coverity scan issues.
  385. Autotools fix to check for png if enabling gnuplot (James Le Cuirot).
  386. 1.75.2 11 Feb 18
  387. Converted several progs to standard regression tests.
  388. Added these tests to the alltests_reg suite:
  389. adaptnorm_reg, binmorph1_reg, binmorph3_reg, equal_reg,
  390. extrema_reg, grayfill_reg, falsecolor_reg, grayquant_reg.
  391. Autotools fix for restricting giflib to 5.1+, and allowing
  392. openjpeg 2.3 (James Le Cuirot).
  393. 1.75.1 31 Jan 18
  394. Simpler and more accurate function for finding word masks from
  395. text image; better debugging and more thorough testing.
  396. Added to regression test set: prog/italic_reg
  397. Fix for potential injection attack using gplot rootdir.
  398. Bug fix for bmp reading to set opacity.
  399. 1.75.0 24 Jan 18
  400. This is a new version, for major Ubuntu release 18.04.
  401. $TMPDIR path rewriting turned off on Unix; only used for Windows.
  402. Added pix conversion to depth 2 and 4. We now have general
  403. converters to 1, 2, 4, 8, 16 and 32 bpp.
  404. Modified giflib to use read/write from/to memory; no temp files;
  405. no longer support versions before 5.1.
  406. Move most low-level code from separate files to their callers;
  407. about 30 of them became static.
  408. Improved table detection on scanned page images (tests: pageseg_reg.c)
  409. Added support for write/compare regression tests for files.
  410. Modified printimage for more flexibility.
  411. Enable lookup by key on comma-separated key/value text file.
  412. Update README.html for building with Visual Studio.
  413. Improved functions for getting pixel averages in RGB images
  414. Simplified and speedup of unsharp masking.
  415. New function for detecting and correcting text orientation.
  416. Remove slow sharpening operation when not appropriate during scaling.
  417. Better handling of gplots with 0 or 1 data point.
  418. Coverity scan fixes.
  419. Modified jpeg2000 header to use openjpeg 2.3.
  420. Improved depth accessors for pixa and pixaa; added size accessors
  421. for pixa and pixaa.
  422. Bug fix in webp interface on read error.
  423. New function that finds the closest boxes in a boxa to any particular
  424. box, in each of 4 directions.
  425. New regression tests in automated sequence: blend5_reg, quadtree_reg,
  426. wordboxes_reg.
  427. New program: textorient
  428. Removed programs: snapcolortest
  429. 1.74.4 11 Jun 17
  430. Converted two progs to reg tests
  431. New version because 1.74.3 had some spurious files (xtractprotos,
  432. endianness.h)
  433. 1.74.3 9 Jun 17
  434. Coverity scan fixes.
  435. Several fixes for running on Windows, including subtle one with tiff
  436. encoding depending on pad bits.
  437. Utility and test if a page image likely has a table.
  438. Remove use of pixCreateTemplateNoInit() where it may cause problems.
  439. Make release 'configure-make ready'
  440. 1.74.2 19 May 17
  441. Many simplifications and improvements to recognizer.
  442. Cleanup of doxygen comments
  443. Encoded pdf title in escape 4-byte hex (for safety)
  444. Fixed several hundered coverity scan possible leaks
  445. Added about 20 regression tests to the automated set.
  446. Improved vertical alignment of dewarp.
  447. Implemented preliminary method for correcting dewarp foreshortening
  448. due to page curvature.
  449. Improved multipage tiff reading and writing.
  450. Added a new version of textline finding.
  451. Fixed bug in fast 2D sharpening code (used in some scaling ops)
  452. BMP i/o rewritten to implement memory version directly.
  453. PNG i/o functions added for encoding and decoding directly to memory.
  454. Method for finding light color regions on scanned page images.
  455. 1.74.1 3 Jan 17
  456. Configuration changes to support the patch number in the
  457. version (major.minor.patch).
  458. Removed all remaining pixDisplayWrite() calls in prog/.
  459. Cleaned up and/or promoted about 15 programs to full regression
  460. tests. There are now 95 tests in the regression set.
  461. Over half the initial coverity scan warnings have been removed.
  462. 1.74.0 10 Dec 16
  463. Leptonica development was moved to github. The master is at:
  464. github.com/danbloomberg/leptonica
  465. Egor Pugin is the maintainer of the site.
  466. A very large number of changes have been made. Some of them follow;
  467. details can be found in the git commit messages.
  468. Static makefiles modified to work with gnu*9 and c*9.
  469. Modify SET macros to work on windows.
  470. New modes for RGB --> gray conversion.
  471. New functions added for displaying a pix from a pixa.
  472. Split out sort/hash/set/map functions for dna, sarray and pta.
  473. More robust horizontal deskew on multi-column page images.
  474. Improve webpio_reg test.
  475. Remove X11 display for gplot; it is no longer supported.
  476. Remove most sleep calls, which were put in for gplot; no longer needed.
  477. Removed use of gthumb in library.
  478. Removed use of pixDisplayWrite() in the library; still in some progs.
  479. Improved test for endianness in makefile.static; no longer requires
  480. any local files or building and running a program.
  481. Modified all files for doxygen output (spearheaded by
  482. Juergen Buchmueller)
  483. Improved plotting of the boxes in a boxa.
  484. Replaced the slow point hash function with a simple fast one.
  485. Added pam (4 component) format writing to pnmio.c (Juergen Buchmueller)
  486. Improved rendering of pixa in side/by/sides.
  487. Better utilities for pixa and pixacomp.
  488. Add read/write serialization functions from/to memory for all
  489. the major data structures that do not already have them.
  490. More serialized boot recognizers stored as self-generating code.
  491. Cleaned up generating an adapted recognizer from the boot recognizer.
  492. Simplified temp file naming; removed most instances of named
  493. temp files from non-debug code; use tmpfile() and a wrapper
  494. l_makeTempFilename().
  495. Simplify and streamline multipage tiff reading (Jeff Breidenbach).
  496. Improvement of Otsu thresholding.
  497. Recognize outstanding contributors to leptonica over the years.
  498. New gif mem read/write interface that avoids writing a temp file,
  499. contributed by Tobias Peirick.
  500. Use double arrays (dna) instead of float (numa) for set ops.
  501. Enrolled in coverity scan to find potential bugs (Stefan Weil
  502. managed it). Fixed about 200 of them, mostly potential memory
  503. leaks from early function exit.
  504. Cleanup of gray quantization functions and tests.
  505. Refactored connectivity-conserving operations, to make them more useful.
  506. Provided methods for measuring and regularizing the width of strokes.
  507. Removed viewfiles.c from library; code is now in prog htmlviewer.c.
  508. Better debugging in page segmentation (pageseg.c)
  509. Deprecated the pixDisplayWrite*() debugging methods.
  510. Added about 15 regression tests to the framework in alltests_reg.c
  511. Final mods for compatibility with tesseract 4.00.
  512. 1.73 25 Jan 16
  513. All lept_* functions have been rewritten to avoid path rewrites for
  514. output to temp files, which were introduced in 1.72.
  515. Now, (1) files are written to the directory specified and (2) we
  516. are careful to write to subdirectories of /tmp/lept/ for all test
  517. programs, starting with the reg tests and prog/dewarp* and
  518. prog/recog*. This also required re-writing stringcode.c and
  519. stringtemplate1.txt to write temp files to subdirectories.
  520. Goal is to write to the specified path while not spamming the
  521. /tmp and /tmp/lept directories. This is particularly important
  522. on windows because files in the <TEMP> directory are not cleared
  523. on reboot.
  524. Naming changes (to avoid collisions):
  525. #defines MALLOC --> LEPT_MALLOC, CALLOC --> LEPT_CALLOC, etc.
  526. ByteBuffer --> L_ByteBuffer
  527. Added grayscale histogram functions that can be used to compare images.
  528. Added functions to determine if an image region has horizontal
  529. text lines.
  530. Added functions to compare photo regions of images to determine
  531. if they're essentially the same.
  532. Added red-black tree utility functions to implement maps and sets.
  533. The keys for maps and sets can be 64-bit entities (signed and
  534. unsigned integers and doubles).
  535. Implemented hashsets and hashmaps, using 64 bit keys.
  536. Replaced the numaHash by l_dnaHash; removed numa2d
  537. Improved security of tiff and gif reading, to prevent memory corruption
  538. when reading bad data.
  539. Removed src files: bootnumgen.c
  540. Added src files: rbtree.c, rbtree.h, map.c, bootnumgen1.c, bootnumgen2.c
  541. Added prog files: rbtreetest.c, maptest.c, settest.c, hashtest.c,
  542. recog_bootnum.c, percolatetest.c
  543. Added files for building using cmake (Egor Pugin)
  544. 1.72 5 Apr 15
  545. Better handling of 1 bpp colormap read/write with png so that
  546. they are losseless. The colormap is always removed on read and
  547. the conversion is to the simplest non-cmapped pix that can fully
  548. represent the input -- both with and without alpha.
  549. Fixed overflow bug in pixCorrelationBinary().
  550. Fixed orientation flags and handling of 16 bit RGB in tiff.
  551. Also new wrappers to TIFFClientOpen(), so we no longer go through
  552. the file descriptor for memory operations.
  553. Improvements in the dewarp functions.
  554. New box sequence smoothings.
  555. New antialiased painting through mask; previously it was only
  556. implemented for connected components in a mask.
  557. Better error handling and debug output with jpeg2000 read/write.
  558. Implemented base64 encoding. This allows binary data to be represented
  559. as a C string that can be compiled. Used this in bmf utility.
  560. Implemented automatic code generation for deserialization from
  561. compiled strings (stringcode.*)
  562. Regression tests write to leptonica subdir of <Temp> in windows; in
  563. unix it is optional. This avoids spamming the <Temp> directory.
  564. Added new colorspace conversions (XYZ, LAB).
  565. New source files: encoding.c, bmfdata.h, stringcode.c, stringcode.h,
  566. bootnumgen.c.
  567. Removed source files: convolvelow.c, graymorphlow.c
  568. New programs: genfonts_reg, colorize_reg, texturefill_reg,
  569. autogentest1, autogentest2.
  570. alltests_reg now has 66 tests.
  571. 1.71 18 Jun 14
  572. This version supports tesseract 3.04. In particular, 3.04
  573. has automatic conversion of a set of scanned images, either in a
  574. directory or coming directly from a scanner, into pdf with injected
  575. text. This is something we've wanted to do for several years!
  576. Improved jp2k header reading, including resolution.
  577. Removed src files: rotateorthlow.c, pdfio.c, pdfiostub.c
  578. Renamed jp2kio.c, jp2kiostub.c ==> jp2kheader.c, jp2kheaderstub.c.
  579. These header reading functions parse the jp2k files, and
  580. don't require a jpeg2000 library.
  581. New jp2kio.c, jp2kiostub.c, that uses openjpeg-2.X to read
  582. and write jp2k. We now support I/O from these formats:
  583. png, tiff, jpeg, bmp, pnm, webp, gif and jp2k
  584. as well as writing to PostScript and pdf.
  585. New pdfio1.c, pdfio1stub.c, pdfio2.c pdfio2stub.c, where we've
  586. split functions into high and low level.
  587. Fixed memory bug in bilateral.c
  588. Improved reading/write of binary data from file. For example,
  589. l_binaryReadStream() can now be used to capture data piped
  590. in via stdin.
  591. Font directory now arg passed in everywhere (not hardcoded)
  592. Don't write temporary files to /tmp; only to a small number of
  593. subdirectories, to avoid spamming the /tmp directory. E.g.,
  594. for regression tests, the current output is now to /tmp/regout/.
  595. For jpeg reading modify pixReadJpeg() to take as a hint
  596. a bit flag that allows extraction of only the luminance channel.
  597. Allow wrapping of pdf objects from png images without transcoding
  598. (thanks to Jeff Breidenbach)
  599. Better support for alpha on read/write with png, including
  600. 1 bpp with colormap, alpha (supported in png with transparency array)
  601. 1.70 3 Feb 14 (distribution to debian; ubuntu 14-04; 4.1.0)
  602. New bilateral filtering.
  603. New simple character recognition utility.
  604. Improved dewarping functionality, in model building and rendering.
  605. More flexible use of ref models.
  606. Better and more consistent handling of alpha layer in RGBA, though
  607. use of the spp field. Ability to handle more png files with alpha,
  608. including palette with alpha.
  609. New fast converters from jpeg and jpeg2000 to pdf, without transcoding.
  610. Made bmp reader (and pix reading in general) more robust; avoid
  611. size overflow errors.
  612. New text labelling operations; depth conversion of a set of images
  613. New license (essentially BSD 2-clause), to specify conditions
  614. for both source and binary distribution.
  615. Improved auto make: make all progs, install just 11, test 61.
  616. New src files: bilateral.{c,h}, dewarp1.c, dewarp2.c,
  617. dewarp3.c, dewarp4.c, jp2kio.c, jp2kiostub.c,
  618. pixlabel.c, recogbasic.c, recogdid.c, recogident.c,
  619. recogtrain.c, recog.h
  620. New prog files: adaptmap_dark.c, alphaxform_ret.c,
  621. bilateral_reg.c, binarize_reg.c, binarize_set.c,
  622. blackwhite_reg.c, blend1_reg.c, blend3_reg.c, blend4_reg.c,
  623. boxa1_reg.c, colorcontent_reg.c, coloring_reg.c,
  624. colorspace_reg.c, compare_reg.c, converttopdf.c,
  625. croptest.c, dewarprules.c, dewarptest1.c, dewarptest2.c,
  626. dewarptest3.c, dewarptest4.c, displayboxa.c, displaypix.c,
  627. displaypixa.c, findcorners_reg.c, fpix1_reg.c,
  628. fpix2_reg.c, fpixcontours.c, insert_reg.c, italictest.c,
  629. jpegio_reg.c, label_reg.c, multitype_reg.c, nearline_reg.c,
  630. newspaper_reg.c, numa1_reg.c, numa2_reg.c, recogsort.c,
  631. recogtest1.c, shear1_reg.c, webpio_reg.c, wordboxes_reg.c
  632. Removed src files: arithlow.c, binexpandlow.c, binreducelow.c,
  633. dewarp.c
  634. Removed prog files: blend_reg.c, blendtest1.c,
  635. dewarptest.c, fpix_reg.c, inserttest.c, numa_reg.c, rotatetest2.c
  636. shear_reg, xvdisp.c
  637. 1.69 16 Jan 12 (distribution to debian; ubuntu 12-04; 3.0.0)
  638. Fixed bug in pdf generation for large files, using a new
  639. double array (dnabasic.c). Added several new modes for pdf
  640. generation from sets of images.
  641. Dewarp based on image content now aligns to left and right margins;
  642. works at book level; is more robust to bad disparity models;
  643. version 2 serialization.
  644. Fixed regutils to return the actual number of errors.
  645. Improved sorting efficiency of numas in cases where binning,
  646. which is order N, makes sense.
  647. Fixed fpix serialization (now version 2).
  648. New version (5) of xtractprotos, allows putting prototypes in-line in
  649. allheaders.h. Having them separately in leptprotos.h still an option
  650. New copyright (BSD, 2 clause) on src files.
  651. Removed all trailing whitespace in src files.
  652. New src files: boxfunc4.c coloring.c, dnabasic.c
  653. New prog files: dna_reg.c, alphaops_reg.c
  654. Removed prog file: alphaclean_reg.c
  655. 1.68 10 Mar 11
  656. Fixed windows issues with passing pointers across C-runtime boundaries
  657. when using dlls, by providing special functions (e.g., lept_fopen()).
  658. Proper version numbers are now set with automake.
  659. New utility (quadtree.c) for generating quadtree statistics.
  660. New utility (in colorspace.c) for conversions to and from YUV.
  661. Refactored functions for assembling image data for generating
  662. either PS or PDF images using g4, jpeg or flate encoding.
  663. Better tempfile names, using current time in microseconds.
  664. Functions for getting resolution from jpeg and png files.
  665. Use size_t throughout for reading and writing binary data.
  666. Deprecate arrayRead*() and arrayWrite() functions; replace in
  667. the library with l_binaryRead*() and l_binaryWrite().
  668. Better handling of colormap images for in-place rasterop and shear.
  669. New utility (bytearray.c) for parsing and handling binary data;
  670. used for generating PDF files.
  671. New utility (pdfio.c) for generating PDF files.
  672. Refactored regutils functions to make them simpler to use.
  673. Top-level deskew now works on any image.
  674. Added functions in utils.c for cross-platform development, mostly
  675. for functions that make and remove directories, copy, move
  676. and delete files, etc. It should now be straightforward to write
  677. programs that will compile and run on windows.
  678. Reg tests have better printout; all give timings.
  679. New utility program: convertfilestopdf
  680. 1.67 9 Nov 10
  681. Autoconf: now built with James Cuirot's config files that
  682. build the library and all 200 progs.
  683. New sudoku solver. Just a game, but there are interesting aspects.
  684. Modified parseprotos.c to reject a type of "extern" decl.
  685. Add faster implementation for very small gray morphology
  686. operations (3x1, 1x3, 3x3).
  687. Eliminate warnings on recent gcc if you don't check return values
  688. from fread, fscanf, fgets, system, etc.
  689. Convolution: new functions for windowed variance and stdev; allow
  690. non-square kernel for windowed mean square.
  691. Put stdio.h and stdlib.h in alltypes.h, so they're not required
  692. in any .c files.
  693. Replace numaConvolve(), which is just a windowed mean, by
  694. windowed statistics functions (mean, mean square, variance).
  695. Generalize pixExtractOnLine() for arbitrary lines.
  696. Add pix interface to webp (webpio.c, webpiostub.c). This is a
  697. new open source codec, based on the video codec vpx (webm).
  698. Serialization of FPix and DPix
  699. Interconversion between FPix and DPix
  700. Integer scaling of FPix and DPix; includes the last row and column.
  701. New convertfiles.c: depth conversion on files in a directory.
  702. Testing programs in prog:
  703. convolve_reg.c, numa_reg.c: expanded test set
  704. projection_reg.c (tests pixRowStats(), pixColumnStats())
  705. dewarptest.c: output ps and pdf files
  706. writemtiff.c: simple driver to write images to a single file
  707. 1.66 3 Aug 10
  708. More tweaks for including (or not) bounding box hints for
  709. PS wrapping. Default is to write b.b., but not in functions
  710. that wrap images as full pages (psio1.c, psio2.c)
  711. pix4.c split in two files, and added function to identify c.c.
  712. that are sufficiently similar in shape to rectangles (pix5.c)
  713. Modify 2 and 4 bit setters to clip the input value so that it can
  714. only affect the pixel requested (arrayaccess.c, arrayaccess,h)
  715. New pseudorandom sequence functions (numafunc1.c)
  716. Dewarping camera-based images using textlines (dewarp.c, prog/dewarp*)
  717. Geometrical function for aggregating overlapping bounding boxes.
  718. Programs to generate figures for book chapter "Document Image
  719. Applications" in "Mathematical Morphology: theory and applications"
  720. (see: http:/www.leptonica.org/najman-talbot-book-chapter.html)
  721. (prog/livre*.c)
  722. Functions that do affine and other operations in images with
  723. alpha blending at edges: pix*WithAlpha(). Also do this
  724. with a gamma/inverse-gamma wrapper to further reduce edge aliasing.
  725. (rotate.c, scale.c, projective.c, affine.c, bilinear.c,
  726. prog/alphaxform_reg.c)
  727. Improved color segmentation (fixed bugs; made faster)
  728. Higher order least square fits: quadratic, cubic, quartic. (pts.c)
  729. Various mods for otsu binarization and the *SplitDistribution*()
  730. functions (numafunc2.c, prog/otsutest2.c)
  731. Control sampling in convolution output (convolve.c, prog/fpix_reg.c)
  732. Morphological operations on numas (numafunc1.c, numafunc2.c,
  733. prog/numa_reg.c)
  734. Pix serialization wrapped so we can use pixRead(), etc on these
  735. files (spixio.c, readfile.c, writefile.c)
  736. Gif read/write to memory fixed (and cheated -- using files) (gifio.c)
  737. New fpix and dpix accessors; contour rendering on fpix (fpix1.c, fpix2.c)
  738. Various functions for linearly mapping colors and displaying arrays
  739. of colors (pix4.c, blend.c, prog/rankhisto_reg.c)
  740. Functions for getting approximate ranges of colors and color
  741. components in an image (pix4.c, colormap.c)
  742. Cleaned up windows platform and compiler defines and macros.
  743. 1.65 5 Apr 10
  744. Added regression test utility functions for standardizing and
  745. automating construction and running of regression tests. Makes the
  746. golden files when the 2nd arg to the reg test is 'generate'.
  747. (regutils.{c,h})
  748. Converted 22 reg tests in prog to use this; invoked with alltests_reg.
  749. Goal is to put all prog/*_reg.c into this format and put a set
  750. of golden files on the web.
  751. Small fixes in gifio for handling streams properly.
  752. New functions for shifting colors, hue invariant transforms, etc
  753. (blend.c)
  754. prog/dwamorph*.c: rename *1_reg.c to dwalineargen.c; others
  755. converted to standard reg tests.
  756. New rgb convolution functions.
  757. For PS output, write all images with a bounding box hint and with
  758. page numbers, which works for both embedded (e.g., in tex) and
  759. full page generated PS. Once converted to pdf, this is fine
  760. in all situation.
  761. New functions for initialization and random insertion with pixcomp.
  762. For color quantization, make the lightest color white if sufficiently
  763. close; ditto for black (colorquant1.c, colorquant2.c).
  764. Rank binning of 8 bpp and rgb images (numafunc2.c, pix4.c)
  765. A function to rank colors by the intensity of the minimum comp (pix4.c)
  766. New pixRotateBinaryNice(), rotates 1 bpp pix in such a way that
  767. the shear lines aren't visible. (rotate.c)
  768. New pixSaveTiledWithText(), a convenience function to append text
  769. to images that are being tiled. (writefile.c)
  770. Stereoscopic warping functions and stereo pair functions (warper.c)
  771. Linear interpolated shear -- better than rasterop shear (shear.c)
  772. Option to use higher quality chroma (U,V) sampling in jpeg (jpegio.c)
  773. Rename Bmf --> L_Bmf.
  774. New tests in prog:
  775. alltests_reg.c alphaclean_reg.c, psio_reg.c, rankbin_reg.c,
  776. rankhisto_reg.c, warpertest.c
  777. 1.64 3 Jan 10
  778. Easy setup for standard byte processing on 8 bpp pix (pix2.c)
  779. Evaluation of difference between similar images; test for
  780. similar images and (compare.c)
  781. Subpixel scaling, with color input and separate scale factors (pixconv.c)
  782. Fix tiff header reader to get correct format (tiffio.c)
  783. Enable pixDisplay() to work with i_view (windows) and with
  784. xzgv and xli as well as xv; allow application to choose
  785. which to use (writefile.c).
  786. Use a mask to specify regions that are changed by a morphological
  787. operation (morphapp.c).
  788. Improve the default sharpening for scaling (scale.c)
  789. Function to test for equivalence of file data (utils.c)
  790. Select and read image files with embedded index (readfile.c)
  791. Fix box size calculation in pixEmbedForRotation(); solution
  792. provided by Brent Sundheimer.
  793. New pixDisplayMultiple(), instead of calling gthumb directly; this
  794. is now set up to use i_view for windows.
  795. Changed criteria for determining if an image is color (colorcontent.c,
  796. colorquant{1,2}.c.
  797. Optional mode where the filename extension is automatically written
  798. to output image files; particularly useful for windows.
  799. Initialize boxa and pixa as full, with minimal placeholders.
  800. Get rank valued numbers and boxes in numa and boxa.
  801. Cute implementation for finding largest solid rectangle (maze.c)
  802. New median cut quantization for mixed (color/gray) images (colorquant2.c)
  803. Many changes to allow the library and applications be built easily
  804. in windows. There is now a thorough windows readme, written by Tom
  805. Powers, for doing this. The windows build information and
  806. project files are now in a new vs2008 directory.
  807. 1.63 8 Nov 09
  808. Added pixScaleToGrayFast(), a faster version with very similar quality.
  809. Fixed scaleGrayLILow() to handle edge pixels more accurately
  810. Text processing:
  811. new text application (finditalic.c, prog/finditalic.c) for locating
  812. words in italic type style.
  813. Easier to add text to a pix using the bitmap font stored in
  814. the font directory; see, e.g., prog/writetxt_reg.c.
  815. Blending of 2 images with an alpha channel: pixBlendWithGrayMask()
  816. Fixed bug in color segmentation; it now (again) works properly.
  817. New utility (pixcomp.c) for handling compressed pix arrays in
  818. memory; new PixComp and PixaComp structs.
  819. Fast serialization of pix without compressing (pixSerializeToMemory
  820. and pixDeserializeFromMemory); required serialized colormaps
  821. FileI/O: new functions for reading file headers.
  822. PostScript generation modernized; split psio.c into psio1.c
  823. and psio2.c; added level 3 (flate) encoding.
  824. new functions for reading and writing multipage tiffs, for
  825. arbitrary input images. For writing, compression is lossless
  826. (either g4 or zip)
  827. update all I/O stub files
  828. Miscellaneous: new pixaAddBorderGeneral(); new functions in pix3.c
  829. for counting fg pixels and summing 8 bpp pixels by column and row;
  830. new numaUniformSampling() for resampling with interpolation;
  831. subpixel scaling.
  832. New or improved regression tests in prog:
  833. extrema_reg, pixalloc_reg, blend2_reg, rotateorth_reg,
  834. ioformats_reg, colorseg_reg, pixcomp_reg, pixserial_reg,
  835. writetext_reg, psioseg_reg, subpixel_reg.
  836. Interface changes:
  837. findFileFormat() and findFileFormatBuffer(): now returns format
  838. using input ptr. The function return value is 0 if OK; 1 on error
  839. rename: pixThresholdPixels() --> pixThresholdPixelSum()
  840. 1.62 26 Jul 09
  841. Expanded composite Dwa implementation as a sequence of operations,
  842. so that it now works beyond a size of 63. It's typically about 2x
  843. faster than the composite rasterop implementation (with help
  844. from Ankur Jain). Also use data transfer instead of data copy
  845. whenever possible. Thorough tests with binmorph4_reg and binmorph5_reg.
  846. New functions in colorseg.c for masking and histogramming in HSV
  847. color space.
  848. Treat string constants rigorously as const char*, initializing
  849. to char[] if to be used as non-const, or in some cases casting
  850. to char*. This avoids compiler warnings.
  851. Improved color quantization using existing colormap for octcubes
  852. and a new version for grayscale. This will rigorously map most
  853. black and most white octcubes (rsp) to black and white
  854. if they exist in the colormap.
  855. Fast quantization to an existing colormap for color and grayscale.
  856. Fixed some bugs; e.g., in pixAffineSampled() for 1 bpp with
  857. L_BRING_IN_BLACK; reading and writing pnm for 2 and 4 bpp.
  858. In pngio.c, enable compile time control over these settings:
  859. converting 16 bpp --> 8 bpp on read
  860. removing alpha channel on read
  861. setting zlib compression on write
  862. For general scaling, allow sharpening to be optional, and provided
  863. faster sharpening operations.
  864. Improve support for 16 bpp grayscale.
  865. For scaleToGray* functions, reduce the width truncation.
  866. In psio.c, new functions for converting segmented page images
  867. (text and image) into level 2 PostScript.
  868. Removed all implicit casting to const char*.
  869. New custom pix memory allocator, designed for large pix whose
  870. memory needs to be reused many times.
  871. In xtractprotos, we now allow prepending an arbitrary string to
  872. each prototype.
  873. In environ.h, additions for MSVC to work with VC++6, including
  874. prototpye strings for dll import and export (thanks to Ray Smith).
  875. In colorseg.c, new functions for building HSV histograms, finding
  876. peaks, and generating masks based on the peaks.
  877. New or improved regression tests:
  878. pixalloc_reg, binmorph4_reg, binmorph5_reg, conversion_reg,
  879. scale_reg, cmapquant_reg,
  880. 1.61 26 Apr 09
  881. New histo-based grayscale quantization: pixGrayQuantizeFromHisto(),
  882. that is used in new pixQuanitzeIfFewColorsMixed().
  883. Made final fix in pixBlockconv(). No underflows; no more overflows!
  884. More efficient rgb write with pnm.
  885. Add proto to jpegiostub.c, allowing proper use of the stubber.
  886. Fix several filter functions to use proper test on filter size; viz.,
  887. pixMinMaxTiles(), several functions in convolve.c.
  888. Redo shear implementation to handle arbitrary angles, to handle
  889. colormapped images, and to avoid the singularity at pi/2.
  890. Removed both static vars from pixSaveTiled().
  891. Generalized pixRotate() to handle colormapped images, and to use
  892. pixRotateBySampling() in place of the removed pixRotateEuclidean().
  893. New skew finder for full angle range, pixFindSkewOrthogonalRange().
  894. For skew detection, now allow shear about image center as well as
  895. about the UL corner.
  896. New rotation reg tests: rotate1_reg.c and rotate2_reg.c.
  897. Better serialization format for boxaa; introduce new version numbers
  898. for boxaa, pixa, and boxa, as required.
  899. Proper init in boxGetGeometry(), boxaGetBoxGeometry(), and the
  900. accessors in sel1.c and kernel.c.
  901. Improved Numa functions in numafunc1.c and numafunc2.c; in
  902. particular, numaMakeHistogramAuto() and numaGetStatsUsingHistogram().
  903. With all histo generators, make sure the start and binsize params
  904. are properly set and are used.
  905. Interface change: Use these parameters implicitly in
  906. numaHistogramGetRankFromVal() and numaHistogramGetValFromRank().
  907. Interface change to ptaGetLinearLSF(): add 1 optional parameter.
  908. In several pixaDisplay*() functions, handle colormaps properly.
  909. pixafunc.c split to pixafunc1.c and pixafunc2.c.
  910. New connected component selections and options in pixaSort.
  911. Patch from Tony Dovgal for reading tiff rgba files.
  912. Added new logical operation options for numas.
  913. New pixConvertRGBToGrayMinMax() that chooses min or max of 3 components.
  914. Computation of pixelwise aligned stats between multiple images
  915. of the same size (e.g., video), in pix4.c.
  916. Very fast binsort implemented for boxa and pixa.
  917. Cleanup and rename stack, queue, heap and ptra functions:
  918. all structs and typedefs start with "L_"
  919. all functions start with "l"
  920. Sel creation for crosses and T junctions.
  921. New thresholding operations to binary; split out from adaptmap.c
  922. into binarize.c.
  923. Implementation of sauvola binarization, including use of pixtiling.
  924. Added composite parallel union and intersection morphological operations.
  925. Small changes to scaling and rotation to improve accuracy; only
  926. visible on very tiny, symmetric images.
  927. Implemented DPix (double precision data); useful for the mean
  928. square accumulator for sauvola binarization.
  929. New fast hybrid grayscale seedfill, in addition to the interative
  930. version (contributed by Ankur Jain).
  931. New or improved regression tests:
  932. rotate1_reg, rotate2_reg, shear_reg, numa_reg, skew_reg,
  933. ptra1_reg, ptra2_reg, paint_reg, smallpix_reg, pta_reg,
  934. pixmem_reg, binarize_reg, grayfill_reg.
  935. 1.60 19 Jan 09
  936. Fixed bug in pixBlockconv(), introduced in 1.59, that causes
  937. overflow when convolving with an image that has white (255)
  938. at the edges. [quickly found by Dave Bryan]
  939. Include function to display freetype fonts in a pix.
  940. The files freetype.c and freetype.h are in the distribution, but are not
  941. yet linked into the library. This is contributed by Tony Dovgal,
  942. and this version works only for MSVC.
  943. Found that the problems with binary compression in giflib are fixed
  944. with giflib 4.1.6.
  945. 1.59 11 Jan 09
  946. Lots of changes since 1.58.
  947. New files: affinecompose.c, ptra.c, warper.c, watershed.{h,c}.
  948. Split: boxfunc.c --> (boxfunc1.c, boxfunc2.c, boxfunc3.c)
  949. Improved connected component filtering, with logical functions
  950. applied to indicator arrays (pix4.c, pixafunc.c, numafunc1.c).
  951. Function to determine if an image can be quantized nicely with
  952. only a few colors (colorcontent.c, pixconv.c).
  953. New gray seed-filling functions (seedfill.c, seedfilllow.c).
  954. Fixed bugs in tophats and hdome, due to misuse of pixSubtractGray()
  955. (morphapp.c).
  956. New function for improving contrast (adaptmap.c)
  957. Watershed transform (still slightly buggy) (watershed.c,h).
  958. Fast random access into a pix using line pointers (pix1.c, arrayaccess.*)
  959. Conversions of colormaps from gray to color and v.v. (colormap.c)
  960. Seedfill function that applies an upper limit to the fill
  961. distance (seedfill.c)
  962. New function for warping images with random harmonic distortion
  963. (with help from Tony Dovgal).
  964. New generic ptr array utility: all O(1) functions of a stack plus
  965. random replace, insert and delete (ptra.c).
  966. Simple functions for colorizing a grayscale image with an arbitrary
  967. color (pixconv.c, colormap.c)
  968. Flexible affine transforms (translation, scale, rotation) on pta
  969. and boxa (affinecompose.c).
  970. Clipping of foreground (both exact and approximate) starting from
  971. within a rectangular region of the image (pix4.c)
  972. Blending a colored rectangle over an image (pix2.c, boxfunc3.c)
  973. Generation of rectangle covering of mask components (boxfunc3.c).
  974. Block convolution using tiles (for very large images) (convolve.c)
  975. New or improved regression tests in prog:
  976. locminmax_reg, lowaccess_reg, grayfill_reg, adaptnorm_reg,
  977. xformbox_reg, warper_reg, cmapquant_reg, compfilter_reg,
  978. splitcomp_reg, affine_reg, bilinear_reg, projective_reg
  979. Acknowledgments:
  980. (1) Big thanks to Tony Dovgal for helping with the warping
  981. (e.g. for captcha). Tony also provided an implementation that
  982. allows rendering truetype fonts into a Pix on windows.
  983. This is not yet incorporated, because it opens a huge
  984. "can of worms," which is OK if you're going fishing but
  985. maybe not if you're trying to support leptonica on many platforms.
  986. TBD.
  987. (2) David Shao provided a libtools build system that includes
  988. building the prog directory! I believe this will work, but it
  989. is is not yet included because of problems I continue to have
  990. with macros in version 2.61 of gnu libtools.
  991. (3) Steve Rogers is working on a MSVC build for the prog directory.
  992. I hope to have this available for 1.60.
  993. 1.58 27 Sept 08
  994. Added serialization for numaa.
  995. New octree quantizer pixOctreeQuantByPopulation(), that uses a
  996. mixture of level2 and level4 octcubes. Renamed many functions
  997. in colorquant1.c, and arranged/documented them more carefully.
  998. Revised documentation in leptonica.org/papers/colorquant.pdf.
  999. Simplified customization for I/O libraries and fmemopen() in environ.h.
  1000. Fixed bugs in colormap.c, viewfiles.c, pixarith.c.
  1001. Verified Adam Langley's jbig2enc (encoding jbig2 and generating pdf from
  1002. these encoded files) works properly with the current version -- see
  1003. Section 24 of README.html for usage and build hints.
  1004. New separable convolution; let pixConvolve() take 8, 16 and 32 bpp input.
  1005. New floating pt pix (FPix) utility, which allows convolution and
  1006. arithmetic operations on FPix; also interconversion to Pix.
  1007. Ability to read headers on multipage tiff.
  1008. More robust updown text detection in flipdetect.c.
  1009. Use of sharpening to improve scaling when the scale factor is near 1.0.
  1010. See prog/fpix_reg.c for regression test and usage.
  1011. See prog/blend_reg.c for blending regression test, with new functions.
  1012. 1.57 13 Jul 08
  1013. New Debian distribution for 1.57 (thanks to Jeff Breidenbach).
  1014. Improved the Otsu-type approach for finding a binarization threshold,
  1015. by choosing the min in the histogram subject to constraints
  1016. (numafunc2.c, adaptmap.c)
  1017. New function pixSeedspread() in seedfill.c, similar to a voronoi tiling,
  1018. that is used for adaptive thresholding in pixThresholdSpreadNorm().
  1019. In the process, fixed a small bug in pixDistanceFunction().
  1020. (The approach was suggested by Ray Smith, and uses the fast
  1021. Vincent distance function method to expand each seed.)
  1022. Generalized the functions in kernel.c to use float weights
  1023. for general convolution (Version 2 for kernel), and added
  1024. gaussian kernel generation.
  1025. Put all jpeg header functions into jpegio.c, where they belong.
  1026. Fixed bugs in pixaInsertPix() and pixaRemovePix().
  1027. Added read/write serialization for Numaa.
  1028. New functions for comparing two images using bounding boxes (classapp.c).
  1029. 1.56 12 May 08
  1030. Added several new 1d barcode decoders. The functional interface
  1031. is still in flux.
  1032. Autoconf! To get this working, it was necessary to: determine and
  1033. set the endian flag; select which libraries are to be linked;
  1034. determine if stream-based memory I/O is enabled.
  1035. This required a major cleanup of the include files, minimizing
  1036. dependencies on external library header files, and getting everything
  1037. to work with both autoconf (HAVE_CONFIG_H) and the old
  1038. customized makefile. Customization is now all in environ.h.
  1039. pixSaveTiled(): a new way to display tiled images.
  1040. pixtiling.c: interface for splitting an image into a set of
  1041. overlapping tiles, using mirrored borders for tiles touching the
  1042. image boundary.
  1043. pixBlendHardLight(): new blending mode with nice visual effects.
  1044. pixColorFraction(): determines extent of color in image
  1045. Both octree and median-cut color quantization check first if
  1046. image is essentially grayscale; improvements to both algorithms.
  1047. box*TransformOrdered(): general sequence of linear transforms.
  1048. colorquant_reg.c, xformbox_reg.c, hardlight_reg.c: new regr tests.
  1049. 1.55 16 Mar 08
  1050. New functions for combining two images arbitrarily through a mask,
  1051. including mirrored tiling (pix3.c)
  1052. Modify pixSetMasked*() to work on all images (pix3.c)
  1053. New functions for extracting masked regions such as pixClipMasked()
  1054. (pix3.c) and pixMaskConnComp() and pixMaskBoxa() (boxfunc.c).
  1055. New functions to separate fg from bg (pix3.c), one of which is supported
  1056. by numaSplitDistribution (numafunc.c).
  1057. Modify sobel edge detector to take another parameter (edge.c)
  1058. Support for 4 bpp cmyk color space in jpeg (jpegio.c)
  1059. Modified median cut color quantization (colorquant2.c)
  1060. Renamed colorquant.c (for octree quant) --> colorquant1.c.
  1061. Absorbed conncomp.h and colorquant.h into specific files that
  1062. depend on them (colorquant1.c, conncomp.c, pix.h)
  1063. General convolution with utility for building kernels
  1064. (convolve.c, kernel.c)
  1065. Initial implementation of 1D barcode reader. So far, we just have the
  1066. signal processing to locate barcodes on a page, deskew them, and
  1067. find the bar widths, along with decoders for two formats.
  1068. (readbarcode.*, prog/barcodetest.c)
  1069. Made the default to stub out read/write for non-tiff image formats
  1070. to memory; it doesn't work on Macs & they were complaining (*io.c)
  1071. Include MSVC project files for building leptonlib under
  1072. windows (leptonlib.*)
  1073. 1.54 21 Jan 08
  1074. Histogram equalization (enhance.c).
  1075. New functions for pixaa: serialization (r/w), creation
  1076. from pixa, and a tiled/scaled display into a pixa (pixabasic.c,
  1077. pixafunc.c).
  1078. Read/write of tiff to memory (instead of a file, using
  1079. the TIFFClientOpen() callback interface), contributed by Adam
  1080. Langley (tiffio.c, testing in prog/ioformats_reg).
  1081. Improved image statistics functions, both over tiles and
  1082. through a mask over the entire image. Added standard deviation
  1083. and variance; enable statistics for rgb and colormapped images,
  1084. in addition to 8 bpp grayscale (pix3.c). New function to
  1085. extract rgb components from a colormapped image (pix2.c).
  1086. Fix pixWriteStringPS() to work with all depths and colormap (psio.c)
  1087. Enable all non-tiff formats to also write and read to/from memory (*io.c)
  1088. Added support for read/write to gif, contributed by Tony Dovgal
  1089. (gifio.c, gifiostub.c, imageio.h). See Makefile for instructions
  1090. on enabling this.
  1091. 1.53 29 Dec 07
  1092. Add 4th arg to pixDistanceFunction() to specify b.c.,
  1093. and fixed output to 16 bpp grayscale pix. (seedfill*.c)
  1094. New un-normalized block grayscale convolution (convolve.c)
  1095. Fixed bug in getLogBase2(), so that pixMaxDynamicRange() works
  1096. properly. This is useful for displaying a 16 bpp pix as
  1097. 8 bpp (pixarith.c). New function for getting rank val for
  1098. rgb over a region specified by a mask (pix3.c). New function
  1099. for extremem values of rgb colormap (colormap.c). New
  1100. function pixGlobalNormNoSatRGB(), a variant of pixGlobalNormRGB()
  1101. that prevents saturation for any component above a specified
  1102. rank value (adaptmap.c). Added mechanism for memory
  1103. management of pix (pix1.c). Added selective morphology by
  1104. region given by a mask (morphapp.c). Fixed prototype extracdtion
  1105. to work properly with function prototypes as args; released
  1106. version 1.2 of xtractprotos (parseprotos.c, xtractprotos.c).
  1107. Add a boxa field for pixaa, along with serialization (pixabasic.c),
  1108. and modified display of pixaa to include this (pixafunc.c).
  1109. Coalesced the version numbers for pixa, pixaa, boxa, and boxaa
  1110. serialization (pix.h).
  1111. New progs: modifyhuesat displays modified versions on a grid;
  1112. textlinemask shows simple methods for extracting textline masks.
  1113. 1.52 25 Nov 07
  1114. Implemented Breuel's whitespace partitioning algorithm (partition.c).
  1115. Generalized pixColorMagnitude() to allow different methods
  1116. for computing the color amount of a pixel (colorcontent.c).
  1117. New methods for computing overlap of boxes (boxfunc.c).
  1118. New methods for painting (solid) and drawing (outline) of boxes,
  1119. replacing boxaDisplay() with pixDrawBoxa*() and pixPaintBoxa*()
  1120. (pix2.c, boxfunc.c).
  1121. Ray Smith fixed bug in the distance function (seedfilllow.c).
  1122. For pixConvertTo1() and pixConvertTo8(), treat input pixs as a
  1123. const and never return a clone or altered cmap (pixconv.c).
  1124. Make pixGlobalNormalRGB() crash-proof (adaptmap.c).
  1125. Tony Dovgal added ability to read jpeg comment (jpegio.c).
  1126. 1.51 21 Oct 07
  1127. Improved histogramming of gray and color images (pix3.c)
  1128. Histogram statistics (numafunc.c). Better handling of tiff
  1129. formats, testing rle and packbits output and improving
  1130. level 2 postscript conversion efficiency (readfile.c, psio.c).
  1131. Test program for r/w and display of Sels (prog/seliotest.c).
  1132. Use endiantest to determine automatically which flags to set
  1133. when compiling for big- or little-endians (endiantest.c)
  1134. Compute a color magnitude for each rgb pixel (colorcontent.c).
  1135. Allow separate modification of hue and saturation (enhance.c).
  1136. Global transform of color image for arbitrary white point (adaptmap.c).
  1137. 1.50 07 Oct 07
  1138. |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  1139. NOTE CAREFULLY: The image format enum in imageio.h has
  1140. changed. This is an ABI change, and it requires
  1141. recompilation of the library.
  1142. |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  1143. Suggestions by David Bryan again resulted in several changes,
  1144. including improvements to the dwa generating functions and interfaces.
  1145. Major improvements for dwa code generation, including an
  1146. optional filename for the output code, adding function prototypes
  1147. to the code so it can easily be linked outside the library.
  1148. Addition of 2-way composable dwa functions for bricks, with
  1149. code addition to the library, and a new interpreter for dwa
  1150. composable brick sequences (fmorphauto.c, fhmtauto.c,
  1151. morphtemplate1.c, hmttemplate1.c, morphdwa.c, dwacomb*.2.c, morphseq.c)
  1152. Exhaustively tested in six programs (prog/binmorph*_reg,
  1153. prog/dwamorph*_reg).
  1154. New input modes for Sels, from both color bitmap editors
  1155. and a simple file format (sel1.c).
  1156. Better Sel generation functions in sel2.c, including combs for
  1157. composable brick operations and linear bricks for comparison.
  1158. Removed unnecessary copies for more efficient border add'n & removal.
  1159. Added RLE basline enc/dec for tiff.
  1160. Binary morphology documentation on the web page updated for these
  1161. changes/additions.
  1162. William Rucklidge unrolled inner loops and added LUTs to
  1163. speed up several more functions, including correlation
  1164. (correlscore.c), centroid calculation (morphapp.c),
  1165. 2x linear interp grayscale scanning (scalelow.c),
  1166. thresholding to binary (grayquantlow.c), and removal
  1167. of colormaps to gray (pixconv.c).
  1168. 1.49 23 Sep 07
  1169. |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  1170. NOTE CAREFULLY: The image format enum in imageio.h has
  1171. changed. This is an ABI change, and it requires
  1172. recompilation of the library.
  1173. |||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  1174. Suggestions by David Bryan resulted in several changes.
  1175. pixUnpackBinary() unpacks to all depths.
  1176. Can now write and read tiff in LZW and ZIP (gzip) formats.
  1177. These, like uncompressed tiff, work on all bit depths.
  1178. Also enabled pnm 16 bpp r/w, both non-ascii and ascii.
  1179. ioFormatTest() now has better coverage and clarity; this is
  1180. used in prog/ioformats_reg.c.
  1181. Rewrite of morphautogen code to implement opening and closing atomically.
  1182. Cleaner interaction with new text templates (fmorphauto.c,
  1183. fhmtauto.c, sarray.c, *template*.txt,).
  1184. More regression testing (e.g., binmorph1_reg.c, binmorph3_reg.c).
  1185. 1.48 30 Aug 07
  1186. William Rucklidge sped up pixCorrelationScore() by in-lining
  1187. all bit operations (jbclass.c).
  1188. Generalized rank filtering from 8 bpp to color (rank.c).
  1189. Fixed many functions that take a dest pix so that they don't fail if
  1190. the dimensions or depth are not consistent with the src pix.
  1191. The underlying change for this is to pixCopy() (pix1.c).
  1192. Improved display of Sel as a pix; added selaDisplayInPix() to
  1193. display all Sels in a Sela, orthogonal rotations of Sels (sel1.c).
  1194. New functions for thinning and thickening while preserving connectivity
  1195. and avoiding both free end erosion and dendritic cruft (ccthin.c,
  1196. prog/ccthin1_reg.c, prog/ccthin2_reg.c).
  1197. New function pixaDisplayTiledInRows() for compactly tiling pix
  1198. in a pixa, plus documentation of different existing methods. (pixafunc.c)
  1199. 1.47 22 Jul 07
  1200. New brick rank order filter (rank.c, prog/ranktest.c, prog/rank_reg.c).
  1201. Use mirror reflection b.c. to avoid special processing at
  1202. boundaries (pix2.c). Simple sobel edge detector (edge.c).
  1203. Utility for assempling level 2 compressed images in PostScript
  1204. (psio.c, prog/convertfilestops.c). Enable read/write of 16 bpp,
  1205. grayscale tiff (tiffio.c, pix2.c).
  1206. New function for finding the number of c.c., which is a bit
  1207. faster than finding the b.b. or the component images (conncomp.c)
  1208. New functions for finding local extrema in grayscale image (seedfill.c)
  1209. 1.46 28 Jun 07
  1210. Added interpreted mode for color morphology (morphseq.c).
  1211. In functions, make effort to consistently do early initialization
  1212. of ptrs to objects returned on the heap. This is to try to
  1213. avoid letting functions return uninitialized objects, even if
  1214. the return early because of bad input.
  1215. Split pixa.c into 2 files; revised the component filtering
  1216. in both pixafunc.c and boxfunc.c. Added component filtering
  1217. for "thin" components.
  1218. Added subsampling functions for numa and pta.
  1219. Word segmentation now works at both full and half resolution.
  1220. Better methods for displaying and tiling (for debugging),
  1221. using pixDisplayWrite(), pixaReadFiles() and pixaDisplayTiledAndScaled().
  1222. 1.45 27 May 07
  1223. Further improvements of orientation and mirror flip detection
  1224. (flipdetect.c). Added 2x rank downscaling and general integer
  1225. replicative expansion (scale.c). Simplified interface for
  1226. averaging, and included tiled averaging, which is yet another
  1227. integer reduction scaling function (pix3.c).
  1228. 1.44 1 May 07
  1229. Split pix2.c into (pix2.c, pix3.c), with basic housekeeping
  1230. functions (e.g., ops on borders, padding) in pix2.c.
  1231. Split numarray.c into (numabasic.c, numafunc.c), with
  1232. constructors and accessors in numabasic.c. Added a number
  1233. of histogram, rank value and interpolation functions to numafunc.c.
  1234. Add rms and rank difference comparison functions (compare.c).
  1235. Separated orientation and mirror flip detection; fixed the latter
  1236. (flipdetect.c).
  1237. 1.43 24 Mar 07
  1238. New and fixed functions for handling word boxes (classapp.c)
  1239. More consistent use of L_* flags (e.g., sarray.h, morph.h)
  1240. Morphology on color images (gray ops on each component) (colormorph.c)
  1241. New methods for generating sels; we now have five methods in
  1242. sel1.c and 3 others in selgen.c. Also a function that
  1243. displays Sels as an image, for use in documentation (sel1.c)
  1244. New high-level converters, such as pixConvertTo8(), pixConvertTo32(),
  1245. pixConvertLossless() (pixconv.c)
  1246. Identify regression tests, and rename them as prog/*_reg.c.
  1247. Complete revision of plotting package (gplot.c)
  1248. New functions for comparing pix (compare.c)
  1249. New morph application functions, such as the ability to run a
  1250. morph sequence separately on selected c.c. in an image, and
  1251. a fast, quasi-tophat function (morphapp.c)
  1252. Cleanup and new interfaces to border representations of c.c. (ccbord.c)
  1253. Page segmentation application (pageseg.c)
  1254. Better serialization with version control for all major structs.
  1255. Morphological brick operations with 2-way composite sels (morph.c)
  1256. 1.42 26 Dec 06
  1257. New sorting functions, including 2-d sorting, for boxa and pixa,
  1258. and functions that sort by index (e.g., pixa --> pixa and
  1259. for 2d, pixa --> pixaa; ditto for boxa).
  1260. New accessors for pix dimensions. A new strtokSafe() to
  1261. substitute for strtok_r (utils.c).
  1262. Page flip detection, using both rasterop and dwa morphology
  1263. (flipdetect.c), with dwa generation (fliphmtgen.c) and testing
  1264. (prog/fliptest.c).
  1265. Increased basic sels from 42 to 52 (sel2.c).
  1266. Better high-level interfaces for binary morphology with
  1267. brick (separable) sels, both for rasterop (morph.c) and for
  1268. dwa (morphdwa.c); fully tested for both asymmetric and
  1269. symmetric b.c. (prog/morphtest3.c). Faster area mapping
  1270. reduction for power-of-2 scaling.
  1271. 1.41 5 Nov 06
  1272. Simplified morph enums, removing all unused ones (morph.h).
  1273. Added new high-level interfaces for adaptive mapping (adaptmap.c).
  1274. New method to extract color content of images (colorcontent.c).
  1275. New method to generate sels from text strings, and to identify
  1276. roman text that is not properly oriented (thanks to Adam Langley).
  1277. Fast grayscale min/max (rank) scale reduction by integer factors.
  1278. New accessors for box and sel, that should be used when possible.
  1279. Thresholding grayscale mask by bandpass (grayquant.c).
  1280. Use of strtok_r() for thread safety.
  1281. 1.40 15 Oct 06
  1282. Fixed xtractprotos for cygwin. Minor fixes and improved documentation
  1283. (baseline.c, conncomp.c, pix2.c, morphseq.c, pts.c, numarray.c,
  1284. utils.c, skew.c). Add ability to quantize an rgb image to a
  1285. specified colormap (colorquant.c); tested in prog/cmapquanttest.c.
  1286. Modifications to allow conditional compilation on MS VC++,
  1287. and to allow I/O calls to be stubbed out (new files: *iostub.c,
  1288. zlibmemstub.c, pstdint.h, arrayaccess.h.ms60)
  1289. 1.39 31 Aug 06
  1290. |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  1291. NOTE CAREFULLY: There has been an interface change to make
  1292. affine, bilinear and projective transforms more general.
  1293. The implementation has been changed to allow them to handle
  1294. all image types and to make them faster (esp. with both sampled
  1295. and interpolated mapping on color images).
  1296. |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  1297. Added prog/Makefile.mingw to build executables. This is still
  1298. in a relatively raw state. It is necessary to download
  1299. gnuwin32 packages for 4 libraries (jpeg, png, zlib, tiff)
  1300. to link with leptonlib and the main, and I still have not
  1301. been able to build static executables (they require jpeg2b.dll, etc.).
  1302. 1.38 8 Aug 06
  1303. |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  1304. NOTE CAREFULLY: There has been an interface change to both
  1305. simplify and generalize the grayscale morphology operations:
  1306. pixErodeGray(), pixDilateGray(), pixOpenGray(),
  1307. pixCloseGray(), pixTophat() and pixMorphGradient().
  1308. The prototypes are not changed; old code will compile, but
  1309. it will be wrong! The old interface had a size and a type
  1310. (horizontal, vertical, square). The new interface takes
  1311. horizontal and vertical Sel dimensions.
  1312. |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
  1313. For cross-compilation to make windows programs, you can use
  1314. src/Makefile.mingw to make a windows version of the library.
  1315. 6x scale-to-gray function donated by Alberto Accomazzi.
  1316. Interpreter added for sequence of grayscale morphological
  1317. operations, including the tophat (morphseq.c).
  1318. Pixacc container added to simplify the interface
  1319. for accumulator arithmetic using Pix.
  1320. Removed fmorph.c and fmorphlow.c from the library. These are
  1321. very limited and were deprecated in favor of fmorphauto(), which
  1322. autogens the code from (nearly) any Sel.
  1323. Fixed some of the gray morphology operations, which had errors
  1324. on the boundary. All gray morph ops should now be rigorously
  1325. OK (graymorph.c). For testing of graymorph dualities, the
  1326. the graymorph interpreter, etc., see prog/morphgraytest.c.
  1327. 1.37 10 Jul 06
  1328. [After v.36 was released, Jeff Breidenbach built a Debian
  1329. distribution of Leptonica based on v.36, and you can now get Leptonica
  1330. as a Debian package. Use "apt-cache search leptonica" to see
  1331. what is available.] The libraries are now combined into a single
  1332. library (liblept.a, liblept.so) and the function prototypes are
  1333. also in a single file (leptprotos.h). cextract was found not
  1334. to work on recent versions of linux that support 64 bit data types,
  1335. and it is no longer distributed with leptonica. Instead, I wrote
  1336. a prototype extractor in leptonica (xtractprotos). When you
  1337. 'make allprotos', it now uses this program. The shared libraries
  1338. now have major and minor numbers corresponding to the version.
  1339. 1.36 17 Jun 06
  1340. Line graphics generation (graphics.c) reorganized; separated out pta
  1341. generation from rendering. Can now render with alpha blending.
  1342. Examples of use are given in prog/graphicstest.c.
  1343. Sort functions for basic geometrical objects now have the option
  1344. of returning a numa giving the sort order on the original array.
  1345. The pixa sort can sort with either clones or copies of the pix.
  1346. 1.35 21 May 06
  1347. The efficiency of the multipage jbig unsupervised classifier is
  1348. significantly improved due to a NumaHash struture implemented
  1349. by Adam Langley. Functions for computing runlength in 1 bpp
  1350. images have been added.
  1351. 1.34 7 May 06
  1352. Completely rewrote the jbig unsupervised classifier.
  1353. It now works on multiple pages, and is more accurate in performing
  1354. visually lossless substitutions. You can classify by connected
  1355. components, characters, or words. The old data structures
  1356. and interfaces have been removed. New unpackers from 1 to 2 and
  1357. 1 to 4 bpp, with and without colormaps in the dest.
  1358. 1.33 18 Mar 06
  1359. Generalized color snap to have different src and target colors,
  1360. and to include colormaps (blend.c). Distribute into root directory
  1361. that specifies the version number (e.g., 1.33). Add color
  1362. space conversion between rgb and hsv. Re-bundle thresholding
  1363. code from (binarize*.c, dibitize*.c) to grayquant*.c.
  1364. pixThreshold8() now also quantizes 8 bpp --> 8 bpp.
  1365. High-level pixRotate() that optionally expands image sufficiently
  1366. so that no pixels are lost in any sequence of rotations (rotate.c).
  1367. Generalize shear to specify color of pixels brought in, including
  1368. for in-place operation (shear.c, rotateshear.c). Faster version of
  1369. color rotation by area mapping, both about center and about UL corner.
  1370. You can now use the standard color rotator (pixRotateAM) and get
  1371. nearly the same speed as with the "Fast" one.
  1372. 1.32 4 Feb 06
  1373. Ability to specify a sequence of binary morphological
  1374. (& binary reduction/expansion) operations in a single
  1375. function (morphseq.c). Fast downscaling combined with conversion
  1376. from rbg to gray and to binary (scale.c). Utility for
  1377. segmenting images by color (colorseg.c).
  1378. 1.31 7 Jan 06
  1379. Remove more complicated functions that threshold to 2 bpp,
  1380. retaining the simplest interface. Retest all thresholding and
  1381. dithering. Add "ascii" write of PNM. Improve graphics writing
  1382. of lines; generalize to colormaps. New colorization functions
  1383. (paintcmap.c, blend.c).
  1384. 1.30 22 Dec 05
  1385. Remove most instances of fprintf(stderr, ...), except within
  1386. DEBUG or encapsulated in error, warning or info macros.
  1387. As a result, there is no output to stderr if NO_CONSOLE_IO is defined.
  1388. Adaptive mapping to make bg uniform (adaptmap.c). A few bug fixes.
  1389. New PostScript output functions for embedding PS files
  1390. (prog/converttops). Generalized some image enhancement functions.
  1391. New functions for generating hit-miss sels.
  1392. 1.29 12 Nov 05
  1393. More flexible blending of two images, with and without colormaps
  1394. (see blend.c). Painting colormapped images through masks, etc
  1395. (see paintcmap.c). More flexible interface for gamma and
  1396. contrast enhancement (see enhance.c).
  1397. 1.28 8 Oct 05
  1398. Removed all pix colormaps for 1 bpp. Allow programmatic resetting
  1399. of binary morphology boundary conditions. Added (yet) another
  1400. simple octcube color quantizer. New colormap operations.
  1401. 1.27 24 Sep 05
  1402. Renamed many of the enums and typedefs to avoid namespace
  1403. collisions. This includes structs and typedefs for BMP.
  1404. Interface change to pixClipRectangle(); apologies to everyone
  1405. whose code is broken by these changes -- I hope it's worth it.
  1406. Removed colormap.h; simplified all colormap usage, hiding details
  1407. from all but a few colormap functions. Am now saving file format
  1408. in the pix when an image is read, and can by default write
  1409. out in this format. Resolution info added for jpeg and png.
  1410. Added L_INFO* macros and l_info* fctns for printing
  1411. (e.g., debugging) info. Suggestions and code kindly
  1412. supplied by Dave Bryan, who helped solve compatibility issues
  1413. with MINGW32 (e.g., in timing and directory functions).
  1414. Added some blending and linear TRC functions.
  1415. Generalized pixEqual() to include all cases with and without
  1416. colormaps. New regression tests in prog: ioformats, equaltest.
  1417. 1.26 24 Jul 05
  1418. Generalized affine pointwise to do interpolation as well as
  1419. sampling. For both projective and bilinear transforms,
  1420. implemented using both sampling and interpolation.
  1421. Added function to remove keystoning by computing the necessary
  1422. projective transform and doing it. Also find baselines in text images.
  1423. Added downscaling using accurate area-mapping over subpixels.
  1424. 1.25 25 Jun 05
  1425. Better endian conversion fctns for 2 and 4 byte words.
  1426. Remove colormaps before converting by thresholds.
  1427. Added functions to read header parameters for png and tiff.
  1428. 1.24 5 Jun 05
  1429. Added image splitting to allow printing in tiles (as several pages).
  1430. Added new octree quantization function to generate 4 and 8 bpp
  1431. colormapped output (not dithered). Fixed bmp resolution.
  1432. Added new flag for colormap removal (using dest depth based on
  1433. src colormap). Added I/O tests (prog/ioformats.c)
  1434. 1.23 10 Apr 05
  1435. Added thresholding from 8 bpp to 2 and 4 bpp, allowing specification
  1436. of both the number of output levels and whether or not a colormap
  1437. is made.
  1438. 1.22 27 Mar 05
  1439. Add pointer queue facility. To demonstrate it, you can now
  1440. generate a binary maze using a cellular automaton and find
  1441. the shortest path between two points in the maze. Add heap
  1442. of pointers (keyed on the first field), which is used to
  1443. implement a priority queue. This is applied to search for
  1444. a "least cost" path on a grayscale image (a generalization
  1445. of a binary maze).
  1446. 1.21 28 Feb 05
  1447. Read/write of colormaps to file. For gplot, add a new
  1448. latex output terminal. Bring ptrs into 21st century by
  1449. including stdint.h, and using uintptr_t for the ptr address
  1450. arithmetic in arrayaccess.*. This seems to be OK back to
  1451. RH 7.0, but if you run into trouble with an earlier
  1452. C compiler, let me know. Also, use enums for global
  1453. constants whenever possible, and qualify named constants
  1454. (e.g., ADD --> ARITH_ADD, HORIZ --> MORPH_HORIZ) to avoid
  1455. possible interactions with other libraries.
  1456. 1.20 31 Jan 05
  1457. Speed up of tiffio and pngio with byte swap generating new pix.
  1458. In textops.c, ability to split string into paragraphs,
  1459. in preparation for more general typesetting.
  1460. Automatic hit-miss Sel generation for pattern matching.
  1461. Fast downscaling using a lowpass filter and subsampling.
  1462. Generalization of several grayscale and color operations
  1463. to work on colormapped images. Improved scale-to-gray and
  1464. scaling reduction operations to be antialiased for best results.
  1465. 1.19 30 Nov 04
  1466. Additions to fileIO: (1) new jpeg reading options, such as
  1467. returning warnings and scaled raster; (2) ability to write
  1468. custom tiff flags. Better tiling functions.
  1469. Edge extraction, both with grayscale morphology
  1470. and clipped convolution filters. More general painting
  1471. through a binary mask: pixSetMaskedGeneral().
  1472. Unpacking from binary to 8, 16 and 32 bpp. Thresholding
  1473. and dithering from 8 bpp to 2 bpp ("dibitization"). New bitmap
  1474. font facility, using a single rendered font in a variety of
  1475. sizes: allows painting the text on an image (binary, gray, RGB).
  1476. (People have asked for the ability to write text on images).
  1477. 1.18 25 Aug 04
  1478. Changed typedefs of built-in types to avoid possible conflicts.
  1479. Cleaned up and tested all programs in the prog directory.
  1480. Simplified and fixed the pixSetMasked() and pixCombineMasked()
  1481. functions.
  1482. 1.17 31 May 04
  1483. Implemented distance function for 16 bpp. We can now generate
  1484. out 16 bpp PNG. Simple programs for generating PS from a
  1485. directory of g4tiff or jpeg images. Changed implementation of
  1486. erosion to allow either asymmetric or symmetric boundary conditions.
  1487. The distinction is described on the binary morphology web page.
  1488. Allow read/write of multipage TIFF files. Implemented
  1489. read/write of PNM files.
  1490. 1.16 31 Mar 04
  1491. New depth conversion functions, improved conversion to false color,
  1492. new contour rendering (onto 1 bpp or onto the src grayscale image),
  1493. new orthogonal rotations, better interface for doing arithmetic
  1494. on 2-d arrays using a pix, improved distance function.
  1495. 1.15 31 Jan 04
  1496. Fast interpolated color rotation with 4x4 subpixels; has
  1497. nearly the accuracy of the slower method using 16x16 subpixels.
  1498. Demonstration of line removal from grayscale sketch in
  1499. prog/lineremoval.c. Conversion of grayscale to false color.
  1500. Fixed shear and rotation functions to handle angle = 0.0 properly.
  1501. Other small fixes and interface improvements.
  1502. 1.14 30 Nov 03
  1503. Small implementation changes to list.c. Better sorting
  1504. routines for number arrays (numa), plus sorting for box
  1505. arrays (boxa) and pix arrays (pixa). PostScript wrapper
  1506. for jpeg. Better handling of colormaps, and a simple
  1507. function to convert an RGB pix with not more than 256
  1508. colors to the smallest colormapped pix. PS output wrappers
  1509. for JFIF JPEG and TIFF G4 files. Comments compatible
  1510. with doxygen for automatic documentation.
  1511. 1.13 31 Oct 03
  1512. Cleaned up documentation in src. Made libraries and test programs
  1513. ANSI C++ compliant. Added special cases to rasterops for
  1514. alignment to word boundaries. Fixed pngio.c to work with
  1515. most recent libpng (1.2.5).
  1516. 1.12 30 Jun 03
  1517. Implemented border chain representation from a binary image,
  1518. writes/reads a compressed version, and renders the original
  1519. image back from the borders. Also writes outline file out
  1520. in svg format. Number arrays (numa) and point arrays (pta)
  1521. are also extended to 2nd level arrays (numaa, ptaa).
  1522. Serialized I/O for boxa, pta, and pixa.
  1523. 1.11 31 May 03
  1524. Implemented generic list handling, for doubly-linked
  1525. list cons cells and arbitrary objects.
  1526. 1.10 14 Apr 03
  1527. Implemented simple image enhancements in gray and color:
  1528. gamma correction, contrast enhancement, unsharp masking.
  1529. Extended smoothing via block convolution to color.
  1530. Implemented auto-gen'd DWA version of hit-miss transform;
  1531. the code for generating these hmt routines is very similar to
  1532. that for DWA auto-gen'd erosion and dilation.
  1533. 1.9 28 Feb 03
  1534. Implemented a safe, expandable byte queue. As an example of
  1535. its use, implemented memory-to-memory compression and decompression
  1536. using zlib. Generalized PS write to include RGB color.
  1537. Implemented a method to find image skew.
  1538. 1.8 31 Jan 03
  1539. Implemented a simple 1-pass color quantization with dithering,
  1540. and improved the 2-pass octree color quantization.
  1541. Documented with an application page, that includes jbig2.
  1542. Added new general sampling operations and made a table
  1543. that summarizes the available scaling operations.
  1544. 1.7 31 Dec 02
  1545. Added pixHtmlViewer(), a formatter that allows portable viewing of
  1546. a set of images (like a slide show) in a browser.
  1547. Implemented better octree color quantization, with variable
  1548. number of colors, pruning the octree for good color clusters,
  1549. and fast traversal for pixel assignment to colormap.
  1550. 1.6 30 Nov 02
  1551. Generalized shear and shear rotation to arbitrary locations
  1552. about which the operation is performed. Implemented in-place
  1553. translation using pixRasteropIP(). Implemented arbitrary
  1554. affine transform of image two ways: pointwise and sequential.
  1555. Added binarization by error diffusion. Added simple color
  1556. quantization by octree.
  1557. 1.5 31 Oct 02
  1558. Put jpeglib.h in local directory. This, along with the jmorecfg.h
  1559. file there prevents compiler warnings about redefined typedefs.
  1560. Compiled everything with g++ to make strictly ansi C compatible.
  1561. Added interface gplotFromFile() for simple file-based plotting with
  1562. gnuplot 3.7.2. Added functions to convert 2, 4 and 8 bpp
  1563. color-mapped (i.e., paletted) images to 24 bpp color or
  1564. 8 bpp grayscale. Added several jbig2 application cores that
  1565. only require a simple wrapper to make into programs.
  1566. 1.4 30 Sep 02
  1567. Added interface to gnuplot 3.7.2 and to x11 display of images.
  1568. Added new functions with arrays of images for use in applications
  1569. such as jbig2 encoders, along with a simple jbig2 implementation
  1570. using either hausdorff or correlation scoring. Added centroid
  1571. finder for images. For accessing image arrays from arrays of
  1572. image arrays, added a "new reference" (NEW_REF) flag, with a
  1573. ref count attached to the array. Added power-of-2 binary
  1574. expansion and reduction.
  1575. 1.3 30 Jun 02
  1576. Extended connected components to 8. Added morphological
  1577. operations tophat and hdome, along with clipped arithmetic
  1578. operators on grayscale images. Fixed memory error in
  1579. rasteropGeneralLow() that was found using valgrind.
  1580. Tested most operations with valgrind for memory errors.
  1581. Replaced integer arrays with number arrays, to include floats.
  1582. Added arithmetic functions on grayscale images.
  1583. 1.2 30 May 02
  1584. Added connected component utility, stack utility, pix arrays,
  1585. line drawing and seed filling. Binary reconstruction,
  1586. both morphological and raster-oriented, are now supported
  1587. for 4 and 8 connected fills. Added the distance function
  1588. on binary images, grayscale reconstruction, and grayscale
  1589. morphology using the Gil-Werman method.
  1590. 1.1 30 Apr 02
  1591. Added orthogonal rotations, binary scaling, PS output,
  1592. binary reconstruction, integer arrays, structuring element
  1593. input/output.
  1594. 1.0 25 Feb 02
  1595. Initial distribution, with rasterops, binary morphology (two
  1596. implementations: rasterops and dwa), affine transforms
  1597. (translation, shear, scaling, rotation), fast convolution,
  1598. and basic i/o (BMP, PNG and JPEG).
  1599. </pre>
  1600. <!-- JS Window Closer -----
  1601. <form>
  1602. <center>
  1603. <input type="button" onclick="window.close();" value="Close this window">
  1604. </center>
  1605. </form>
  1606. ----- JS Window Closer -->
  1607. </body>
  1608. </html>