ruby-iup 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (323) hide show
  1. data/Rakefile +97 -0
  2. data/doc/README +10 -0
  3. data/doc/build_install.txt +77 -0
  4. data/examples/README +16 -0
  5. data/examples/ctrl/cbox.rb +221 -0
  6. data/examples/ctrl/checkboard.rb +33 -0
  7. data/examples/ctrl/degrade.rb +73 -0
  8. data/examples/ctrl/example1.rb +53 -0
  9. data/examples/ctrl/example2.rb +39 -0
  10. data/examples/ctrl/iupcolorbar.rb +95 -0
  11. data/examples/ctrl/iupcolorbrowser.rb +45 -0
  12. data/examples/ctrl/iupdial.rb +117 -0
  13. data/examples/ctrl/iupgauge.rb +242 -0
  14. data/examples/ctrl/iupgetcolor.rb +8 -0
  15. data/examples/ctrl/iupgetparam.rb +62 -0
  16. data/examples/ctrl/iupglcanvas.rb +172 -0
  17. data/examples/ctrl/iupmask.rb +15 -0
  18. data/examples/ctrl/iupmatrix.rb +39 -0
  19. data/examples/ctrl/iupplot2.rb +603 -0
  20. data/examples/ctrl/iuptabs.rb +22 -0
  21. data/examples/ctrl/iuptree.rb +190 -0
  22. data/examples/ctrl/iupval.rb +71 -0
  23. data/examples/ctrl/numbering.rb +46 -0
  24. data/examples/ctrl/sample.rb +166 -0
  25. data/examples/dlg/iupalarm.rb +14 -0
  26. data/examples/dlg/iupfiledlg.rb +19 -0
  27. data/examples/dlg/iupgetfile.rb +19 -0
  28. data/examples/dlg/iuplistdialog.rb +26 -0
  29. data/examples/dlg/iupmessage.rb +5 -0
  30. data/examples/dlg/iupscanf.rb +17 -0
  31. data/examples/elem/iupbutton.rb +197 -0
  32. data/examples/elem/iupcanvas.rb +27 -0
  33. data/examples/elem/iupcanvas2.rb +113 -0
  34. data/examples/elem/iupcanvas3.rb +62 -0
  35. data/examples/elem/iupdialog.rb +71 -0
  36. data/examples/elem/iupdialog2.rb +25 -0
  37. data/examples/elem/iupfill.rb +51 -0
  38. data/examples/elem/iupframe.rb +25 -0
  39. data/examples/elem/iuphbox.rb +68 -0
  40. data/examples/elem/iupimage.rb +113 -0
  41. data/examples/elem/iupitem.rb +60 -0
  42. data/examples/elem/iuplabel.rb +57 -0
  43. data/examples/elem/iuplist.rb +41 -0
  44. data/examples/elem/iuplist2.rb +125 -0
  45. data/examples/elem/iupmenu.rb +32 -0
  46. data/examples/elem/iupmultiline.rb +24 -0
  47. data/examples/elem/iupmultiline2.rb +156 -0
  48. data/examples/elem/iupradio.rb +32 -0
  49. data/examples/elem/iupseparator.rb +81 -0
  50. data/examples/elem/iupsubmenu.rb +85 -0
  51. data/examples/elem/iuptext.rb +61 -0
  52. data/examples/elem/iuptimer.rb +36 -0
  53. data/examples/elem/iuptoggle.rb +110 -0
  54. data/examples/elem/iupvbox.rb +87 -0
  55. data/examples/elem/iupzbox.rb +60 -0
  56. data/examples/elem/mdisample.rb +376 -0
  57. data/examples/elem/progressbar.rb +294 -0
  58. data/examples/elem/scrollbar.rb +66 -0
  59. data/examples/elem/tray.rb +90 -0
  60. data/examples/func/iupgetattribute.rb +32 -0
  61. data/examples/func/iupidle.rb +48 -0
  62. data/ext/extconf.rb +27 -0
  63. data/ext/iup-linux/include/cd.h +494 -0
  64. data/ext/iup-linux/include/cd_canvas.hpp +358 -0
  65. data/ext/iup-linux/include/cd_old.h +158 -0
  66. data/ext/iup-linux/include/cd_private.h +362 -0
  67. data/ext/iup-linux/include/cdcgm.h +34 -0
  68. data/ext/iup-linux/include/cdclipbd.h +22 -0
  69. data/ext/iup-linux/include/cddbuf.h +23 -0
  70. data/ext/iup-linux/include/cddebug.h +24 -0
  71. data/ext/iup-linux/include/cddgn.h +23 -0
  72. data/ext/iup-linux/include/cddxf.h +22 -0
  73. data/ext/iup-linux/include/cdemf.h +22 -0
  74. data/ext/iup-linux/include/cdgdiplus.h +29 -0
  75. data/ext/iup-linux/include/cdimage.h +23 -0
  76. data/ext/iup-linux/include/cdirgb.h +30 -0
  77. data/ext/iup-linux/include/cdiup.h +22 -0
  78. data/ext/iup-linux/include/cdlua.h +39 -0
  79. data/ext/iup-linux/include/cdlua3_private.h +120 -0
  80. data/ext/iup-linux/include/cdlua5_private.h +141 -0
  81. data/ext/iup-linux/include/cdluaim.h +24 -0
  82. data/ext/iup-linux/include/cdluaiup.h +27 -0
  83. data/ext/iup-linux/include/cdluapdf.h +27 -0
  84. data/ext/iup-linux/include/cdmf.h +24 -0
  85. data/ext/iup-linux/include/cdmf_private.h +32 -0
  86. data/ext/iup-linux/include/cdnative.h +26 -0
  87. data/ext/iup-linux/include/cdpdf.h +38 -0
  88. data/ext/iup-linux/include/cdpicture.h +22 -0
  89. data/ext/iup-linux/include/cdprint.h +23 -0
  90. data/ext/iup-linux/include/cdps.h +37 -0
  91. data/ext/iup-linux/include/cdwmf.h +22 -0
  92. data/ext/iup-linux/include/im.h +282 -0
  93. data/ext/iup-linux/include/im_attrib.h +116 -0
  94. data/ext/iup-linux/include/im_attrib_flat.h +39 -0
  95. data/ext/iup-linux/include/im_binfile.h +214 -0
  96. data/ext/iup-linux/include/im_capture.h +365 -0
  97. data/ext/iup-linux/include/im_color.h +465 -0
  98. data/ext/iup-linux/include/im_colorhsi.h +61 -0
  99. data/ext/iup-linux/include/im_complex.h +160 -0
  100. data/ext/iup-linux/include/im_convert.h +127 -0
  101. data/ext/iup-linux/include/im_counter.h +69 -0
  102. data/ext/iup-linux/include/im_dib.h +195 -0
  103. data/ext/iup-linux/include/im_file.h +111 -0
  104. data/ext/iup-linux/include/im_format.h +79 -0
  105. data/ext/iup-linux/include/im_format_all.h +576 -0
  106. data/ext/iup-linux/include/im_format_avi.h +87 -0
  107. data/ext/iup-linux/include/im_format_ecw.h +93 -0
  108. data/ext/iup-linux/include/im_format_jp2.h +78 -0
  109. data/ext/iup-linux/include/im_format_raw.h +64 -0
  110. data/ext/iup-linux/include/im_format_wmv.h +100 -0
  111. data/ext/iup-linux/include/im_image.h +403 -0
  112. data/ext/iup-linux/include/im_kernel.h +315 -0
  113. data/ext/iup-linux/include/im_lib.h +191 -0
  114. data/ext/iup-linux/include/im_math.h +368 -0
  115. data/ext/iup-linux/include/im_math_op.h +219 -0
  116. data/ext/iup-linux/include/im_palette.h +172 -0
  117. data/ext/iup-linux/include/im_plus.h +73 -0
  118. data/ext/iup-linux/include/im_process.h +35 -0
  119. data/ext/iup-linux/include/im_process_ana.h +221 -0
  120. data/ext/iup-linux/include/im_process_glo.h +170 -0
  121. data/ext/iup-linux/include/im_process_loc.h +577 -0
  122. data/ext/iup-linux/include/im_process_pon.h +712 -0
  123. data/ext/iup-linux/include/im_raw.h +34 -0
  124. data/ext/iup-linux/include/im_util.h +277 -0
  125. data/ext/iup-linux/include/imlua.h +83 -0
  126. data/ext/iup-linux/include/iup.h +255 -0
  127. data/ext/iup-linux/include/iup_pplot.h +40 -0
  128. data/ext/iup-linux/include/iupcb.h +25 -0
  129. data/ext/iup-linux/include/iupcbox.h +23 -0
  130. data/ext/iup-linux/include/iupcbs.h +42 -0
  131. data/ext/iup-linux/include/iupcells.h +130 -0
  132. data/ext/iup-linux/include/iupcolorbar.h +126 -0
  133. data/ext/iup-linux/include/iupcompat.h +62 -0
  134. data/ext/iup-linux/include/iupcontrols.h +40 -0
  135. data/ext/iup-linux/include/iupcpi.h +76 -0
  136. data/ext/iup-linux/include/iupdef.h +520 -0
  137. data/ext/iup-linux/include/iupdial.h +64 -0
  138. data/ext/iup-linux/include/iupgauge.h +57 -0
  139. data/ext/iup-linux/include/iupgc.h +20 -0
  140. data/ext/iup-linux/include/iupgetparam.h +27 -0
  141. data/ext/iup-linux/include/iupgl.h +101 -0
  142. data/ext/iup-linux/include/iupim.h +21 -0
  143. data/ext/iup-linux/include/iupkey.h +290 -0
  144. data/ext/iup-linux/include/iuplua.h +41 -0
  145. data/ext/iup-linux/include/iuplua_pplot.h +26 -0
  146. data/ext/iup-linux/include/iupluacontrols.h +27 -0
  147. data/ext/iup-linux/include/iupluagl.h +26 -0
  148. data/ext/iup-linux/include/iupluaim.h +26 -0
  149. data/ext/iup-linux/include/iupluaole.h +26 -0
  150. data/ext/iup-linux/include/iupmask.h +52 -0
  151. data/ext/iup-linux/include/iupmatrix.h +69 -0
  152. data/ext/iup-linux/include/iupole.h +24 -0
  153. data/ext/iup-linux/include/iupsbox.h +20 -0
  154. data/ext/iup-linux/include/iupspeech.h +23 -0
  155. data/ext/iup-linux/include/iupspin.h +21 -0
  156. data/ext/iup-linux/include/iuptabs.h +79 -0
  157. data/ext/iup-linux/include/iuptree.h +93 -0
  158. data/ext/iup-linux/include/iupval.h +46 -0
  159. data/ext/iup-linux/include/lauxlib.h +174 -0
  160. data/ext/iup-linux/include/lua.h +388 -0
  161. data/ext/iup-linux/include/lua.hpp +9 -0
  162. data/ext/iup-linux/include/luaconf.h +763 -0
  163. data/ext/iup-linux/include/lualib.h +53 -0
  164. data/ext/iup-linux/include/old_im.h +59 -0
  165. data/ext/iup-linux/include/wd.h +78 -0
  166. data/ext/iup-linux/include/wd_old.h +85 -0
  167. data/ext/iup-linux/libcd.so +0 -0
  168. data/ext/iup-linux/libcdcontextplus.so +0 -0
  169. data/ext/iup-linux/libcdluacontextplus51.so +0 -0
  170. data/ext/iup-linux/libcdpdf.so +0 -0
  171. data/ext/iup-linux/libfreetype.so +0 -0
  172. data/ext/iup-linux/libim.so +0 -0
  173. data/ext/iup-linux/libim_fftw.so +0 -0
  174. data/ext/iup-linux/libim_jp2.so +0 -0
  175. data/ext/iup-linux/libim_process.so +0 -0
  176. data/ext/iup-linux/libiup.so +0 -0
  177. data/ext/iup-linux/libiup_pplot.so +0 -0
  178. data/ext/iup-linux/libiupcd.so +0 -0
  179. data/ext/iup-linux/libiupcontrols.so +0 -0
  180. data/ext/iup-linux/libiupgl.so +0 -0
  181. data/ext/iup-linux/libiupim.so +0 -0
  182. data/ext/iup-linux/libiupimglib.so +0 -0
  183. data/ext/iup-linux/libpdflib.so +0 -0
  184. data/ext/iup-win32/cd.dll +0 -0
  185. data/ext/iup-win32/cd.lib +0 -0
  186. data/ext/iup-win32/cdcontextplus.dll +0 -0
  187. data/ext/iup-win32/cdcontextplus.lib +0 -0
  188. data/ext/iup-win32/cdlua51.lib +0 -0
  189. data/ext/iup-win32/cdluacontextplus51.lib +0 -0
  190. data/ext/iup-win32/cdluaim51.lib +0 -0
  191. data/ext/iup-win32/cdluapdf51.lib +0 -0
  192. data/ext/iup-win32/cdpdf.dll +0 -0
  193. data/ext/iup-win32/cdpdf.lib +0 -0
  194. data/ext/iup-win32/freetype6.dll +0 -0
  195. data/ext/iup-win32/freetype6.lib +0 -0
  196. data/ext/iup-win32/im.dll +0 -0
  197. data/ext/iup-win32/im_avi.dll +0 -0
  198. data/ext/iup-win32/im_capture.dll +0 -0
  199. data/ext/iup-win32/im_ecw.dll +0 -0
  200. data/ext/iup-win32/im_fftw.dll +0 -0
  201. data/ext/iup-win32/im_jp2.dll +0 -0
  202. data/ext/iup-win32/im_process.dll +0 -0
  203. data/ext/iup-win32/im_wmv.dll +0 -0
  204. data/ext/iup-win32/include/cd.h +494 -0
  205. data/ext/iup-win32/include/cd_canvas.hpp +358 -0
  206. data/ext/iup-win32/include/cd_old.h +158 -0
  207. data/ext/iup-win32/include/cd_private.h +362 -0
  208. data/ext/iup-win32/include/cdcgm.h +34 -0
  209. data/ext/iup-win32/include/cdclipbd.h +22 -0
  210. data/ext/iup-win32/include/cddbuf.h +23 -0
  211. data/ext/iup-win32/include/cddebug.h +24 -0
  212. data/ext/iup-win32/include/cddgn.h +23 -0
  213. data/ext/iup-win32/include/cddxf.h +22 -0
  214. data/ext/iup-win32/include/cdemf.h +22 -0
  215. data/ext/iup-win32/include/cdgdiplus.h +29 -0
  216. data/ext/iup-win32/include/cdimage.h +23 -0
  217. data/ext/iup-win32/include/cdirgb.h +30 -0
  218. data/ext/iup-win32/include/cdiup.h +22 -0
  219. data/ext/iup-win32/include/cdlua.h +39 -0
  220. data/ext/iup-win32/include/cdlua3_private.h +120 -0
  221. data/ext/iup-win32/include/cdlua5_private.h +141 -0
  222. data/ext/iup-win32/include/cdluaim.h +24 -0
  223. data/ext/iup-win32/include/cdluaiup.h +27 -0
  224. data/ext/iup-win32/include/cdluapdf.h +27 -0
  225. data/ext/iup-win32/include/cdmf.h +24 -0
  226. data/ext/iup-win32/include/cdmf_private.h +32 -0
  227. data/ext/iup-win32/include/cdnative.h +26 -0
  228. data/ext/iup-win32/include/cdpdf.h +38 -0
  229. data/ext/iup-win32/include/cdpicture.h +22 -0
  230. data/ext/iup-win32/include/cdprint.h +23 -0
  231. data/ext/iup-win32/include/cdps.h +37 -0
  232. data/ext/iup-win32/include/cdwmf.h +22 -0
  233. data/ext/iup-win32/include/iup.h +255 -0
  234. data/ext/iup-win32/include/iup_pplot.h +40 -0
  235. data/ext/iup-win32/include/iupcb.h +25 -0
  236. data/ext/iup-win32/include/iupcbox.h +23 -0
  237. data/ext/iup-win32/include/iupcbs.h +42 -0
  238. data/ext/iup-win32/include/iupcells.h +130 -0
  239. data/ext/iup-win32/include/iupcolorbar.h +126 -0
  240. data/ext/iup-win32/include/iupcompat.h +62 -0
  241. data/ext/iup-win32/include/iupcontrols.h +40 -0
  242. data/ext/iup-win32/include/iupcpi.h +76 -0
  243. data/ext/iup-win32/include/iupdef.h +520 -0
  244. data/ext/iup-win32/include/iupdial.h +64 -0
  245. data/ext/iup-win32/include/iupgauge.h +57 -0
  246. data/ext/iup-win32/include/iupgc.h +20 -0
  247. data/ext/iup-win32/include/iupgetparam.h +27 -0
  248. data/ext/iup-win32/include/iupgl.h +101 -0
  249. data/ext/iup-win32/include/iupim.h +21 -0
  250. data/ext/iup-win32/include/iupkey.h +290 -0
  251. data/ext/iup-win32/include/iuplua.h +41 -0
  252. data/ext/iup-win32/include/iuplua_pplot.h +26 -0
  253. data/ext/iup-win32/include/iupluacontrols.h +27 -0
  254. data/ext/iup-win32/include/iupluagl.h +26 -0
  255. data/ext/iup-win32/include/iupluaim.h +26 -0
  256. data/ext/iup-win32/include/iupluaole.h +26 -0
  257. data/ext/iup-win32/include/iupmask.h +52 -0
  258. data/ext/iup-win32/include/iupmatrix.h +69 -0
  259. data/ext/iup-win32/include/iupole.h +24 -0
  260. data/ext/iup-win32/include/iupsbox.h +20 -0
  261. data/ext/iup-win32/include/iupspeech.h +23 -0
  262. data/ext/iup-win32/include/iupspin.h +21 -0
  263. data/ext/iup-win32/include/iuptabs.h +79 -0
  264. data/ext/iup-win32/include/iuptree.h +93 -0
  265. data/ext/iup-win32/include/iupval.h +46 -0
  266. data/ext/iup-win32/include/wd.h +78 -0
  267. data/ext/iup-win32/include/wd_old.h +85 -0
  268. data/ext/iup-win32/iup.dll +0 -0
  269. data/ext/iup-win32/iup.lib +0 -0
  270. data/ext/iup-win32/iup_pplot.dll +0 -0
  271. data/ext/iup-win32/iup_pplot.lib +0 -0
  272. data/ext/iup-win32/iupcd.dll +0 -0
  273. data/ext/iup-win32/iupcd.lib +0 -0
  274. data/ext/iup-win32/iupcontrols.dll +0 -0
  275. data/ext/iup-win32/iupcontrols.lib +0 -0
  276. data/ext/iup-win32/iupgl.dll +0 -0
  277. data/ext/iup-win32/iupgl.lib +0 -0
  278. data/ext/iup-win32/iupim.dll +0 -0
  279. data/ext/iup-win32/iupim.lib +0 -0
  280. data/ext/iup-win32/iupimglib.dll +0 -0
  281. data/ext/iup-win32/iupimglib.lib +0 -0
  282. data/ext/iup-win32/iuplua51.lib +0 -0
  283. data/ext/iup-win32/iuplua_pplot51.lib +0 -0
  284. data/ext/iup-win32/iupluacd51.lib +0 -0
  285. data/ext/iup-win32/iupluacontrols51.lib +0 -0
  286. data/ext/iup-win32/iupluagl51.lib +0 -0
  287. data/ext/iup-win32/iupluaim51.lib +0 -0
  288. data/ext/iup-win32/iupluaimglib51.lib +0 -0
  289. data/ext/iup-win32/iupluaole51.lib +0 -0
  290. data/ext/iup-win32/iupole.dll +0 -0
  291. data/ext/iup-win32/iupole.lib +0 -0
  292. data/ext/iup-win32/iupstub.lib +0 -0
  293. data/ext/iup-win32/pdflib.dll +0 -0
  294. data/ext/iup-win32/pdflib.lib +0 -0
  295. data/ext/iup.c +1261 -0
  296. data/ext/mkrf_conf.rb +72 -0
  297. data/ext/rb_cd.h +1525 -0
  298. data/ext/rb_iup.h +2446 -0
  299. data/ext/rb_iup_pplot.h +129 -0
  300. data/ext/rb_iupcb.h +13 -0
  301. data/ext/rb_iupcbox.h +40 -0
  302. data/ext/rb_iupcells.h +15 -0
  303. data/ext/rb_iupcolorbar.h +17 -0
  304. data/ext/rb_iupcompat.h +237 -0
  305. data/ext/rb_iupcontrols.h +28 -0
  306. data/ext/rb_iupdef.h +3 -0
  307. data/ext/rb_iupdial.h +24 -0
  308. data/ext/rb_iupgauge.h +15 -0
  309. data/ext/rb_iupgc.h +18 -0
  310. data/ext/rb_iupgetparam.h +72 -0
  311. data/ext/rb_iupgl.h +58 -0
  312. data/ext/rb_iupim.h +25 -0
  313. data/ext/rb_iupmask.h +189 -0
  314. data/ext/rb_iupmatrix.h +80 -0
  315. data/ext/rb_iupole.h +24 -0
  316. data/ext/rb_iupsbox.h +23 -0
  317. data/ext/rb_iupspeech.h +25 -0
  318. data/ext/rb_iupspin.h +29 -0
  319. data/ext/rb_iuptabs.h +29 -0
  320. data/ext/rb_iuptree.h +94 -0
  321. data/ext/rb_iupval.h +24 -0
  322. data/lib/README +1 -0
  323. metadata +391 -0
