melage 0.0.65__py3-none-any.whl

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 (501) hide show
  1. melage/__init__.py +16 -0
  2. melage/cli.py +4 -0
  3. melage/graphics/GLGraphicsItem.py +286 -0
  4. melage/graphics/GLViewWidget.py +595 -0
  5. melage/graphics/Transform3D.py +55 -0
  6. melage/graphics/__init__.py +8 -0
  7. melage/graphics/functions.py +101 -0
  8. melage/graphics/items/GLAxisItem.py +149 -0
  9. melage/graphics/items/GLGridItem.py +178 -0
  10. melage/graphics/items/GLPolygonItem.py +77 -0
  11. melage/graphics/items/GLScatterPlotItem.py +135 -0
  12. melage/graphics/items/GLVolumeItem.py +280 -0
  13. melage/graphics/items/GLVolumeItem_b.py +237 -0
  14. melage/graphics/items/__init__.py +0 -0
  15. melage/graphics/shaders.py +202 -0
  16. melage/main.py +270 -0
  17. melage/requirements22.txt +25 -0
  18. melage/requirements_old.txt +28 -0
  19. melage/resource/0circle.png +0 -0
  20. melage/resource/0circle_faded.png +0 -0
  21. melage/resource/3d.png +0 -0
  22. melage/resource/3d.psd +0 -0
  23. melage/resource/3dFaded.png +0 -0
  24. melage/resource/Eraser.png +0 -0
  25. melage/resource/EraserFaded.png +0 -0
  26. melage/resource/EraserX.png +0 -0
  27. melage/resource/EraserXFaded.png +0 -0
  28. melage/resource/Eraser_icon.svg +79 -0
  29. melage/resource/Hand.png +0 -0
  30. melage/resource/HandIcons_0.png +0 -0
  31. melage/resource/Hand_IX.png +0 -0
  32. melage/resource/Hand_IXFaded.png +0 -0
  33. melage/resource/Handsqueezed.png +0 -0
  34. melage/resource/Handwriting (copy).png +0 -0
  35. melage/resource/Handwriting.png +0 -0
  36. melage/resource/HandwritingMinus.png +0 -0
  37. melage/resource/HandwritingMinusX.png +0 -0
  38. melage/resource/HandwritingPlus.png +0 -0
  39. melage/resource/HandwritingPlusX.png +0 -0
  40. melage/resource/Move_icon.svg +8 -0
  41. melage/resource/PngItem_2422924.png +0 -0
  42. melage/resource/about.png +0 -0
  43. melage/resource/about_logo.png +0 -0
  44. melage/resource/about_logo0.png +0 -0
  45. melage/resource/action_check.png +0 -0
  46. melage/resource/action_check_OFF.png +0 -0
  47. melage/resource/arrow).png +0 -0
  48. melage/resource/arrow.png +0 -0
  49. melage/resource/arrowFaded.png +0 -0
  50. melage/resource/arrow_org.png +0 -0
  51. melage/resource/arrow_org.png.png +0 -0
  52. melage/resource/arrows.png +0 -0
  53. melage/resource/authors.mp4 +0 -0
  54. melage/resource/box.png +0 -0
  55. melage/resource/check-image-icon-0.jpg +0 -0
  56. melage/resource/circle.png +0 -0
  57. melage/resource/circle_faded.png +0 -0
  58. melage/resource/circle_or.png +0 -0
  59. melage/resource/close.png +0 -0
  60. melage/resource/close_bg.png +0 -0
  61. melage/resource/color/Simple.txt +18 -0
  62. melage/resource/color/Tissue.txt +24 -0
  63. melage/resource/color/Tissue12.txt +27 -0
  64. melage/resource/color/albert_LUT.txt +102 -0
  65. melage/resource/color/mcrib_LUT.txt +102 -0
  66. melage/resource/color/pediatric1.txt +29 -0
  67. melage/resource/color/pediatric1_old.txt +27 -0
  68. melage/resource/color/pediatric2.txt +87 -0
  69. melage/resource/color/pediatric3.txt +29 -0
  70. melage/resource/color/pediatrics (copy).csv +103 -0
  71. melage/resource/color/tissue_seg.txt +4 -0
  72. melage/resource/contour.png +0 -0
  73. melage/resource/contour.svg +2 -0
  74. melage/resource/contourFaded.png +0 -0
  75. melage/resource/contourX.png +0 -0
  76. melage/resource/contourXFaded.png +0 -0
  77. melage/resource/dti.png +0 -0
  78. melage/resource/dti0.png +0 -0
  79. melage/resource/dti222.png +0 -0
  80. melage/resource/dti_or.png +0 -0
  81. melage/resource/eco.png +0 -0
  82. melage/resource/eco22.png +0 -0
  83. melage/resource/eco_old.png +0 -0
  84. melage/resource/eco_or.png +0 -0
  85. melage/resource/eco_or2.png +0 -0
  86. melage/resource/eco_seg.png +0 -0
  87. melage/resource/eco_seg_old.png +0 -0
  88. melage/resource/export.png +0 -0
  89. melage/resource/hand-grab-icon-10.jpg +0 -0
  90. melage/resource/hand-grab-icon-25.jpg +0 -0
  91. melage/resource/info.png +0 -0
  92. melage/resource/line.png +0 -0
  93. melage/resource/linefaded.png +0 -0
  94. melage/resource/load.png +0 -0
  95. melage/resource/main.ico +0 -0
  96. melage/resource/manual_images/3D_rightc.png +0 -0
  97. melage/resource/manual_images/3D_rightc_goto.png +0 -0
  98. melage/resource/manual_images/3D_rightc_paint.png +0 -0
  99. melage/resource/manual_images/3D_rightc_paint_draw1.png +0 -0
  100. melage/resource/manual_images/3D_rightc_paint_draw2.png +0 -0
  101. melage/resource/manual_images/3D_rightc_paint_render.png +0 -0
  102. melage/resource/manual_images/3D_rightc_paint_render2.png +0 -0
  103. melage/resource/manual_images/3D_rightc_paint_render3.png +0 -0
  104. melage/resource/manual_images/3D_rightc_paint_render4.png +0 -0
  105. melage/resource/manual_images/3D_rightc_paint_render5.png +0 -0
  106. melage/resource/manual_images/3D_rightc_paint_render6.png +0 -0
  107. melage/resource/manual_images/3D_rightc_seg.png +0 -0
  108. melage/resource/manual_images/exit_toolbar.png +0 -0
  109. melage/resource/manual_images/load_image_file.png +0 -0
  110. melage/resource/manual_images/load_image_file_openp.png +0 -0
  111. melage/resource/manual_images/main_page.png +0 -0
  112. melage/resource/manual_images/menu_file.png +0 -0
  113. melage/resource/manual_images/menu_file_export.png +0 -0
  114. melage/resource/manual_images/menu_file_import.png +0 -0
  115. melage/resource/manual_images/menu_file_settings.png +0 -0
  116. melage/resource/manual_images/menu_file_ss.png +0 -0
  117. melage/resource/manual_images/open_save_load.png +0 -0
  118. melage/resource/manual_images/panning_toolbar.png +0 -0
  119. melage/resource/manual_images/segmentation_toolbar.png +0 -0
  120. melage/resource/manual_images/tab_mri.png +0 -0
  121. melage/resource/manual_images/tab_us.png +0 -0
  122. melage/resource/manual_images/tabs.png +0 -0
  123. melage/resource/manual_images/toolbar_tools.png +0 -0
  124. melage/resource/manual_images/tools_basic.png +0 -0
  125. melage/resource/manual_images/tools_bet.png +0 -0
  126. melage/resource/manual_images/tools_cs.png +0 -0
  127. melage/resource/manual_images/tools_deepbet.png +0 -0
  128. melage/resource/manual_images/tools_imageinfo.png +0 -0
  129. melage/resource/manual_images/tools_maskO.png +0 -0
  130. melage/resource/manual_images/tools_masking.png +0 -0
  131. melage/resource/manual_images/tools_n4b.png +0 -0
  132. melage/resource/manual_images/tools_resize.png +0 -0
  133. melage/resource/manual_images/tools_ruler.png +0 -0
  134. melage/resource/manual_images/tools_seg.png +0 -0
  135. melage/resource/manual_images/tools_threshold.png +0 -0
  136. melage/resource/manual_images/tools_tools.png +0 -0
  137. melage/resource/manual_images/widget_color.png +0 -0
  138. melage/resource/manual_images/widget_color_add.png +0 -0
  139. melage/resource/manual_images/widget_color_add2.png +0 -0
  140. melage/resource/manual_images/widget_color_additional.png +0 -0
  141. melage/resource/manual_images/widget_images.png +0 -0
  142. melage/resource/manual_images/widget_images2.png +0 -0
  143. melage/resource/manual_images/widget_images3.png +0 -0
  144. melage/resource/manual_images/widget_marker.png +0 -0
  145. melage/resource/manual_images/widget_mri.png +0 -0
  146. melage/resource/manual_images/widget_mri2.png +0 -0
  147. melage/resource/manual_images/widget_segintensity.png +0 -0
  148. melage/resource/manual_images/widget_tab_mutualview.png +0 -0
  149. melage/resource/manual_images/widget_tab_mutualview2.png +0 -0
  150. melage/resource/manual_images/widget_table.png +0 -0
  151. melage/resource/manual_images/widget_table2.png +0 -0
  152. melage/resource/manual_images/widget_us.png +0 -0
  153. melage/resource/melage_top.ico +0 -0
  154. melage/resource/melage_top.png +0 -0
  155. melage/resource/melage_top0.png +0 -0
  156. melage/resource/melage_top1.png +0 -0
  157. melage/resource/melage_top4.png +0 -0
  158. melage/resource/mri (copy).png +0 -0
  159. melage/resource/mri.png +0 -0
  160. melage/resource/mri0.png +0 -0
  161. melage/resource/mri000.png +0 -0
  162. melage/resource/mri22.png +0 -0
  163. melage/resource/mri_big.png +0 -0
  164. melage/resource/mri_old.png +0 -0
  165. melage/resource/mri_seg.png +0 -0
  166. melage/resource/mri_seg_old.png +0 -0
  167. melage/resource/new.png +0 -0
  168. melage/resource/open.png +0 -0
  169. melage/resource/open2.png +0 -0
  170. melage/resource/pan.png +0 -0
  171. melage/resource/pencil.png +0 -0
  172. melage/resource/pencilFaded.png +0 -0
  173. melage/resource/points.png +0 -0
  174. melage/resource/pointsFaded.png +0 -0
  175. melage/resource/rotate.png +0 -0
  176. melage/resource/ruler.png +0 -0
  177. melage/resource/rulerFaded.png +0 -0
  178. melage/resource/s.png +0 -0
  179. melage/resource/s.psd +0 -0
  180. melage/resource/save.png +0 -0
  181. melage/resource/saveas.png +0 -0
  182. melage/resource/seg_mri.png +0 -0
  183. melage/resource/seg_mri2.png +0 -0
  184. melage/resource/settings.png +0 -0
  185. melage/resource/synch.png +0 -0
  186. melage/resource/synchFaded.png +0 -0
  187. melage/resource/theme/rc/.keep +1 -0
  188. melage/resource/theme/rc/arrow_down.png +0 -0
  189. melage/resource/theme/rc/arrow_down@2x.png +0 -0
  190. melage/resource/theme/rc/arrow_down_disabled.png +0 -0
  191. melage/resource/theme/rc/arrow_down_disabled@2x.png +0 -0
  192. melage/resource/theme/rc/arrow_down_focus.png +0 -0
  193. melage/resource/theme/rc/arrow_down_focus@2x.png +0 -0
  194. melage/resource/theme/rc/arrow_down_pressed.png +0 -0
  195. melage/resource/theme/rc/arrow_down_pressed@2x.png +0 -0
  196. melage/resource/theme/rc/arrow_left.png +0 -0
  197. melage/resource/theme/rc/arrow_left@2x.png +0 -0
  198. melage/resource/theme/rc/arrow_left_disabled.png +0 -0
  199. melage/resource/theme/rc/arrow_left_disabled@2x.png +0 -0
  200. melage/resource/theme/rc/arrow_left_focus.png +0 -0
  201. melage/resource/theme/rc/arrow_left_focus@2x.png +0 -0
  202. melage/resource/theme/rc/arrow_left_pressed.png +0 -0
  203. melage/resource/theme/rc/arrow_left_pressed@2x.png +0 -0
  204. melage/resource/theme/rc/arrow_right.png +0 -0
  205. melage/resource/theme/rc/arrow_right@2x.png +0 -0
  206. melage/resource/theme/rc/arrow_right_disabled.png +0 -0
  207. melage/resource/theme/rc/arrow_right_disabled@2x.png +0 -0
  208. melage/resource/theme/rc/arrow_right_focus.png +0 -0
  209. melage/resource/theme/rc/arrow_right_focus@2x.png +0 -0
  210. melage/resource/theme/rc/arrow_right_pressed.png +0 -0
  211. melage/resource/theme/rc/arrow_right_pressed@2x.png +0 -0
  212. melage/resource/theme/rc/arrow_up.png +0 -0
  213. melage/resource/theme/rc/arrow_up@2x.png +0 -0
  214. melage/resource/theme/rc/arrow_up_disabled.png +0 -0
  215. melage/resource/theme/rc/arrow_up_disabled@2x.png +0 -0
  216. melage/resource/theme/rc/arrow_up_focus.png +0 -0
  217. melage/resource/theme/rc/arrow_up_focus@2x.png +0 -0
  218. melage/resource/theme/rc/arrow_up_pressed.png +0 -0
  219. melage/resource/theme/rc/arrow_up_pressed@2x.png +0 -0
  220. melage/resource/theme/rc/base_icon.png +0 -0
  221. melage/resource/theme/rc/base_icon@2x.png +0 -0
  222. melage/resource/theme/rc/base_icon_disabled.png +0 -0
  223. melage/resource/theme/rc/base_icon_disabled@2x.png +0 -0
  224. melage/resource/theme/rc/base_icon_focus.png +0 -0
  225. melage/resource/theme/rc/base_icon_focus@2x.png +0 -0
  226. melage/resource/theme/rc/base_icon_pressed.png +0 -0
  227. melage/resource/theme/rc/base_icon_pressed@2x.png +0 -0
  228. melage/resource/theme/rc/branch_closed.png +0 -0
  229. melage/resource/theme/rc/branch_closed@2x.png +0 -0
  230. melage/resource/theme/rc/branch_closed_disabled.png +0 -0
  231. melage/resource/theme/rc/branch_closed_disabled@2x.png +0 -0
  232. melage/resource/theme/rc/branch_closed_focus.png +0 -0
  233. melage/resource/theme/rc/branch_closed_focus@2x.png +0 -0
  234. melage/resource/theme/rc/branch_closed_pressed.png +0 -0
  235. melage/resource/theme/rc/branch_closed_pressed@2x.png +0 -0
  236. melage/resource/theme/rc/branch_end.png +0 -0
  237. melage/resource/theme/rc/branch_end@2x.png +0 -0
  238. melage/resource/theme/rc/branch_end_disabled.png +0 -0
  239. melage/resource/theme/rc/branch_end_disabled@2x.png +0 -0
  240. melage/resource/theme/rc/branch_end_focus.png +0 -0
  241. melage/resource/theme/rc/branch_end_focus@2x.png +0 -0
  242. melage/resource/theme/rc/branch_end_pressed.png +0 -0
  243. melage/resource/theme/rc/branch_end_pressed@2x.png +0 -0
  244. melage/resource/theme/rc/branch_line.png +0 -0
  245. melage/resource/theme/rc/branch_line@2x.png +0 -0
  246. melage/resource/theme/rc/branch_line_disabled.png +0 -0
  247. melage/resource/theme/rc/branch_line_disabled@2x.png +0 -0
  248. melage/resource/theme/rc/branch_line_focus.png +0 -0
  249. melage/resource/theme/rc/branch_line_focus@2x.png +0 -0
  250. melage/resource/theme/rc/branch_line_pressed.png +0 -0
  251. melage/resource/theme/rc/branch_line_pressed@2x.png +0 -0
  252. melage/resource/theme/rc/branch_more.png +0 -0
  253. melage/resource/theme/rc/branch_more@2x.png +0 -0
  254. melage/resource/theme/rc/branch_more_disabled.png +0 -0
  255. melage/resource/theme/rc/branch_more_disabled@2x.png +0 -0
  256. melage/resource/theme/rc/branch_more_focus.png +0 -0
  257. melage/resource/theme/rc/branch_more_focus@2x.png +0 -0
  258. melage/resource/theme/rc/branch_more_pressed.png +0 -0
  259. melage/resource/theme/rc/branch_more_pressed@2x.png +0 -0
  260. melage/resource/theme/rc/branch_open.png +0 -0
  261. melage/resource/theme/rc/branch_open@2x.png +0 -0
  262. melage/resource/theme/rc/branch_open_disabled.png +0 -0
  263. melage/resource/theme/rc/branch_open_disabled@2x.png +0 -0
  264. melage/resource/theme/rc/branch_open_focus.png +0 -0
  265. melage/resource/theme/rc/branch_open_focus@2x.png +0 -0
  266. melage/resource/theme/rc/branch_open_pressed.png +0 -0
  267. melage/resource/theme/rc/branch_open_pressed@2x.png +0 -0
  268. melage/resource/theme/rc/checkbox_checked.png +0 -0
  269. melage/resource/theme/rc/checkbox_checked0.png +0 -0
  270. melage/resource/theme/rc/checkbox_checked@2x.png +0 -0
  271. melage/resource/theme/rc/checkbox_checked@2x0.png +0 -0
  272. melage/resource/theme/rc/checkbox_checked@2x000.png.png +0 -0
  273. melage/resource/theme/rc/checkbox_checked_disabled.png +0 -0
  274. melage/resource/theme/rc/checkbox_checked_disabled0.png +0 -0
  275. melage/resource/theme/rc/checkbox_checked_disabled@2x.png +0 -0
  276. melage/resource/theme/rc/checkbox_checked_disabled@2x0.png +0 -0
  277. melage/resource/theme/rc/checkbox_checked_focus.png +0 -0
  278. melage/resource/theme/rc/checkbox_checked_focus0.png +0 -0
  279. melage/resource/theme/rc/checkbox_checked_focus@2x.png +0 -0
  280. melage/resource/theme/rc/checkbox_checked_focus@2x0.png +0 -0
  281. melage/resource/theme/rc/checkbox_checked_pressed.png +0 -0
  282. melage/resource/theme/rc/checkbox_checked_pressed0.png +0 -0
  283. melage/resource/theme/rc/checkbox_checked_pressed@2x.png +0 -0
  284. melage/resource/theme/rc/checkbox_checked_pressed@2x0.png +0 -0
  285. melage/resource/theme/rc/checkbox_indeterminate.png +0 -0
  286. melage/resource/theme/rc/checkbox_indeterminate@2x.png +0 -0
  287. melage/resource/theme/rc/checkbox_indeterminate_disabled.png +0 -0
  288. melage/resource/theme/rc/checkbox_indeterminate_disabled@2x.png +0 -0
  289. melage/resource/theme/rc/checkbox_indeterminate_focus.png +0 -0
  290. melage/resource/theme/rc/checkbox_indeterminate_focus@2x.png +0 -0
  291. melage/resource/theme/rc/checkbox_indeterminate_pressed.png +0 -0
  292. melage/resource/theme/rc/checkbox_indeterminate_pressed@2x.png +0 -0
  293. melage/resource/theme/rc/checkbox_unchecked.png +0 -0
  294. melage/resource/theme/rc/checkbox_unchecked0.png +0 -0
  295. melage/resource/theme/rc/checkbox_unchecked00.png +0 -0
  296. melage/resource/theme/rc/checkbox_unchecked@2x.png +0 -0
  297. melage/resource/theme/rc/checkbox_unchecked@2x0.png +0 -0
  298. melage/resource/theme/rc/checkbox_unchecked@2x00.png +0 -0
  299. melage/resource/theme/rc/checkbox_unchecked_disabled.png +0 -0
  300. melage/resource/theme/rc/checkbox_unchecked_disabled0.png +0 -0
  301. melage/resource/theme/rc/checkbox_unchecked_disabled00.png +0 -0
  302. melage/resource/theme/rc/checkbox_unchecked_disabled@2x.png +0 -0
  303. melage/resource/theme/rc/checkbox_unchecked_disabled@2x0.png +0 -0
  304. melage/resource/theme/rc/checkbox_unchecked_disabled@2x00.png +0 -0
  305. melage/resource/theme/rc/checkbox_unchecked_focus.png +0 -0
  306. melage/resource/theme/rc/checkbox_unchecked_focus0.png +0 -0
  307. melage/resource/theme/rc/checkbox_unchecked_focus00.png +0 -0
  308. melage/resource/theme/rc/checkbox_unchecked_focus@2x.png +0 -0
  309. melage/resource/theme/rc/checkbox_unchecked_focus@2x0.png +0 -0
  310. melage/resource/theme/rc/checkbox_unchecked_focus@2x00.png +0 -0
  311. melage/resource/theme/rc/checkbox_unchecked_pressed.png +0 -0
  312. melage/resource/theme/rc/checkbox_unchecked_pressed0.png +0 -0
  313. melage/resource/theme/rc/checkbox_unchecked_pressed00.png +0 -0
  314. melage/resource/theme/rc/checkbox_unchecked_pressed@2x.png +0 -0
  315. melage/resource/theme/rc/checkbox_unchecked_pressed@2x0.png +0 -0
  316. melage/resource/theme/rc/checkbox_unchecked_pressed@2x00.png +0 -0
  317. melage/resource/theme/rc/line_horizontal.png +0 -0
  318. melage/resource/theme/rc/line_horizontal@2x.png +0 -0
  319. melage/resource/theme/rc/line_horizontal_disabled.png +0 -0
  320. melage/resource/theme/rc/line_horizontal_disabled@2x.png +0 -0
  321. melage/resource/theme/rc/line_horizontal_focus.png +0 -0
  322. melage/resource/theme/rc/line_horizontal_focus@2x.png +0 -0
  323. melage/resource/theme/rc/line_horizontal_pressed.png +0 -0
  324. melage/resource/theme/rc/line_horizontal_pressed@2x.png +0 -0
  325. melage/resource/theme/rc/line_vertical.png +0 -0
  326. melage/resource/theme/rc/line_vertical@2x.png +0 -0
  327. melage/resource/theme/rc/line_vertical_disabled.png +0 -0
  328. melage/resource/theme/rc/line_vertical_disabled@2x.png +0 -0
  329. melage/resource/theme/rc/line_vertical_focus.png +0 -0
  330. melage/resource/theme/rc/line_vertical_focus@2x.png +0 -0
  331. melage/resource/theme/rc/line_vertical_pressed.png +0 -0
  332. melage/resource/theme/rc/line_vertical_pressed@2x.png +0 -0
  333. melage/resource/theme/rc/radio_checked.png +0 -0
  334. melage/resource/theme/rc/radio_checked@2x.png +0 -0
  335. melage/resource/theme/rc/radio_checked_disabled.png +0 -0
  336. melage/resource/theme/rc/radio_checked_disabled@2x.png +0 -0
  337. melage/resource/theme/rc/radio_checked_focus.png +0 -0
  338. melage/resource/theme/rc/radio_checked_focus@2x.png +0 -0
  339. melage/resource/theme/rc/radio_checked_pressed.png +0 -0
  340. melage/resource/theme/rc/radio_checked_pressed@2x.png +0 -0
  341. melage/resource/theme/rc/radio_unchecked.png +0 -0
  342. melage/resource/theme/rc/radio_unchecked@2x.png +0 -0
  343. melage/resource/theme/rc/radio_unchecked_disabled.png +0 -0
  344. melage/resource/theme/rc/radio_unchecked_disabled@2x.png +0 -0
  345. melage/resource/theme/rc/radio_unchecked_focus.png +0 -0
  346. melage/resource/theme/rc/radio_unchecked_focus@2x.png +0 -0
  347. melage/resource/theme/rc/radio_unchecked_pressed.png +0 -0
  348. melage/resource/theme/rc/radio_unchecked_pressed@2x.png +0 -0
  349. melage/resource/theme/rc/toolbar_move_horizontal.png +0 -0
  350. melage/resource/theme/rc/toolbar_move_horizontal@2x.png +0 -0
  351. melage/resource/theme/rc/toolbar_move_horizontal_disabled.png +0 -0
  352. melage/resource/theme/rc/toolbar_move_horizontal_disabled@2x.png +0 -0
  353. melage/resource/theme/rc/toolbar_move_horizontal_focus.png +0 -0
  354. melage/resource/theme/rc/toolbar_move_horizontal_focus@2x.png +0 -0
  355. melage/resource/theme/rc/toolbar_move_horizontal_pressed.png +0 -0
  356. melage/resource/theme/rc/toolbar_move_horizontal_pressed@2x.png +0 -0
  357. melage/resource/theme/rc/toolbar_move_vertical.png +0 -0
  358. melage/resource/theme/rc/toolbar_move_vertical@2x.png +0 -0
  359. melage/resource/theme/rc/toolbar_move_vertical_disabled.png +0 -0
  360. melage/resource/theme/rc/toolbar_move_vertical_disabled@2x.png +0 -0
  361. melage/resource/theme/rc/toolbar_move_vertical_focus.png +0 -0
  362. melage/resource/theme/rc/toolbar_move_vertical_focus@2x.png +0 -0
  363. melage/resource/theme/rc/toolbar_move_vertical_pressed.png +0 -0
  364. melage/resource/theme/rc/toolbar_move_vertical_pressed@2x.png +0 -0
  365. melage/resource/theme/rc/toolbar_separator_horizontal.png +0 -0
  366. melage/resource/theme/rc/toolbar_separator_horizontal@2x.png +0 -0
  367. melage/resource/theme/rc/toolbar_separator_horizontal_disabled.png +0 -0
  368. melage/resource/theme/rc/toolbar_separator_horizontal_disabled@2x.png +0 -0
  369. melage/resource/theme/rc/toolbar_separator_horizontal_focus.png +0 -0
  370. melage/resource/theme/rc/toolbar_separator_horizontal_focus@2x.png +0 -0
  371. melage/resource/theme/rc/toolbar_separator_horizontal_pressed.png +0 -0
  372. melage/resource/theme/rc/toolbar_separator_horizontal_pressed@2x.png +0 -0
  373. melage/resource/theme/rc/toolbar_separator_vertical.png +0 -0
  374. melage/resource/theme/rc/toolbar_separator_vertical@2x.png +0 -0
  375. melage/resource/theme/rc/toolbar_separator_vertical_disabled.png +0 -0
  376. melage/resource/theme/rc/toolbar_separator_vertical_disabled@2x.png +0 -0
  377. melage/resource/theme/rc/toolbar_separator_vertical_focus.png +0 -0
  378. melage/resource/theme/rc/toolbar_separator_vertical_focus@2x.png +0 -0
  379. melage/resource/theme/rc/toolbar_separator_vertical_pressed.png +0 -0
  380. melage/resource/theme/rc/toolbar_separator_vertical_pressed@2x.png +0 -0
  381. melage/resource/theme/rc/transparent.png +0 -0
  382. melage/resource/theme/rc/transparent@2x.png +0 -0
  383. melage/resource/theme/rc/transparent_disabled.png +0 -0
  384. melage/resource/theme/rc/transparent_disabled@2x.png +0 -0
  385. melage/resource/theme/rc/transparent_focus.png +0 -0
  386. melage/resource/theme/rc/transparent_focus@2x.png +0 -0
  387. melage/resource/theme/rc/transparent_pressed.png +0 -0
  388. melage/resource/theme/rc/transparent_pressed@2x.png +0 -0
  389. melage/resource/theme/rc/window_close.png +0 -0
  390. melage/resource/theme/rc/window_close@2x.png +0 -0
  391. melage/resource/theme/rc/window_close_disabled.png +0 -0
  392. melage/resource/theme/rc/window_close_disabled@2x.png +0 -0
  393. melage/resource/theme/rc/window_close_focus.png +0 -0
  394. melage/resource/theme/rc/window_close_focus@2x.png +0 -0
  395. melage/resource/theme/rc/window_close_pressed.png +0 -0
  396. melage/resource/theme/rc/window_close_pressed@2x.png +0 -0
  397. melage/resource/theme/rc/window_grip.png +0 -0
  398. melage/resource/theme/rc/window_grip@2x.png +0 -0
  399. melage/resource/theme/rc/window_grip_disabled.png +0 -0
  400. melage/resource/theme/rc/window_grip_disabled@2x.png +0 -0
  401. melage/resource/theme/rc/window_grip_focus.png +0 -0
  402. melage/resource/theme/rc/window_grip_focus@2x.png +0 -0
  403. melage/resource/theme/rc/window_grip_pressed.png +0 -0
  404. melage/resource/theme/rc/window_grip_pressed@2x.png +0 -0
  405. melage/resource/theme/rc/window_minimize.png +0 -0
  406. melage/resource/theme/rc/window_minimize@2x.png +0 -0
  407. melage/resource/theme/rc/window_minimize_disabled.png +0 -0
  408. melage/resource/theme/rc/window_minimize_disabled@2x.png +0 -0
  409. melage/resource/theme/rc/window_minimize_focus.png +0 -0
  410. melage/resource/theme/rc/window_minimize_focus@2x.png +0 -0
  411. melage/resource/theme/rc/window_minimize_pressed.png +0 -0
  412. melage/resource/theme/rc/window_minimize_pressed@2x.png +0 -0
  413. melage/resource/theme/rc/window_undock.png +0 -0
  414. melage/resource/theme/rc/window_undock@2x.png +0 -0
  415. melage/resource/theme/rc/window_undock_disabled.png +0 -0
  416. melage/resource/theme/rc/window_undock_disabled@2x.png +0 -0
  417. melage/resource/theme/rc/window_undock_focus.png +0 -0
  418. melage/resource/theme/rc/window_undock_focus@2x.png +0 -0
  419. melage/resource/theme/rc/window_undock_pressed.png +0 -0
  420. melage/resource/theme/rc/window_undock_pressed@2x.png +0 -0
  421. melage/resource/theme/style.qss +2223 -0
  422. melage/resource/tract.png +0 -0
  423. melage/resource/view1.png +0 -0
  424. melage/resource/view1_eco.png +0 -0
  425. melage/resource/view1_mri.png +0 -0
  426. melage/resource/view1_seg.png +0 -0
  427. melage/resource/view2.png +0 -0
  428. melage/resource/view2_seg.png +0 -0
  429. melage/resource/w.png +0 -0
  430. melage/resource/zoom_in.png +0 -0
  431. melage/resource/zoom_inFaded.png +0 -0
  432. melage/resource/zoom_out.png +0 -0
  433. melage/resource/zoom_outFaded.png +0 -0
  434. melage/some_notes.txt +3 -0
  435. melage/utils/DispalyIm.py +2788 -0
  436. melage/utils/GMM.py +720 -0
  437. melage/utils/Shaders_120.py +257 -0
  438. melage/utils/Shaders_330.py +314 -0
  439. melage/utils/Shaders_bu.py +314 -0
  440. melage/utils/__init__0.py +7 -0
  441. melage/utils/brain_extraction_helper.py +234 -0
  442. melage/utils/custom_QScrollBar.py +61 -0
  443. melage/utils/glScientific.py +1554 -0
  444. melage/utils/glScientific_bc.py +1585 -0
  445. melage/utils/readData.py +1061 -0
  446. melage/utils/registration.py +512 -0
  447. melage/utils/source_folder.py +18 -0
  448. melage/utils/utils.py +3808 -0
  449. melage/version.txt +1 -0
  450. melage/widgets/ApplyMask.py +212 -0
  451. melage/widgets/ChangeSystem.py +152 -0
  452. melage/widgets/DeepLModels/InfantSegment/Unet.py +464 -0
  453. melage/widgets/DeepLModels/NPP/dataset/mri_dataset_affine.py +149 -0
  454. melage/widgets/DeepLModels/NPP/models/checkpoints/npp_v1.pth.py +0 -0
  455. melage/widgets/DeepLModels/NPP/models/losses.py +146 -0
  456. melage/widgets/DeepLModels/NPP/models/model.py +272 -0
  457. melage/widgets/DeepLModels/NPP/models/utils.py +303 -0
  458. melage/widgets/DeepLModels/NPP/npp.py +116 -0
  459. melage/widgets/DeepLModels/NPP/requirements.txt +8 -0
  460. melage/widgets/DeepLModels/NPP/train/train.py +116 -0
  461. melage/widgets/DeepLModels/Unet3DAtt.py +657 -0
  462. melage/widgets/DeepLModels/Unet3D_basic.py +648 -0
  463. melage/widgets/DeepLModels/new_unet.py +652 -0
  464. melage/widgets/DeepLModels/new_unet_old.py +639 -0
  465. melage/widgets/DeepLModels/new_unet_old2.py +658 -0
  466. melage/widgets/HistImage.py +153 -0
  467. melage/widgets/ImageThresholding.py +222 -0
  468. melage/widgets/MaskOperations.py +147 -0
  469. melage/widgets/N4Dialog.py +241 -0
  470. melage/widgets/Segmentation/FCM.py +1553 -0
  471. melage/widgets/Segmentation/__init__.py +588 -0
  472. melage/widgets/Segmentation/utils.py +417 -0
  473. melage/widgets/SemiAutoSeg.py +666 -0
  474. melage/widgets/Synthstrip.py +141 -0
  475. melage/widgets/__init__0.py +5 -0
  476. melage/widgets/about.py +246 -0
  477. melage/widgets/activation.py +437 -0
  478. melage/widgets/activator.py +147 -0
  479. melage/widgets/be_dl.py +409 -0
  480. melage/widgets/be_dl_unet3d.py +441 -0
  481. melage/widgets/brain_extraction.py +855 -0
  482. melage/widgets/brain_extraction_dl.py +887 -0
  483. melage/widgets/brain_extraction_dl_bu.py +869 -0
  484. melage/widgets/colorwidget.py +100 -0
  485. melage/widgets/dockWidgets.py +2005 -0
  486. melage/widgets/enhanceImWidget.py +109 -0
  487. melage/widgets/fileDialog_widget.py +275 -0
  488. melage/widgets/iminfo.py +346 -0
  489. melage/widgets/mainwindow_widget.py +6775 -0
  490. melage/widgets/melageAbout.py +123 -0
  491. melage/widgets/openglWidgets.py +556 -0
  492. melage/widgets/registrationWidget.py +342 -0
  493. melage/widgets/repeat_widget.py +74 -0
  494. melage/widgets/screenshot_widget.py +138 -0
  495. melage/widgets/settings_widget.py +77 -0
  496. melage/widgets/tranformationWidget.py +275 -0
  497. melage-0.0.65.dist-info/METADATA +742 -0
  498. melage-0.0.65.dist-info/RECORD +501 -0
  499. melage-0.0.65.dist-info/WHEEL +5 -0
  500. melage-0.0.65.dist-info/entry_points.txt +2 -0
  501. melage-0.0.65.dist-info/top_level.txt +1 -0
@@ -0,0 +1,314 @@
1
+
2
+ __AUTHOR__ = 'Bahram Jafrasteh'
3
+
4
+ # vTexCoord=[0.0,0.0, 1.0,0.0, 1.0,1.0, 0.0,1.0]
5
+ # vVertices= [-1.0,-1.0, 1.0,-1.0, 1.0,1.0, -1.0,1.0]
6
+
7
+ # self.coord = [(0, 0), (0, 1), (1, 1), (1, 0)]
8
+ # self.vertex = [(0, 0), (0, self.imHeight), (self.imWidth, self.imHeight), (self.imWidth, 0)]
9
+
10
+ vsrc = """
11
+ #version 330
12
+ in vec2 in_Vertex;
13
+ in vec2 vertTexCoord;
14
+ out vec2 fragTexCoord;
15
+ uniform mat4 g_matModelView;
16
+ void main(void)
17
+ {
18
+ gl_Position = vec4(in_Vertex, 0.0, 1.0)*g_matModelView;
19
+
20
+ fragTexCoord = vertTexCoord;
21
+ }
22
+ """
23
+
24
+ fsrc = """
25
+ #version 330
26
+ #extension GL_ARB_explicit_uniform_location : enable
27
+ #extension GL_ARB_explicit_attrib_location : enable
28
+
29
+ //GPU FFT using a Stockham formulation
30
+ #define HORIZONTAL
31
+
32
+ //precision mediump float;
33
+
34
+ const float PI = 3.14159265359;
35
+ uniform float u_transformSize;
36
+ uniform float u_subtransformSize;
37
+
38
+
39
+
40
+
41
+ uniform sampler2D u_input;
42
+ uniform sampler2D tex;
43
+ uniform float threshold;
44
+ uniform float contrastMult; /* IN: contrast multiplier */
45
+ uniform float brightnessAdd; /* IN: brightness summand */
46
+ uniform vec3 deinterlace; /* IN: de-interlacing information:
47
+ s .. interlacing offset [pixel/texture size]
48
+ t .. texture size [pixel]
49
+ p .. mirror y axis, if 1.0 */
50
+ uniform vec2 mousePos;
51
+ uniform vec2 iResolution;
52
+ uniform float maxRadius;
53
+ uniform float Ilum;
54
+
55
+ const float fZero= 0.0;
56
+ const float fOne= 1.0;
57
+ const float fTwo= 2.0;
58
+ const float fColScal= 256.0;
59
+ const float Epsilon= 1e-10;
60
+
61
+
62
+ in vec2 fragTexCoord;
63
+ out vec4 fragColor;
64
+
65
+
66
+ uniform int sobel;
67
+ uniform float sobel_threshold;
68
+
69
+
70
+ vec2 multiplyComplex (vec2 a, vec2 b) {
71
+ return vec2(a[0] * b[0] - a[1] * b[1], a[1] * b[0] + a[0] * b[1]);
72
+ }
73
+
74
+ vec4 fft(vec2 vUV, float u_transformSize, float u_subtransformSize){
75
+ #ifdef HORIZONTAL
76
+ float index = vUV.x * u_transformSize - 0.5;
77
+ #else
78
+ float index = vUV.y * u_transformSize - 0.5;
79
+ #endif
80
+
81
+ float evenIndex = floor(index / u_subtransformSize) * (u_subtransformSize * 0.5) + mod(index, u_subtransformSize * 0.5);
82
+
83
+ //transform two complex sequences simultaneously
84
+ #ifdef HORIZONTAL
85
+ vec4 even = texture2D(u_input, vec2(evenIndex + 0.5, gl_FragCoord.y) / u_transformSize).rgba;
86
+ vec4 odd = texture2D(u_input, vec2(evenIndex + u_transformSize * 0.5 + 0.5, gl_FragCoord.y) / u_transformSize).rgba;
87
+ #else
88
+ vec4 even = texture2D(u_input, vec2(gl_FragCoord.x, evenIndex + 0.5) / u_transformSize).rgba;
89
+ vec4 odd = texture2D(u_input, vec2(gl_FragCoord.x, evenIndex + u_transformSize * 0.5 + 0.5) / u_transformSize).rgba;
90
+ #endif
91
+
92
+ float twiddleArgument1D = -2.0 * PI * (index / u_subtransformSize);
93
+ vec2 twiddle1D = vec2(cos(twiddleArgument1D), sin(twiddleArgument1D));
94
+
95
+ vec2 outputA = even.xy + multiplyComplex(twiddle1D, odd.xy); //even.xy
96
+ vec2 outputB = even.zw + multiplyComplex(twiddle1D, odd.zw); //even.zw
97
+
98
+ //gl_gl_FragColor
99
+ return vec4(outputA,outputB);
100
+ }
101
+
102
+ vec4 sobel_kernel(sampler2D tex, vec2 coord)
103
+ {
104
+ float w = maxRadius / iResolution.x;
105
+ float h = maxRadius / iResolution.y;
106
+
107
+ vec3 BL = texture2D(tex, coord + vec2( -w, -h)).rgb;
108
+ vec3 BM = texture2D(tex, coord + vec2(0.0, -h)).rgb;
109
+ vec3 BR = texture2D(tex, coord + vec2( w, -h)).rgb;
110
+ vec3 ML = texture2D(tex, coord + vec2( -w, 0.0)).rgb;
111
+ vec3 MM = texture2D(tex, coord).rgb;
112
+ vec3 MR = texture2D(tex, coord + vec2( w, 0.0)).rgb;
113
+ vec3 TL = texture2D(tex, coord + vec2( -w, h)).rgb;
114
+ vec3 TM = texture2D(tex, coord + vec2(0.0, h)).rgb;
115
+ vec3 TR = texture2D(tex, coord + vec2( w, h)).rgb;
116
+ vec3 GradX = -TL + TR - 2.0 * ML + 2.0 * MR - BL + BR;
117
+ vec3 GradY = TL + 2.0 * TM + TR - BL - 2.0 * BM - BR;
118
+ return vec4 (length(vec2(GradX.r, GradY.r)), length(vec2(GradX.g, GradY.g)), length(vec2(GradX.b, GradY.b)), 1);
119
+ //vec4 sobel_edge_h = n[2] + (2.0*n[5]) + n[8] - (n[0] + (2.0*n[3]) + n[6]);
120
+ //vec4 sobel_edge_v = n[0] + (2.0*n[1]) + n[2] - (n[6] + (2.0*n[7]) + n[8]);
121
+
122
+ }
123
+
124
+ vec3 RGBtoHSV(in vec3 RGB)
125
+ {
126
+ vec4 P = (RGB.g < RGB.b) ? vec4(RGB.bg, -1.0, 2.0/3.0) : vec4(RGB.gb, 0.0, -1.0/3.0);
127
+ vec4 Q = (RGB.r < P.x) ? vec4(P.xyw, RGB.r) : vec4(RGB.r, P.yzx);
128
+ float C = Q.x - min(Q.w, Q.y);
129
+ float H = abs((Q.w - Q.y) / (6.0 * C + Epsilon) + Q.z);
130
+ vec3 HCV = vec3(H, C, Q.x);
131
+ float S = HCV.y / (HCV.z + Epsilon);
132
+ return vec3(HCV.x, S, HCV.z);
133
+ }
134
+ vec3 HSVtoRGB(in vec3 HSV)
135
+ {
136
+ float H = HSV.x;
137
+ float R = abs(H * 6.0 - 3.0) - 1.0;
138
+ float G = 2.0 - abs(H * 6.0 - 2.0);
139
+ float B = 2.0 - abs(H * 6.0 - 4.0);
140
+ vec3 RGB = clamp( vec3(R,G,B), 0.0, 1.0 );
141
+ return ((RGB - 1.0) * HSV.y + 1.0) * HSV.z;
142
+ }
143
+
144
+ mat3 kernel1 = mat3 (1.0, 0.0, -1.0,
145
+ 2.0, 0.0, 2.0,
146
+ 1.0, 0.0, -1.0);
147
+ mat3 kernel2 = mat3 (1.0, 2.0, 1.0,
148
+ 0.0, 0.0, 0.0,
149
+ -1.0, -2.0, -1.0);
150
+
151
+ float toGrayscale(vec3 source) {
152
+ float average = (source.x+source.y+source.z)/3.0;
153
+ return average;
154
+ }
155
+
156
+
157
+ float doConvolution(mat3 kernel) {
158
+ float sum = 0.0;
159
+ float current_pixelColor = toGrayscale(texture2D(tex,fragTexCoord).xyz);
160
+ float xOffset = float(1)/1024.0;
161
+ float yOffset = float(1)/768.0;
162
+ float new_pixel00 = toGrayscale(texture2D(tex, vec2(fragTexCoord.x-xOffset,fragTexCoord.y-yOffset)).xyz);
163
+ float new_pixel01 = toGrayscale(texture2D(tex,vec2(fragTexCoord.x,fragTexCoord.y-yOffset)).xyz);
164
+ float new_pixel02 = toGrayscale(texture2D(tex,vec2(fragTexCoord.x+xOffset,fragTexCoord.y-yOffset)).xyz);
165
+ vec3 pixelRow0 = vec3(new_pixel00,new_pixel01,new_pixel02);
166
+ float new_pixel10 = toGrayscale(texture2D(tex,vec2(fragTexCoord.x-xOffset,fragTexCoord.y)).xyz);
167
+ float new_pixel11 = toGrayscale(texture2D(tex,vec2(fragTexCoord.x,fragTexCoord.y)).xyz);
168
+ float new_pixel12 = toGrayscale(texture2D(tex,vec2(fragTexCoord.x+xOffset,fragTexCoord.y)).xyz);
169
+ vec3 pixelRow1 = vec3(new_pixel10,new_pixel11,new_pixel12);
170
+ float new_pixel20 = toGrayscale(texture2D(tex,vec2(fragTexCoord.x-xOffset,fragTexCoord.y+yOffset)).xyz);
171
+ float new_pixel21 = toGrayscale(texture2D(tex,vec2(fragTexCoord.x,fragTexCoord.y+yOffset)).xyz);
172
+ float new_pixel22 = toGrayscale(texture2D(tex,vec2(fragTexCoord.x+xOffset,fragTexCoord.y+yOffset)).xyz);
173
+ vec3 pixelRow2 = vec3(new_pixel20,new_pixel21,new_pixel22);
174
+ vec3 mult1 = (kernel[0]*pixelRow0);
175
+ vec3 mult2 = (kernel[1]*pixelRow1);
176
+ vec3 mult3 = (kernel[2]*pixelRow2);
177
+ sum= mult1.x+mult1.y+mult1.z+mult2.x+mult2.y+mult2.z+mult3.x+mult3.y+mult3.z;
178
+ return sum;
179
+
180
+ }
181
+
182
+
183
+ void main(void)
184
+ {
185
+ int gaussianBlue = 0;
186
+
187
+ if (sobel== 1) //soble kernel
188
+ {
189
+ vec4 color0 = texture2D(tex, fragTexCoord);
190
+ vec4 bw = vec4(vec3(color0.r, color0.g, color0.b), color0.a);
191
+ vec2 uv = gl_FragCoord.xy/iResolution.xy;
192
+ vec2 mousePosition= mousePos/iResolution.xy;
193
+ float dist = distance(mousePosition, uv);
194
+ float distx = abs(mousePosition.x-uv.x);
195
+ float disty = abs(mousePosition.y-uv.y);
196
+ float mixAmount = clamp((dist - 0.0) / 0.2, 0., 1.);
197
+ //color0.r += mixAmount;
198
+ //vec4 mouseColor= texture2D(tex, mousePosition.xy);
199
+ //float distcolor = distance(color0.rgb, mouseColor.rgb);
200
+ //float mixAmountc = clamp((distcolor - 0.0) / (1.0-maxRadius), 0., 1.);
201
+ //color0 = mix(color0, bw, mixAmount);
202
+ //color0 = mix(color0, bw, mixAmountc);
203
+ //color0.r += mixAmountc;
204
+ //float luminanceM = dot (vec3(0.114 ,0.587,0.299 ),mouseColor.rgb);
205
+
206
+ vec4 sobelk = sobel_kernel(tex, fragTexCoord.st);
207
+
208
+
209
+ float luminance = dot (vec3(0.114 ,0.587,0.299 ),color0.rgb);
210
+
211
+ if(luminance<sobel_threshold)
212
+ fragColor = vec4(color0.rgba);
213
+
214
+ else
215
+ {
216
+ //if ( (distx < 0.08) && (disty < 0.04))
217
+ // fragColor = vec4(0.0,1,0,1);
218
+ //else
219
+ // fragColor = vec4(color0.rgba);
220
+ color0.r += sobelk.r;
221
+ color0.g = sobelk.g;
222
+ color0.b += sobelk.b;
223
+
224
+ }
225
+ fragColor = mix(color0, bw, mixAmount);
226
+
227
+ vec4 pixelColor = texture2D(tex, fragTexCoord);
228
+ float horizontalSum = 0.0;
229
+ float verticalSum = 0.0;
230
+ float averageSum = 0.0;
231
+ horizontalSum = doConvolution(kernel1);
232
+ verticalSum = doConvolution(kernel2);
233
+ if( (verticalSum > sobel_threshold)|| (horizontalSum >sobel_threshold)||(verticalSum < -sobel_threshold)|| (horizontalSum <-sobel_threshold))
234
+ averageSum = pixelColor.x;
235
+ else
236
+ averageSum = 1.0;
237
+ fragColor = vec4(averageSum,averageSum,averageSum,1.0);
238
+
239
+ }
240
+ else
241
+ {
242
+ vec4 pixelColor = texture2D(tex, fragTexCoord);
243
+
244
+ pixelColor.rgb /= pixelColor.a;
245
+
246
+ // first apply brightness
247
+ pixelColor.rgb += brightnessAdd;
248
+
249
+ // then apply contrast
250
+ pixelColor.rgb = ((pixelColor.rgb - 0.5) * max(contrastMult, 0.0)) + 0.5;
251
+
252
+ // Return final pixel color
253
+ pixelColor.rgb *= pixelColor.a;
254
+
255
+ vec3 current_Color;
256
+
257
+ current_Color = vec3(pixelColor.r, pixelColor.g, pixelColor.b);
258
+
259
+ if (threshold>0)
260
+ {
261
+ float luminance = dot (vec3(0.114 ,0.587,0.299 ),current_Color);
262
+ if(luminance<threshold)
263
+ fragColor = vec4(1.0);
264
+ else
265
+ fragColor = vec4(0.0);
266
+ }
267
+ else
268
+ {
269
+ //vec3 col_hsv = RGBtoHSV(current_Color);
270
+ //uniform float u_saturate;
271
+ //float u_saturate;
272
+ //u_saturate = 10.0;
273
+ //col_hsv.y *= (u_saturate * 2.0);
274
+ //vec3 col_rgb = HSVtoRGB(col_hsv.rgb);
275
+ //fragColor = vec4(col_rgb.rgb, fOne);
276
+ fragColor = vec4(current_Color, fOne);
277
+
278
+ //fragColor = fft(gl_FragCoord.xy, u_transformSize,u_subtransformSize);
279
+ }
280
+
281
+
282
+ }
283
+ }
284
+ """
285
+
286
+ vsrcPaint = """
287
+ #version 330
288
+ in vec2 in_Vertex;
289
+ uniform mat4 g_matModelView;
290
+ out vec4 positionGL;
291
+ void main(void)
292
+ {
293
+
294
+ gl_Position = vec4(in_Vertex, 0.0, 1.0)*g_matModelView;
295
+ positionGL = gl_Position;
296
+ gl_PointSize = 200.0;
297
+ }
298
+ """
299
+
300
+ fsrcPaint = """
301
+ #version 330
302
+
303
+ uniform vec4 my_color;
304
+ out vec4 FragColor;
305
+ in vec4 positionGL;
306
+
307
+
308
+
309
+ void main(void)
310
+ {
311
+ FragColor = my_color;
312
+
313
+ }
314
+ """
@@ -0,0 +1,7 @@
1
+ __author__='Bahram Jafrasteh'
2
+ import sys
3
+ import os
4
+
5
+ __all__ = ['Shaders', 'Shadersv120', 'custom_QScrollBar', 'utils', 'DispalyIm', 'GMM', 'registration', 'brain_extraction_helper', 'readData', 'source_folder', 'Shaders_bu', 'glScientific']
6
+
7
+
@@ -0,0 +1,234 @@
1
+ """
2
+ Helper functions
3
+ """
4
+ import numpy as np
5
+ from numba import jit
6
+
7
+ """
8
+ This code has been used from https://github.com/vanandrew/brainextractor/tree/main/brainextractor
9
+ with small modification whenever it is needed.
10
+
11
+ """
12
+
13
+
14
+ def sphere(shape: list, radius: float, position: list):
15
+ """
16
+ Creates a binary sphere
17
+ """
18
+ # assume shape and position are both a 3-tuple of int or float
19
+ # the units are pixels / voxels (px for short)
20
+ # radius is a int or float in px
21
+ semisizes = (radius,) * 3
22
+
23
+ # genereate the grid for the support points
24
+ # centered at the position indicated by position
25
+ grid = [slice(-x0, dim - x0) for x0, dim in zip(position, shape)]
26
+ position = np.ogrid[grid]
27
+ # calculate the distance of all points from `position` center
28
+ # scaled by the radius
29
+ arr = np.zeros(shape, dtype=float)
30
+ for x_i, semisize in zip(position, semisizes):
31
+ # this can be generalized for exponent != 2
32
+ # in which case `(x_i / semisize)`
33
+ # would become `np.abs(x_i / semisize)`
34
+ arr += (x_i / semisize) ** 2
35
+
36
+ # the inner part of the sphere will have distance below 1
37
+ return arr <= 1.0
38
+
39
+
40
+ @jit(nopython=True, cache=True)
41
+ def closest_integer_point(vertex: np.ndarray):
42
+ """
43
+ Gives the closest integer point based on euclidean distance
44
+ """
45
+ # get neighboring grid points to search
46
+ x = vertex[0]
47
+ y = vertex[1]
48
+ z = vertex[2]
49
+ x0 = np.floor(x)
50
+ y0 = np.floor(y)
51
+ z0 = np.floor(z)
52
+ x1 = x0 + 1
53
+ y1 = y0 + 1
54
+ z1 = z0 + 1
55
+
56
+ # initialize min euclidean distance
57
+ min_euclid = 99
58
+
59
+ # loop through each neighbor point
60
+ for i in [x0, x1]:
61
+ for j in [y0, y1]:
62
+ for k in [z0, z1]:
63
+ # compare coordinate and store if min euclid distance
64
+ coords = np.array([i, j, k])
65
+ dist = l2norm(vertex - coords)
66
+ if dist < min_euclid:
67
+ min_euclid = dist
68
+ final_coords = coords
69
+
70
+ # return the final coords
71
+ return final_coords.astype(np.int64)
72
+
73
+
74
+ @jit(nopython=True, cache=True)
75
+ def bresenham3d(v0: np.ndarray, v1: np.ndarray, shape):
76
+ """
77
+ Bresenham's algorithm for a 3-D line
78
+
79
+ https://www.geeksforgeeks.org/bresenhams-algorithm-for-3-d-line-drawing/
80
+ """
81
+ # initialize axis differences
82
+
83
+ dx = np.abs(v1[0] - v0[0])
84
+ dy = np.abs(v1[1] - v0[1])
85
+ dz = np.abs(v1[2] - v0[2])
86
+ maxx = shape[0]
87
+ maxy = shape[1]
88
+ maxz = shape[2]
89
+ v0[0] = v0[0]-1 if (v0[0] >= maxx) else v0[0]
90
+ v0[1] = v0[1]-1 if (v0[1] >= maxy) else v0[1]
91
+ v0[2] = v0[2]-1 if (v0[2] >= maxz) else v0[2]
92
+
93
+ v1[0] = v1[0]-1 if (v1[0] >= maxx) else v1[0]
94
+ v1[1] = v1[1]-1 if (v1[1] >= maxy) else v1[1]
95
+ v1[2] = v1[2]-1 if (v1[2] >= maxz) else v1[2]
96
+
97
+ xs = 1 if (v1[0] > v0[0]) else -1
98
+ ys = 1 if (v1[1] > v0[1]) else -1
99
+ zs = 1 if (v1[2] > v0[2]) else -1
100
+
101
+ # determine the driving axis
102
+ if dx >= dy and dx >= dz:
103
+ d0 = dx
104
+ d1 = dy
105
+ d2 = dz
106
+ s0 = xs
107
+ s1 = ys
108
+ s2 = zs
109
+ a0 = 0
110
+ a1 = 1
111
+ a2 = 2
112
+ elif dy >= dx and dy >= dz:
113
+ d0 = dy
114
+ d1 = dx
115
+ d2 = dz
116
+ s0 = ys
117
+ s1 = xs
118
+ s2 = zs
119
+ a0 = 1
120
+ a1 = 0
121
+ a2 = 2
122
+ elif dz >= dx and dz >= dy:
123
+ d0 = dz
124
+ d1 = dx
125
+ d2 = dy
126
+ s0 = zs
127
+ s1 = xs
128
+ s2 = ys
129
+ a0 = 2
130
+ a1 = 0
131
+ a2 = 1
132
+
133
+ # create line array
134
+ line = np.zeros((d0 + 1, 3), dtype=np.int64)
135
+ line[0] = v0
136
+
137
+ # get points
138
+ p1 = 2 * d1 - d0
139
+ p2 = 2 * d2 - d0
140
+ for i in range(d0):
141
+ c = line[i].copy()
142
+ c[a0] += s0
143
+ if p1 >= 0:
144
+ c[a1] += s1
145
+ p1 -= 2 * d0
146
+ if p2 >= 0:
147
+ c[a2] += s2
148
+ p2 -= 2 * d0
149
+ p1 += 2 * d1
150
+ p2 += 2 * d2
151
+ line[i + 1] = c
152
+
153
+ # return list
154
+ return line
155
+
156
+
157
+ @jit(nopython=True, cache=True)
158
+ def l2norm(vec: np.ndarray):
159
+ """
160
+ Computes the l2 norm for 3d vector
161
+ """
162
+ return np.sqrt(vec[0] ** 2 + vec[1] ** 2 + vec[2] ** 2)
163
+
164
+
165
+ @jit(nopython=True, cache=True)
166
+ def l2normarray(array: np.ndarray):
167
+ """
168
+ Computes the l2 norm for several 3d vectors
169
+ """
170
+ return np.sqrt(array[:, 0] ** 2 + array[:, 1] ** 2 + array[:, 2] ** 2)
171
+
172
+
173
+ def diagonal_dot(a: np.ndarray, b: np.ndarray):
174
+ """
175
+ Dot product by row of a and b.
176
+ There are a lot of ways to do this though
177
+ performance varies very widely. This method
178
+ uses a dot product to sum the row and avoids
179
+ function calls if at all possible.
180
+ """
181
+ a = np.asanyarray(a)
182
+ return np.dot(a * b, [1.0] * a.shape[1])
183
+
184
+
185
+
186
+ def bresenhamlines_getdata(start, end, data, tm, t2, mode):
187
+ #https://code.activestate.com/recipes/578112-bresenhams-line-algorithm-in-n-dimensions/
188
+ max_iter = np.amax(np.abs(end - start), axis=1)
189
+
190
+ slope = end - start
191
+ scale = np.amax(np.abs(slope), axis=1).reshape(-1, 1)
192
+ zeroslope = (scale == 0).all(1)
193
+ scale[zeroslope] = np.ones(1)
194
+ nslope = np.array(slope, dtype=np.double) / scale
195
+ nslope[zeroslope] = np.zeros(slope[0].shape)
196
+ npts, dim = 1, 3
197
+
198
+ # steps to iterate on
199
+
200
+ blines = []
201
+ Intensitymat = np.zeros(len(max_iter))
202
+ if mode=='min':
203
+ for i in range(len(max_iter)):
204
+ stepmat = np.ones((max_iter[i]+1, 3))*(np.arange(max_iter[i]+1).reshape(-1,1))
205
+ # some hacks for broadcasting properly
206
+ bline = np.rint(start[i, np.newaxis, :]+nslope[i,np.newaxis, :]*stepmat).astype(start.dtype)
207
+ intensity = data[bline[:,0], bline[:,1], bline[:,2]]
208
+ Intensitymat[i] = np.max([t2, np.min([np.min(intensity),tm])]) # min intensity from far distance
209
+
210
+ else:
211
+ for i in range(len(max_iter)):
212
+ stepmat = np.ones((max_iter[i]+1, 3))*(np.arange(max_iter[i]+1).reshape(-1,1))
213
+ # some hacks for broadcasting properly
214
+ bline = np.rint(start[i, np.newaxis, :]+nslope[i,np.newaxis, :]*stepmat).astype(start.dtype)
215
+ intensity = data[bline[:,0], bline[:,1], bline[:,2]]
216
+
217
+ Intensitymat[i] = np.min([t2, np.max([np.max(intensity), tm])])
218
+ return Intensitymat
219
+
220
+ def bresenham3d_python(start: np.ndarray, end: np.ndarray):
221
+ ## BJ
222
+ slope = np.asanyarray(end - start)
223
+ scale = np.max(np.abs(slope), axis=1).reshape(-1, 1)
224
+ zeroslope = (scale == 0).all(1)
225
+ scale[zeroslope] = np.ones(1)
226
+ nslope = np.array(slope, dtype=np.double) / scale
227
+ nslope[zeroslope] = np.zeros(slope[0].shape)
228
+ max_iter = np.amax(np.abs(end - start), axis=1)
229
+ #stepseq = np.arange(1, max_iter + 1)
230
+ #stepmat = np.tile(stepseq, (dim, 1)).T
231
+ stepmat = np.ones((max_iter + 1, 3)) * (np.arange(max_iter + 1).reshape(-1, 1))
232
+ # some hacks for broadcasting properly
233
+ bline = np.rint(start[:, np.newaxis, :] + nslope[:, np.newaxis, :] * stepmat).astype(start.dtype)
234
+ return bline
@@ -0,0 +1,61 @@
1
+ from PyQt5.QtWidgets import QScrollBar
2
+ from PyQt5.QtCore import Qt
3
+ from PyQt5.QtWidgets import QMenu, QAction, QDialog
4
+ from PyQt5.QtCore import pyqtSignal
5
+ from PyQt5 import QtWidgets
6
+ class custom_qscrollbar(QScrollBar):
7
+ """
8
+ HORIZONTAL SLIDER
9
+ """
10
+ cut_limit = pyqtSignal(object)
11
+ def __init__(self, parent=None, id = 0):
12
+ self.id = id
13
+ QScrollBar.__init__(self, parent)
14
+ Dialog = self.window()
15
+ Dialog.setObjectName("Image info")
16
+ Dialog.resize(40, 200)
17
+ self.setContextMenuPolicy(Qt.CustomContextMenu)
18
+ self.customContextMenuRequested.connect(self.ShowContextMenu)
19
+ self._txtA = "A"
20
+ self._txtB = "B"
21
+ self._first = 0
22
+ self._second = 0
23
+
24
+
25
+
26
+ def ShowContextMenu(self, pos):
27
+ menu = QMenu('Menu')
28
+ first_action = QAction(self._txtA)
29
+ second_action = QAction(self._txtB)
30
+
31
+ cut_action = QAction("Cut")
32
+ menu.addAction(first_action)
33
+ menu.addAction(second_action)
34
+ menu.addAction(cut_action)
35
+ action = menu.exec_(self.mapToGlobal(pos))
36
+ if action==first_action:
37
+ #mouse_p = int((pos.x() / self.width()) * (self.maximum() - self.minimum()) + self.minimum())
38
+ #self.setSliderPosition(mouse_p)
39
+ self._first = self.value()
40
+ self._txtA = "A:{}".format(self._first)
41
+ #self.setSliderPosition(105)
42
+ elif action==second_action:
43
+ self._second = self.value()
44
+ self._txtB = "B:{}".format(self._second)
45
+ elif action == cut_action:
46
+ if self._first == self._second:
47
+ return
48
+ cut_limit = [self._first, self._second]
49
+ self.cut_limit.emit(cut_limit)
50
+
51
+ def run():
52
+ import sys
53
+ from PyQt5 import QtWidgets, QtCore, QtGui
54
+ from PyQt5.QtCore import pyqtSignal
55
+ app = QtWidgets.QApplication(sys.argv)
56
+ window = custom_qscrollbar()
57
+ window.show()
58
+ sys.exit(app.exec_())
59
+
60
+ if __name__ == '__main__':
61
+ run()