@@ -0,0 +1,170 @@
1
+ /** \file
2
+ * \brief Image Processing - Global Operations
3
+ *
4
+ * See Copyright Notice in im_lib.h
5
+ */
6
+
7
+ #ifndef __IM_PROCESS_GLO_H
8
+ #define __IM_PROCESS_GLO_H
9
+
10
+ #include "im_image.h"
11
+
12
+ #if defined(__cplusplus)
13
+ extern "C" {
14
+ #endif
15
+
16
+
17
+
18
+ /** \defgroup transform Other Domain Transform Operations
19
+ * \par
20
+ * Hough, Distance.
21
+ *
22
+ * See \ref im_process_glo.h
23
+ * \ingroup process */
24
+
25
+ /** Hough Lines Transform. \n
26
+ * It will detect white lines in a black background. So the source image must be a IM_BINARY image
27
+ * with the white lines of interest enhanced. The better the threshold with the white lines the better
28
+ * the line detection. \n
29
+ * The destiny image must have IM_GRAY, IM_INT, hg_width=180, hg_height=2*rmax+1,
30
+ * where rmax is the image diagonal/2 (rmax = srqrt(width*width + height*height)). \n
31
+ * The hough transform defines "cos(theta) * X + sin(theta) * Y = rho" and the parameters are in the interval: \n
32
+ * theta = "0 .. 179", rho = "-hg_height/2 .. hg_height/2" .\n
33
+ * Where rho is the perpendicular distance from the center of the image and theta the angle with the normal.
34
+ * So do not confuse theta with the line angle, they are perpendicular. \n
35
+ * Returns zero if the counter aborted. \n
36
+ * Inspired from ideas in XITE, Copyright 1991, Blab, UiO \n
37
+ * http://www.ifi.uio.no/~blab/Software/Xite/
38
+ *
39
+ * \verbatim im.ProcessHoughLines(src_image: imImage, dst_image: imImage) -> counter: boolean [in Lua 5] \endverbatim
40
+ * \verbatim im.ProcessHoughLinesNew(image: imImage) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
41
+ * \ingroup transform */
42
+ int imProcessHoughLines(const imImage* src_image, imImage* dst_image);
43
+
44
+ /** Draw detected hough lines. \n
45
+ * The source image must be IM_GRAY and IM_BYTE. The destiny image can be a clone of the source image or
46
+ * it can be the source image for in place processing. \n
47
+ * If the hough transform is not NULL, then the hough points are filtered to include only lines
48
+ * that are significally different from each other. \n
49
+ * The hough image is the hough transform image, but it is optional and can be NULL.
50
+ * If not NULL then it will be used to filter lines that are very similar. \n
51
+ * The hough points image is a hough transform image that was thresholded to a IM_BINARY image,
52
+ * usually using a Local Max threshold operation (see \ref imProcessLocalMaxThreshold). Again the better the threshold the better the results. \n
53
+ * The destiny image will be set to IM_MAP, and the detected lines will be drawn using a red color. \n
54
+ * Returns the number of detected lines.
55
+ *
56
+ * \verbatim im.ProcessHoughLinesDraw(src_image: imImage, hough: imImage, hough_points: imImage, dst_image: imImage) -> lines: number [in Lua 5] \endverbatim
57
+ * \verbatim im.ProcessHoughLinesDrawNew(image: imImage, hough: imImage, hough_points: imImage) -> lines: number, new_image: imImage [in Lua 5] \endverbatim
58
+ * \ingroup transform */
59
+ int imProcessHoughLinesDraw(const imImage* src_image, const imImage* hough, const imImage* hough_points, imImage* dst_image);
60
+
61
+ /** Calculates the Cross Correlation in the frequency domain. \n
62
+ * CrossCorr(a,b) = IFFT(Conj(FFT(a))*FFT(b)) \n
63
+ * Images must be of the same size and only destiny image must be of type complex.
64
+ *
65
+ * \verbatim im.ProcessCrossCorrelation(src_image1: imImage, src_image2: imImage, dst_image: imImage) [in Lua 5] \endverbatim
66
+ * \verbatim im.ProcessCrossCorrelationNew(image1: imImage, image2: imImage) -> new_image: imImage [in Lua 5] \endverbatim
67
+ * \ingroup transform */
68
+ void imProcessCrossCorrelation(const imImage* src_image1, const imImage* src_image2, imImage* dst_image);
69
+
70
+ /** Calculates the Auto Correlation in the frequency domain. \n
71
+ * Uses the cross correlation.
72
+ * Images must be of the same size and only destiny image must be of type complex.
73
+ *
74
+ * \verbatim im.ProcessAutoCorrelation(src_image: imImage, dst_image: imImage) [in Lua 5] \endverbatim
75
+ * \verbatim im.ProcessAutoCorrelationNew(image: imImage) -> new_image: imImage [in Lua 5] \endverbatim
76
+ * \ingroup transform */
77
+ void imProcessAutoCorrelation(const imImage* src_image, imImage* dst_image);
78
+
79
+ /** Calculates the Distance Transform of a binary image
80
+ * using an aproximation of the euclidian distance.\n
81
+ * Each white pixel in the binary image is
82
+ * assigned a value equal to its distance from the nearest
83
+ * black pixel. \n
84
+ * Uses a two-pass algorithm incrementally calculating the distance. \n
85
+ * Source image must be IM_BINARY, destiny must be IM_FLOAT.
86
+ *
87
+ * \verbatim im.ProcessDistanceTransform(src_image: imImage, dst_image: imImage) [in Lua 5] \endverbatim
88
+ * \verbatim im.ProcessDistanceTransformNew(image: imImage) -> new_image: imImage [in Lua 5] \endverbatim
89
+ * \ingroup transform */
90
+ void imProcessDistanceTransform(const imImage* src_image, imImage* dst_image);
91
+
92
+ /** Marks all the regional maximum of the distance transform. \n
93
+ * source is IMGRAY/IM_FLOAT destiny in IM_BINARY. \n
94
+ * We consider maximum all connected pixel values that have smaller pixel values around it.
95
+ *
96
+ * \verbatim im.ProcessRegionalMaximum(src_image: imImage, dst_image: imImage) [in Lua 5] \endverbatim
97
+ * \verbatim im.ProcessRegionalMaximumNew(image: imImage) -> new_image: imImage [in Lua 5] \endverbatim
98
+ * \ingroup transform */
99
+ void imProcessRegionalMaximum(const imImage* src_image, imImage* dst_image);
100
+
101
+
102
+
103
+ /** \defgroup fourier Fourier Transform Operations
104
+ * \par
105
+ * All Fourier transforms use FFTW library version 2.1.5. \n
106
+ * Although there are newer versions, we build binaries only to version 2
107
+ * because it is small and as fast as newer versions.
108
+ * Source code to use FFTW version 3 is available.
109
+ * \par
110
+ * FFTW Copyright Matteo Frigo, Steven G. Johnson and the MIT. \n
111
+ * http://www.fftw.org \n
112
+ * See "fftw.h"
113
+ * \par
114
+ * Must link with "im_fftw" library. \n
115
+ * \par
116
+ * The FFTW lib has a GPL license. The license of the "im_fftw" library is automatically the GPL.
117
+ * So you cannot use it for commercial applications without contacting the authors.
118
+ * \par
119
+ * See \ref im_process_glo.h
120
+ * \ingroup process */
121
+
122
+ /** Forward FFT. \n
123
+ * The result has its lowest frequency at the center of the image. \n
124
+ * This is an unnormalized fft. \n
125
+ * Images must be of the same size. Destiny image must be of type complex.
126
+ *
127
+ * \verbatim im.ProcessFFT(src_image: imImage, dst_image: imImage) [in Lua 5] \endverbatim
128
+ * \verbatim im.ProcessFFTNew(image: imImage) -> new_image: imImage [in Lua 5] \endverbatim
129
+ * \ingroup fourier */
130
+ void imProcessFFT(const imImage* src_image, imImage* dst_image);
131
+
132
+ /** Inverse FFT. \n
133
+ * The image has its lowest frequency restored to the origin before the transform. \n
134
+ * The result is normalized by (width*height). \n
135
+ * Images must be of the same size and both must be of type complex.
136
+ *
137
+ * \verbatim im.ProcessIFFT(src_image: imImage, dst_image: imImage) [in Lua 5] \endverbatim
138
+ * \verbatim im.ProcessIFFTNew(image: imImage) -> new_image: imImage [in Lua 5] \endverbatim
139
+ * \ingroup fourier */
140
+ void imProcessIFFT(const imImage* src_image, imImage* dst_image);
141
+
142
+ /** Raw in-place FFT (forward or inverse). \n
143
+ * The lowest frequency can be centered after forward, or
144
+ * can be restored to the origin before inverse. \n
145
+ * The result can be normalized after the transform by sqrt(w*h) [1] or by (w*h) [2],
146
+ * or left unnormalized [0]. \n
147
+ * Images must be of the same size and both must be of type complex.
148
+ *
149
+ * \verbatim im.ProcessFFTraw(image: imImage, inverse: number, center: number, normalize: number) [in Lua 5] \endverbatim
150
+ * \ingroup fourier */
151
+ void imProcessFFTraw(imImage* image, int inverse, int center, int normalize);
152
+
153
+ /** Auxiliary function for the raw FFT. \n
154
+ * This is the function used internally to change the lowest frequency position in the image. \n
155
+ * If the image size has even dimensions the flag "center2origin" is useless. But if it is odd,
156
+ * you must specify if its from center to origin (usually used before inverse) or
157
+ * from origin to center (usually used after forward). \n
158
+ * Notice that this function is used for images in the the frequency domain. \n
159
+ * Image type must be complex.
160
+ *
161
+ * \verbatim im.ProcessSwapQuadrants(image: imImage, center2origin: number) [in Lua 5] \endverbatim
162
+ * \ingroup fourier */
163
+ void imProcessSwapQuadrants(imImage* image, int center2origin);
164
+
165
+
166
+ #if defined(__cplusplus)
167
+ }
168
+ #endif
169
+
170
+ #endif
@@ -0,0 +1,577 @@
1
+ /** \file
2
+ * \brief Image Processing - Local Operations
3
+ *
4
+ * See Copyright Notice in im_lib.h
5
+ */
6
+
7
+ #ifndef __IM_PROCESS_LOC_H
8
+ #define __IM_PROCESS_LOC_H
9
+
10
+ #include "im_image.h"
11
+
12
+ #if defined(__cplusplus)
13
+ extern "C" {
14
+ #endif
15
+
16
+
17
+
18
+ /** \defgroup resize Image Resize
19
+ * \par
20
+ * Operations to change the image size.
21
+ * \par
22
+ * See \ref im_process_loc.h
23
+ * \ingroup process */
24
+
25
+ /** Only reduze the image size using the given decimation order. \n
26
+ * Supported decimation orders:
27
+ * \li 0 - zero order (mean)
28
+ * \li 1 - first order (bilinear decimation)
29
+ * Images must be of the same type. If image type is IM_MAP or IM_BINARY, must use order=0. \n
30
+ * Returns zero if the counter aborted.
31
+ *
32
+ * \verbatim im.ProcessReduce(src_image: imImage, dst_image: imImage, order: number) -> counter: boolean [in Lua 5] \endverbatim
33
+ * \verbatim im.ProcessReduceNew(image: imImage, order: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
34
+ * \ingroup resize */
35
+ int imProcessReduce(const imImage* src_image, imImage* dst_image, int order);
36
+
37
+ /** Change the image size using the given interpolation order. \n
38
+ * Supported interpolation orders:
39
+ * \li 0 - zero order (near neighborhood)
40
+ * \li 1 - first order (bilinear interpolation)
41
+ * \li 3 - third order (bicubic interpolation)
42
+ * Images must be of the same type. If image type is IM_MAP or IM_BINARY, must use order=0. \n
43
+ * Returns zero if the counter aborted.
44
+ *
45
+ * \verbatim im.ProcessResize(src_image: imImage, dst_image: imImage, order: number) -> counter: boolean [in Lua 5] \endverbatim
46
+ * \verbatim im.ProcessResizeNew(image: imImage, order: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
47
+ * \ingroup resize */
48
+ int imProcessResize(const imImage* src_image, imImage* dst_image, int order);
49
+
50
+ /** Reduze the image area by 4 (w/2,h/2). \n
51
+ * Images must be of the same type. Destiny image size must be source image width/2, height/2.
52
+ * Can not operate on IM_MAP nor IM_BINARY images.
53
+ *
54
+ * \verbatim im.ProcessReduceBy4(src_image: imImage, dst_image: imImage) [in Lua 5] \endverbatim
55
+ * \verbatim im.ProcessReduceBy4New(image: imImage) -> new_image: imImage [in Lua 5] \endverbatim
56
+ * \ingroup resize */
57
+ void imProcessReduceBy4(const imImage* src_image, imImage* dst_image);
58
+
59
+ /** Extract a rectangular region from an image. \n
60
+ * Images must be of the same type. Destiny image size must be smaller than source image width-xmin, height-ymin. \n
61
+ * ymin and xmin must be >0 and <size.
62
+ *
63
+ * \verbatim im.ProcessCrop(src_image: imImage, dst_image: imImage, xmin: number, ymin: number) [in Lua 5] \endverbatim
64
+ * \verbatim im.ProcessCropNew(image: imImage, xmin: number, xmax: number, ymin: number, ymax: number) -> new_image: imImage [in Lua 5] \endverbatim
65
+ * \ingroup resize */
66
+ void imProcessCrop(const imImage* src_image, imImage* dst_image, int xmin, int ymin);
67
+
68
+ /** Insert a rectangular region in an image. \n
69
+ * Images must be of the same type. Region image size can be larger than source image. \n
70
+ * ymin and xmin must be >0 and <size. \n
71
+ * Source and destiny must be of the same size. Can be done in place.
72
+ *
73
+ * \verbatim im.ProcessInsert(src_image: imImage, region_image: imImage, dst_image: imImage, xmin: number, ymin: number) [in Lua 5] \endverbatim
74
+ * \verbatim im.ProcessInsertNew(image: imImage, region_image: imImage, xmin: number, ymin: number) -> new_image: imImage [in Lua 5] \endverbatim
75
+ * \ingroup resize */
76
+ void imProcessInsert(const imImage* src_image, const imImage* region_image, imImage* dst_image, int xmin, int ymin);
77
+
78
+ /** Increase the image size by adding pixels with zero value. \n
79
+ * Images must be of the same type. Destiny image size must be greatter than source image width+xmin, height+ymin.
80
+ *
81
+ * \verbatim im.ProcessAddMargins(src_image: imImage, dst_image: imImage, xmin: number, ymin: number) [in Lua 5] \endverbatim
82
+ * \verbatim im.ProcessAddMarginsNew(image: imImage, xmin: number, xmax: number, ymin: number, ymax: number) -> new_image: imImage [in Lua 5] \endverbatim
83
+ * \ingroup resize */
84
+ void imProcessAddMargins(const imImage* src_image, imImage* dst_image, int xmin, int ymin);
85
+
86
+
87
+
88
+ /** \defgroup geom Geometric Operations
89
+ * \par
90
+ * Operations to change the shape of the image.
91
+ * \par
92
+ * See \ref im_process_loc.h
93
+ * \ingroup process */
94
+
95
+ /** Calculates the size of the new image after rotation.
96
+ *
97
+ * \verbatim im.ProcessCalcRotateSize(width: number, height: number, cos0: number, sin0: number) [in Lua 5] \endverbatim
98
+ * \ingroup geom */
99
+ void imProcessCalcRotateSize(int width, int height, int *new_width, int *new_height, double cos0, double sin0);
100
+
101
+ /** Rotates the image using the given interpolation order (see \ref imProcessResize). \n
102
+ * Images must be of the same type. The destiny size can be calculated using \ref imProcessCalcRotateSize to fit the new image size,
103
+ * or can be any size, including the original size. The rotation is relative to the center of the image. \n
104
+ * Returns zero if the counter aborted.
105
+ *
106
+ * \verbatim im.ProcessRotate(src_image: imImage, dst_image: imImage, cos0: number, sin0: number, order: number) -> counter: boolean [in Lua 5] \endverbatim
107
+ * \verbatim im.ProcessRotateNew(image: imImage, cos0: number, sin0: number, order: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
108
+ * \ingroup geom */
109
+ int imProcessRotate(const imImage* src_image, imImage* dst_image, double cos0, double sin0, int order);
110
+
111
+ /** Rotates the image using the given interpolation order (see \ref imProcessResize). \n
112
+ * Images must be of the same type. Destiny can have any size, including the original size. \n
113
+ * The rotation is relative to the reference point. But the result can be shifted to the origin. \n
114
+ * Returns zero if the counter aborted.
115
+ *
116
+ * \verbatim im.ProcessRotateRef(src_image: imImage, dst_image: imImage, cos0: number, sin0: number, x: number, y: number, to_origin: boolean, order: number) -> counter: boolean [in Lua 5] \endverbatim
117
+ * \verbatim im.ProcessRotateRefNew(image: imImage, cos0: number, sin0: number, x: number, y: number, to_origin: boolean, order: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
118
+ * \ingroup geom */
119
+ int imProcessRotateRef(const imImage* src_image, imImage* dst_image, double cos0, double sin0, int x, int y, int to_origin, int order);
120
+
121
+ /** Rotates the image in 90 degrees counterclockwise or clockwise. Swap columns by lines. \n
122
+ * Images must be of the same type. Destiny width and height must be source height and width. \n
123
+ * Direction can be clockwise (1) or counter clockwise (-1).
124
+ *
125
+ * \verbatim im.ProcessRotate90(src_image: imImage, dst_image: imImage, dir_clockwise: boolean) [in Lua 5] \endverbatim
126
+ * \verbatim im.ProcessRotate90New(image: imImage, dir_clockwise: boolean) -> new_image: imImage [in Lua 5] \endverbatim
127
+ * \ingroup geom */
128
+ void imProcessRotate90(const imImage* src_image, imImage* dst_image, int dir_clockwise);
129
+
130
+ /** Rotates the image in 180 degrees. Swap columns and swap lines. \n
131
+ * Images must be of the same type and size.
132
+ *
133
+ * \verbatim im.ProcessRotate180(src_image: imImage, dst_image: imImage) [in Lua 5] \endverbatim
134
+ * \verbatim im.ProcessRotate180New(image: imImage) -> new_image: imImage [in Lua 5] \endverbatim
135
+ * \ingroup geom */
136
+ void imProcessRotate180(const imImage* src_image, imImage* dst_image);
137
+
138
+ /** Mirror the image in a horizontal flip. Swap columns. \n
139
+ * Images must be of the same type and size.
140
+ * Can be done in-place.
141
+ *
142
+ * \verbatim im.ProcessMirror(src_image: imImage, dst_image: imImage) [in Lua 5] \endverbatim
143
+ * \verbatim im.ProcessMirrorNew(image: imImage) -> new_image: imImage [in Lua 5] \endverbatim
144
+ * \ingroup geom */
145
+ void imProcessMirror(const imImage* src_image, imImage* dst_image);
146
+
147
+ /** Apply a vertical flip. Swap lines. \n
148
+ * Images must be of the same type and size.
149
+ * Can be done in-place.
150
+ *
151
+ * \verbatim im.ProcessFlip(src_image: imImage, dst_image: imImage) [in Lua 5] \endverbatim
152
+ * \verbatim im.ProcessFlipNew(image: imImage) -> new_image: imImage [in Lua 5] \endverbatim
153
+ * \ingroup geom */
154
+ void imProcessFlip(const imImage* src_image, imImage* dst_image);
155
+
156
+ /** Apply a radial distortion using the given interpolation order (see imProcessResize). \n
157
+ * Images must be of the same type and size. Returns zero if the counter aborted.
158
+ *
159
+ * \verbatim im.ProcessRadial(src_image: imImage, dst_image: imImage, k1: number, order: number) -> counter: boolean [in Lua 5] \endverbatim
160
+ * \verbatim im.ProcessRadialNew(image: imImage, k1: number, order: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
161
+ * \ingroup geom */
162
+ int imProcessRadial(const imImage* src_image, imImage* dst_image, float k1, int order);
163
+
164
+ /** Apply a swirl distortion using the given interpolation order (see imProcessResize). \n
165
+ * Images must be of the same type and size. Returns zero if the counter aborted.
166
+ *
167
+ * \verbatim im.ProcessSwirl(src_image: imImage, dst_image: imImage, k: number, order: number) -> counter: boolean [in Lua 5] \endverbatim
168
+ * \verbatim im.ProcessSwirlNew(image: imImage, k: number, order: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
169
+ * \ingroup geom */
170
+ int imProcessSwirl(const imImage* src_image, imImage* dst_image, float k1, int order);
171
+
172
+ /** Split the image in two images, one containing the odd lines and other containing the even lines. \n
173
+ * Images must be of the same type. Height of the output images must be half the height of the input image.
174
+ * If the height of the input image is odd then the first image must have height equals to half+1.
175
+ *
176
+ * \verbatim im.ProcessInterlaceSplit(src_image: imImage, dst_image1: imImage, dst_image2: imImage) [in Lua 5] \endverbatim
177
+ * \verbatim im.ProcessInterlaceSplitNew(image: imImage) -> new_image1: imImage, new_image2: imImage [in Lua 5] \endverbatim
178
+ * \ingroup geom */
179
+ void imProcessInterlaceSplit(const imImage* src_image, imImage* dst_image1, imImage* dst_image2);
180
+
181
+
182
+
183
+ /** \defgroup morphgray Morphology Operations for Gray Images
184
+ * \par
185
+ * See \ref im_process_loc.h
186
+ * \ingroup process */
187
+
188
+ /** Base gray morphology convolution. \n
189
+ * Supports all data types except IM_CFLOAT. Can be applied on color images. \n
190
+ * Kernel is always IM_INT. Use kernel size odd for better results. \n
191
+ * Use -1 for don't care positions in kernel. Kernel values are added to image values, then \n
192
+ * you can use the maximum or the minimum within the kernel area. \n
193
+ * No border extensions are used.
194
+ * All the gray morphology operations use this function. \n
195
+ * If the kernel image attribute "Description" exists it is used by the counter.
196
+ *
197
+ * \verbatim im.ProcessGrayMorphConvolve(src_image: imImage, dst_image: imImage, kernel: imImage, ismax: boolean) -> counter: boolean [in Lua 5] \endverbatim
198
+ * \verbatim im.ProcessGrayMorphConvolveNew(image: imImage, kernel: imImage, ismax: boolean) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
199
+ * \ingroup morphgray */
200
+ int imProcessGrayMorphConvolve(const imImage* src_image, imImage* dst_image, const imImage* kernel, int ismax);
201
+
202
+ /** Gray morphology convolution with a kernel full of "0"s and use minimum value.
203
+ *
204
+ * \verbatim im.ProcessGrayMorphErode(src_image: imImage, dst_image: imImage, kernel_size: number) -> counter: boolean [in Lua 5] \endverbatim
205
+ * \verbatim im.ProcessGrayMorphErodeNew(image: imImage, kernel_size: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
206
+ * \ingroup morphgray */
207
+ int imProcessGrayMorphErode(const imImage* src_image, imImage* dst_image, int kernel_size);
208
+
209
+ /** Gray morphology convolution with a kernel full of "0"s and use maximum value.
210
+ *
211
+ * \verbatim im.ProcessGrayMorphDilate(src_image: imImage, dst_image: imImage, kernel_size: number) -> counter: boolean [in Lua 5] \endverbatim
212
+ * \verbatim im.ProcessGrayMorphDilateNew(image: imImage, kernel_size: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
213
+ * \ingroup morphgray */
214
+ int imProcessGrayMorphDilate(const imImage* src_image, imImage* dst_image, int kernel_size);
215
+
216
+ /** Erode+Dilate.
217
+ *
218
+ * \verbatim im.ProcessGrayMorphOpen(src_image: imImage, dst_image: imImage, kernel_size: number) -> counter: boolean [in Lua 5] \endverbatim
219
+ * \verbatim im.ProcessGrayMorphOpenNew(image: imImage, kernel_size: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
220
+ * \ingroup morphgray */
221
+ int imProcessGrayMorphOpen(const imImage* src_image, imImage* dst_image, int kernel_size);
222
+
223
+ /** Dilate+Erode.
224
+ *
225
+ * \verbatim im.ProcessGrayMorphClose(src_image: imImage, dst_image: imImage, kernel_size: number) -> counter: boolean [in Lua 5] \endverbatim
226
+ * \verbatim im.ProcessGrayMorphCloseNew(image: imImage, kernel_size: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
227
+ * \ingroup morphgray */
228
+ int imProcessGrayMorphClose(const imImage* src_image, imImage* dst_image, int kernel_size);
229
+
230
+ /** Open+Difference.
231
+ *
232
+ * \verbatim im.ProcessGrayMorphTopHat(src_image: imImage, dst_image: imImage, kernel_size: number) -> counter: boolean [in Lua 5] \endverbatim
233
+ * \verbatim im.ProcessGrayMorphTopHatNew(image: imImage, kernel_size: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
234
+ * \ingroup morphgray */
235
+ int imProcessGrayMorphTopHat(const imImage* src_image, imImage* dst_image, int kernel_size);
236
+
237
+ /** Close+Difference.
238
+ *
239
+ * \verbatim im.ProcessGrayMorphWell(src_image: imImage, dst_image: imImage, kernel_size: number) -> counter: boolean [in Lua 5] \endverbatim
240
+ * \verbatim im.ProcessGrayMorphWellNew(image: imImage, kernel_size: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
241
+ * \ingroup morphgray */
242
+ int imProcessGrayMorphWell(const imImage* src_image, imImage* dst_image, int kernel_size);
243
+
244
+ /** Difference(Erode, Dilate).
245
+ *
246
+ * \verbatim im.ProcessGrayMorphGradient(src_image: imImage, dst_image: imImage, kernel_size: number) -> counter: boolean [in Lua 5] \endverbatim
247
+ * \verbatim im.ProcessGrayMorphGradientNew(image: imImage, kernel_size: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
248
+ * \ingroup morphgray */
249
+ int imProcessGrayMorphGradient(const imImage* src_image, imImage* dst_image, int kernel_size);
250
+
251
+
252
+
253
+ /** \defgroup morphbin Morphology Operations for Binary Images
254
+ * \par
255
+ * See \ref im_process_loc.h
256
+ * \ingroup process */
257
+
258
+ /** Base binary morphology convolution. \n
259
+ * Images are all IM_BINARY. Kernel is IM_INT, but values can be only 1, 0 or -1. Use kernel size odd for better results. \n
260
+ * Hit white means hit=1 and miss=0, or else hit=0 and miss=1. \n
261
+ * Use -1 for don't care positions in kernel. Kernel values are simply compared with image values. \n
262
+ * The operation can be repeated by a number of iterations.
263
+ * The border is zero extended. \n
264
+ * Almost all the binary morphology operations use this function.\n
265
+ * If the kernel image attribute "Description" exists it is used by the counter.
266
+ *
267
+ * \verbatim im.ProcessBinMorphConvolve(src_image: imImage, dst_image: imImage, kernel: imImage, hit_white: boolean, iter: number) -> counter: boolean [in Lua 5] \endverbatim
268
+ * \verbatim im.ProcessBinMorphConvolveNew(image: imImage, kernel: imImage, hit_white: boolean, iter: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
269
+ * \ingroup morphbin */
270
+ int imProcessBinMorphConvolve(const imImage* src_image, imImage* dst_image, const imImage* kernel, int hit_white, int iter);
271
+
272
+ /** Binary morphology convolution with a kernel full of "1"s and hit white.
273
+ *
274
+ * \verbatim im.ProcessBinMorphErode(src_image: imImage, dst_image: imImage, kernel_size: number, iter: number) -> counter: boolean [in Lua 5] \endverbatim
275
+ * \verbatim im.ProcessBinMorphErodeNew(image: imImage, kernel_size: number, iter: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
276
+ * \ingroup morphbin */
277
+ int imProcessBinMorphErode(const imImage* src_image, imImage* dst_image, int kernel_size, int iter);
278
+
279
+ /** Binary morphology convolution with a kernel full of "0"s and hit black.
280
+ *
281
+ * \verbatim im.ProcessBinMorphDilate(src_image: imImage, dst_image: imImage, kernel_size: number, iter: number) -> counter: boolean [in Lua 5] \endverbatim
282
+ * \verbatim im.ProcessBinMorphDilateNew(image: imImage, kernel_size: number, iter: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
283
+ * \ingroup morphbin */
284
+ int imProcessBinMorphDilate(const imImage* src_image, imImage* dst_image, int kernel_size, int iter);
285
+
286
+ /** Erode+Dilate.
287
+ * When iteration is more than one it means Erode+Erode+Erode+...+Dilate+Dilate+Dilate+...
288
+ *
289
+ * \verbatim im.ProcessBinMorphOpen(src_image: imImage, dst_image: imImage, kernel_size: number, iter: number) -> counter: boolean [in Lua 5] \endverbatim
290
+ * \verbatim im.ProcessBinMorphOpenNew(image: imImage, kernel_size: number, iter: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
291
+ * \ingroup morphbin */
292
+ int imProcessBinMorphOpen(const imImage* src_image, imImage* dst_image, int kernel_size, int iter);
293
+
294
+ /** Dilate+Erode.
295
+ *
296
+ * \verbatim im.ProcessBinMorphClose(src_image: imImage, dst_image: imImage, kernel_size: number, iter: number) -> counter: boolean [in Lua 5] \endverbatim
297
+ * \verbatim im.ProcessBinMorphCloseNew(image: imImage, kernel_size: number, iter: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
298
+ * \ingroup morphbin */
299
+ int imProcessBinMorphClose(const imImage* src_image, imImage* dst_image, int kernel_size, int iter);
300
+
301
+ /** Erode+Difference. \n
302
+ * The difference from the source image is applied only once.
303
+ *
304
+ * \verbatim im.ProcessBinMorphOutline(src_image: imImage, dst_image: imImage, kernel_size: number, iter: number) -> counter: boolean [in Lua 5] \endverbatim
305
+ * \verbatim im.ProcessBinMorphOutlineNew(image: imImage, kernel_size: number, iter: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
306
+ * \ingroup morphbin */
307
+ int imProcessBinMorphOutline(const imImage* src_image, imImage* dst_image, int kernel_size, int iter);
308
+
309
+ /** Thins the supplied binary image using Rosenfeld's parallel thinning algorithm. \n
310
+ * Reference: \n
311
+ * "Efficient Binary Image Thinning using Neighborhood Maps" \n
312
+ * by Joseph M. Cychosz, 3ksnn64@ecn.purdue.edu \n
313
+ * in "Graphics Gems IV", Academic Press, 1994
314
+ *
315
+ * \verbatim im.ProcessBinMorphThin(src_image: imImage, dst_image: imImage) [in Lua 5] \endverbatim
316
+ * \verbatim im.ProcessBinMorphThinNew(image: imImage) -> new_image: imImage [in Lua 5] \endverbatim
317
+ * \ingroup morphbin */
318
+ void imProcessBinMorphThin(const imImage* src_image, imImage* dst_image);
319
+
320
+
321
+
322
+ /** \defgroup rank Rank Convolution Operations
323
+ * \par
324
+ * All the rank convolution use the same base function. Near the border the base function
325
+ * includes only the real image pixels in the rank. No border extensions are used.
326
+ * \par
327
+ * See \ref im_process_loc.h
328
+ * \ingroup process */
329
+
330
+ /** Rank convolution using the median value. \n
331
+ * Returns zero if the counter aborted. \n
332
+ * Supports all data types except IM_CFLOAT. Can be applied on color images.
333
+ *
334
+ * \verbatim im.ProcessMedianConvolve(src_image: imImage, dst_image: imImage, kernel_size: number) -> counter: boolean [in Lua 5] \endverbatim
335
+ * \verbatim im.ProcessMedianConvolveNew(image: imImage, kernel_size: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
336
+ * \ingroup rank */
337
+ int imProcessMedianConvolve(const imImage* src_image, imImage* dst_image, int kernel_size);
338
+
339
+ /** Rank convolution using (maximum-minimum) value. \n
340
+ * Returns zero if the counter aborted. \n
341
+ * Supports all data types except IM_CFLOAT. Can be applied on color images.
342
+ *
343
+ * \verbatim im.ProcessRangeConvolve(src_image: imImage, dst_image: imImage, kernel_size: number) -> counter: boolean [in Lua 5] \endverbatim
344
+ * \verbatim im.ProcessRangeConvolveNew(image: imImage, kernel_size: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
345
+ * \ingroup rank */
346
+ int imProcessRangeConvolve(const imImage* src_image, imImage* dst_image, int kernel_size);
347
+
348
+ /** Rank convolution using the closest maximum or minimum value. \n
349
+ * Returns zero if the counter aborted. \n
350
+ * Supports all data types except IM_CFLOAT. Can be applied on color images.
351
+ *
352
+ * \verbatim im.ProcessRankClosestConvolve(src_image: imImage, dst_image: imImage, kernel_size: number) -> counter: boolean [in Lua 5] \endverbatim
353
+ * \verbatim im.ProcessRankClosestConvolveNew(image: imImage, kernel_size: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
354
+ * \ingroup rank */
355
+ int imProcessRankClosestConvolve(const imImage* src_image, imImage* dst_image, int kernel_size);
356
+
357
+ /** Rank convolution using the maximum value. \n
358
+ * Returns zero if the counter aborted. \n
359
+ * Supports all data types except IM_CFLOAT. Can be applied on color images.
360
+ *
361
+ * \verbatim im.ProcessRankMaxConvolve(src_image: imImage, dst_image: imImage, kernel_size: number) -> counter: boolean [in Lua 5] \endverbatim
362
+ * \verbatim im.ProcessRankMaxConvolveNew(image: imImage, kernel_size: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
363
+ * \ingroup rank */
364
+ int imProcessRankMaxConvolve(const imImage* src_image, imImage* dst_image, int kernel_size);
365
+
366
+ /** Rank convolution using the minimum value. \n
367
+ * Returns zero if the counter aborted. \n
368
+ * Supports all data types except IM_CFLOAT. Can be applied on color images.
369
+ *
370
+ * \verbatim im.ProcessRankMinConvolve(src_image: imImage, dst_image: imImage, kernel_size: number) -> counter: boolean [in Lua 5] \endverbatim
371
+ * \verbatim im.ProcessRankMinConvolveNew(image: imImage, kernel_size: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
372
+ * \ingroup rank */
373
+ int imProcessRankMinConvolve(const imImage* src_image, imImage* dst_image, int kernel_size);
374
+
375
+ /** Threshold using a rank convolution with a range contrast function. \n
376
+ * Supports all integer IM_GRAY images as source, and IM_BINARY as destiny. \n
377
+ * Local variable threshold by the method of Bernsen. \n
378
+ * Extracted from XITE, Copyright 1991, Blab, UiO \n
379
+ * http://www.ifi.uio.no/~blab/Software/Xite/
380
+ \verbatim
381
+ Reference:
382
+ Bernsen, J: "Dynamic thresholding of grey-level images"
383
+ Proc. of the 8th ICPR, Paris, Oct 1986, 1251-1255.
384
+ Author: Oivind Due Trier
385
+ \endverbatim
386
+ * Returns zero if the counter aborted.
387
+ *
388
+ * \verbatim im.ProcessRangeContrastThreshold(src_image: imImage, dst_image: imImage, kernel_size: number, min_range: number) -> counter: boolean [in Lua 5] \endverbatim
389
+ * \verbatim im.ProcessRangeContrastThresholdNew(image: imImage, kernel_size: number, min_range: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
390
+ * \ingroup threshold */
391
+ int imProcessRangeContrastThreshold(const imImage* src_image, imImage* dst_image, int kernel_size, int min_range);
392
+
393
+ /** Threshold using a rank convolution with a local max function. \n
394
+ * Returns zero if the counter aborted. \n
395
+ * Supports all integer IM_GRAY images as source, and IM_BINARY as destiny.
396
+ *
397
+ * \verbatim im.ProcessLocalMaxThreshold(src_image: imImage, dst_image: imImage, kernel_size: number, min_level: number) -> counter: boolean [in Lua 5] \endverbatim
398
+ * \verbatim im.ProcessLocalMaxThresholdNew(image: imImage, kernel_size: number, min_level: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
399
+ * \ingroup threshold */
400
+ int imProcessLocalMaxThreshold(const imImage* src_image, imImage* dst_image, int kernel_size, int min_level);
401
+
402
+
403
+
404
+ /** \defgroup convolve Convolution Operations
405
+ * \par
406
+ * See \ref im_process_loc.h
407
+ * \ingroup process */
408
+
409
+ /** Base Convolution with a kernel. \n
410
+ * Kernel can be IM_INT or IM_FLOAT, but always IM_GRAY. Use kernel size odd for better results. \n
411
+ * Supports all data types. The border is mirrored. \n
412
+ * Returns zero if the counter aborted. Most of the convolutions use this function.\n
413
+ * If the kernel image attribute "Description" exists it is used by the counter.
414
+ *
415
+ * \verbatim im.ProcessConvolve(src_image: imImage, dst_image: imImage, kernel: imImage) -> counter: boolean [in Lua 5] \endverbatim
416
+ * \verbatim im.ProcessConvolveNew(image: imImage, kernel: imImage) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
417
+ * \ingroup convolve */
418
+ int imProcessConvolve(const imImage* src_image, imImage* dst_image, const imImage* kernel);
419
+
420
+ /** Base convolution when the kernel is separable. Only the first line and the first column will be used. \n
421
+ * Returns zero if the counter aborted.\n
422
+ * If the kernel image attribute "Description" exists it is used by the counter.
423
+ *
424
+ * \verbatim im.ProcessConvolveSep(src_image: imImage, dst_image: imImage, kernel: imImage) -> counter: boolean [in Lua 5] \endverbatim
425
+ * \verbatim im.ProcessConvolveSepNew(image: imImage, kernel: imImage) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
426
+ * \ingroup convolve */
427
+ int imProcessConvolveSep(const imImage* src_image, imImage* dst_image, const imImage* kernel);
428
+
429
+ /** Base Convolution with two kernels. The result is the magnitude of the result of each convolution. \n
430
+ * Kernel can be IM_INT or IM_FLOAT, but always IM_GRAY. Use kernel size odd for better results. \n
431
+ * Supports all data types. The border is mirrored. \n
432
+ * Returns zero if the counter aborted. Most of the convolutions use this function.\n
433
+ * If the kernel image attribute "Description" exists it is used by the counter.
434
+ *
435
+ * \verbatim im.ProcessConvolveDual(src_image: imImage, dst_image: imImage, kernel1, kernel2: imImage) -> counter: boolean [in Lua 5] \endverbatim
436
+ * \verbatim im.ProcessConvolveDualNew(image: imImage, kernel1, kernel2: imImage) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
437
+ * \ingroup convolve */
438
+ int imProcessConvolveDual(const imImage* src_image, imImage* dst_image, const imImage *kernel1, const imImage *kernel2);
439
+
440
+ /** Repeats the convolution a number of times. \n
441
+ * Returns zero if the counter aborted.\n
442
+ * If the kernel image attribute "Description" exists it is used by the counter.
443
+ *
444
+ * \verbatim im.ProcessConvolveRep(src_image: imImage, dst_image: imImage, kernel: imImage, count: number) -> counter: boolean [in Lua 5] \endverbatim
445
+ * \verbatim im.ProcessConvolveRepNew(image: imImage, kernel: imImage, count: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
446
+ * \ingroup convolve */
447
+ int imProcessConvolveRep(const imImage* src_image, imImage* dst_image, const imImage* kernel, int count);
448
+
449
+ /** Convolve with a kernel rotating it 8 times and getting the absolute maximum value. \n
450
+ * Kernel must be square. \n
451
+ * The rotation is implemented only for kernel sizes 3x3, 5x5 and 7x7. \n
452
+ * Supports all data types except IM_CFLOAT.
453
+ * Returns zero if the counter aborted.\n
454
+ * If the kernel image attribute "Description" exists it is used by the counter.
455
+ *
456
+ * \verbatim im.ProcessCompassConvolve(src_image: imImage, dst_image: imImage, kernel: imImage) -> counter: boolean [in Lua 5] \endverbatim
457
+ * \verbatim im.ProcessCompassConvolveNew(image: imImage, kernel: imImage) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
458
+ * \ingroup convolve */
459
+ int imProcessCompassConvolve(const imImage* src_image, imImage* dst_image, imImage* kernel);
460
+
461
+ /** Utility function to rotate a kernel one time.
462
+ *
463
+ * \verbatim im.ProcessRotateKernel(kernel: imImage) [in Lua 5] \endverbatim
464
+ * \ingroup convolve */
465
+ void imProcessRotateKernel(imImage* kernel);
466
+
467
+ /** Difference(Gaussian1, Gaussian2). \n
468
+ * Supports all data types,
469
+ * but if source is IM_BYTE or IM_USHORT destiny image must be of type IM_INT.
470
+ *
471
+ * \verbatim im.ProcessDiffOfGaussianConvolve(src_image: imImage, dst_image: imImage, stddev1: number, stddev2: number) -> counter: boolean [in Lua 5] \endverbatim
472
+ * \verbatim im.ProcessDiffOfGaussianConvolveNew(image: imImage, stddev1: number, stddev2: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
473
+ * \ingroup convolve */
474
+ int imProcessDiffOfGaussianConvolve(const imImage* src_image, imImage* dst_image, float stddev1, float stddev2);
475
+
476
+ /** Convolution with a laplacian of a gaussian kernel. \n
477
+ * Supports all data types,
478
+ * but if source is IM_BYTE or IM_USHORT destiny image must be of type IM_INT.
479
+ *
480
+ * \verbatim im.ProcessLapOfGaussianConvolve(src_image: imImage, dst_image: imImage, stddev: number) -> counter: boolean [in Lua 5] \endverbatim
481
+ * \verbatim im.ProcessLapOfGaussianConvolveNew(image: imImage, stddev: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
482
+ * \ingroup convolve */
483
+ int imProcessLapOfGaussianConvolve(const imImage* src_image, imImage* dst_image, float stddev);
484
+
485
+ /** Convolution with a kernel full of "1"s inside a circle. \n
486
+ * Supports all data types.
487
+ *
488
+ * \verbatim im.ProcessMeanConvolve(src_image: imImage, dst_image: imImage, kernel_size: number) -> counter: boolean [in Lua 5] \endverbatim
489
+ * \verbatim im.ProcessMeanConvolveNew(image: imImage, kernel_size: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
490
+ * \ingroup convolve */
491
+ int imProcessMeanConvolve(const imImage* src_image, imImage* dst_image, int kernel_size);
492
+
493
+ /** Convolution with a float gaussian kernel. \n
494
+ * If sdtdev is negative its magnitude will be used as the kernel size. \n
495
+ * Supports all data types.
496
+ *
497
+ * \verbatim im.ProcessGaussianConvolve(src_image: imImage, dst_image: imImage, stddev: number) -> counter: boolean [in Lua 5] \endverbatim
498
+ * \verbatim im.ProcessGaussianConvolveNew(image: imImage, stddev: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
499
+ * \ingroup convolve */
500
+ int imProcessGaussianConvolve(const imImage* src_image, imImage* dst_image, float stddev);
501
+
502
+ /** Convolution with a barlett kernel. \n
503
+ * Supports all data types.
504
+ *
505
+ * \verbatim im.ProcessBarlettConvolve(src_image: imImage, dst_image: imImage, kernel_size: number) -> counter: boolean [in Lua 5] \endverbatim
506
+ * \verbatim im.ProcessBarlettConvolveNew(image: imImage, kernel_size: number) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
507
+ * \ingroup convolve */
508
+ int imProcessBarlettConvolve(const imImage* src_image, imImage* dst_image, int kernel_size);
509
+
510
+ /** Magnitude of the sobel convolution. \n
511
+ * Supports all data types.
512
+ *
513
+ * \verbatim im.ProcessSobelConvolve(src_image: imImage, dst_image: imImage) -> counter: boolean [in Lua 5] \endverbatim
514
+ * \verbatim im.ProcessSobelConvolveNew(image: imImage) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
515
+ * \ingroup convolve */
516
+ int imProcessSobelConvolve(const imImage* src_image, imImage* dst_image);
517
+
518
+ /** Magnitude of the prewitt convolution. \n
519
+ * Supports all data types.
520
+ *
521
+ * \verbatim im.ProcessPrewittConvolve(src_image: imImage, dst_image: imImage) -> counter: boolean [in Lua 5] \endverbatim
522
+ * \verbatim im.ProcessPrewittConvolveNew(image: imImage) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
523
+ * \ingroup convolve */
524
+ int imProcessPrewittConvolve(const imImage* src_image, imImage* dst_image);
525
+
526
+ /** Spline edge dectection. \n
527
+ * Supports all data types.
528
+ *
529
+ * \verbatim im.ProcessSplineEdgeConvolve(src_image: imImage, dst_image: imImage) -> counter: boolean [in Lua 5] \endverbatim
530
+ * \verbatim im.ProcessSplineEdgeConvolveNew(image: imImage) -> counter: boolean, new_image: imImage [in Lua 5] \endverbatim
531
+ * \ingroup convolve */
532
+ int imProcessSplineEdgeConvolve(const imImage* src_image, imImage* dst_image);
533
+
534
+ /** Finds the zero crossings of IM_INT and IM_FLOAT images. Crossings are marked with non zero values
535
+ * indicating the intensity of the edge. It is usually used after a second derivative, laplace. \n
536
+ * Extracted from XITE, Copyright 1991, Blab, UiO \n
537
+ * http://www.ifi.uio.no/~blab/Software/Xite/
538
+ *
539
+ * \verbatim im.ProcessZeroCrossing(src_image: imImage, dst_image: imImage) [in Lua 5] \endverbatim
540
+ * \verbatim im.ProcessZeroCrossingNew(image: imImage) -> new_image: imImage [in Lua 5] \endverbatim
541
+ * \ingroup convolve */
542
+ void imProcessZeroCrossing(const imImage* src_image, imImage* dst_image);
543
+
544
+ /** First part of the Canny edge detector. Includes the gaussian filtering and the nonmax suppression. \n
545
+ * After using this you could apply a Hysteresis Threshold, see \ref imProcessHysteresisThreshold. \n
546
+ * Image must be IM_BYTE/IM_GRAY. \n
547
+ * Implementation from the book:
548
+ \verbatim
549
+ J. R. Parker
550
+ "Algoritms for Image Processing and Computer Vision"
551
+ WILEY
552
+ \endverbatim
553
+ *
554
+ * \verbatim im.ProcessCanny(src_image: imImage, dst_image: imImage, stddev: number) [in Lua 5] \endverbatim
555
+ * \verbatim im.ProcessCannyNew(image: imImage, stddev: number) -> new_image: imImage [in Lua 5] \endverbatim
556
+ * \ingroup convolve */
557
+ void imProcessCanny(const imImage* src_image, imImage* dst_image, float stddev);
558
+
559
+ /** Calculates the kernel size given the standard deviation. \n
560
+ * If sdtdev is negative its magnitude will be used as the kernel size.
561
+ *
562
+ * \verbatim im.GaussianStdDev2KernelSize(stddev: number) -> kernel_size: number [in Lua 5] \endverbatim
563
+ * \ingroup convolve */
564
+ int imGaussianStdDev2KernelSize(float stddev);
565
+
566
+ /** Calculates the standard deviation given the kernel size.
567
+ *
568
+ * \verbatim im.GaussianKernelSize2StdDev(kernel_size: number) -> stddev: number [in Lua 5] \endverbatim
569
+ * \ingroup convolve */
570
+ float imGaussianKernelSize2StdDev(int kernel_size);
571
+
572
+
573
+ #if defined(__cplusplus)
574
+ }
575
+ #endif
576
+
577
+ #endif