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,141 @@
1
+ """
2
+ Synthstrip model
3
+ https://github.com/freesurfer/freesurfer/tree/dev/mri_synthstrip
4
+ """
5
+
6
+
7
+ import torch
8
+ import torch.nn as nn
9
+ import numpy as np
10
+
11
+ class StripModel(nn.Module):
12
+ """
13
+ https://github.com/freesurfer/freesurfer/tree/dev/mri_synthstrip
14
+ """
15
+ def __init__(self,
16
+ nb_features=16,
17
+ nb_levels=7,
18
+ feat_mult=2,
19
+ max_features=64,
20
+ nb_conv_per_level=2,
21
+ max_pool=2,
22
+ return_mask=False):
23
+
24
+ super().__init__()
25
+
26
+ # dimensionality
27
+ ndims = 3
28
+
29
+ # build feature list automatically
30
+ if isinstance(nb_features, int):
31
+ if nb_levels is None:
32
+ raise ValueError('must provide unet nb_levels if nb_features is an integer')
33
+ feats = np.round(nb_features * feat_mult ** np.arange(nb_levels)).astype(int)
34
+ feats = np.clip(feats, 1, max_features)
35
+ nb_features = [
36
+ np.repeat(feats[:-1], nb_conv_per_level),
37
+ np.repeat(np.flip(feats), nb_conv_per_level)
38
+ ]
39
+ elif nb_levels is not None:
40
+ raise ValueError('cannot use nb_levels if nb_features is not an integer')
41
+
42
+ # extract any surplus (full resolution) decoder convolutions
43
+ enc_nf, dec_nf = nb_features
44
+ nb_dec_convs = len(enc_nf)
45
+ final_convs = dec_nf[nb_dec_convs:]
46
+ dec_nf = dec_nf[:nb_dec_convs]
47
+ self.nb_levels = int(nb_dec_convs / nb_conv_per_level) + 1
48
+
49
+ if isinstance(max_pool, int):
50
+ max_pool = [max_pool] * self.nb_levels
51
+
52
+ # cache downsampling / upsampling operations
53
+ MaxPooling = getattr(nn, 'MaxPool%dd' % ndims)
54
+ self.pooling = [MaxPooling(s) for s in max_pool]
55
+ self.upsampling = [nn.Upsample(scale_factor=s, mode='nearest') for s in max_pool]
56
+
57
+ # configure encoder (down-sampling path)
58
+ prev_nf = 1
59
+ encoder_nfs = [prev_nf]
60
+ self.encoder = nn.ModuleList()
61
+ for level in range(self.nb_levels - 1):
62
+ convs = nn.ModuleList()
63
+ for conv in range(nb_conv_per_level):
64
+ nf = enc_nf[level * nb_conv_per_level + conv]
65
+ convs.append(ConvBlock(ndims, prev_nf, nf))
66
+ prev_nf = nf
67
+ self.encoder.append(convs)
68
+ encoder_nfs.append(prev_nf)
69
+
70
+ # configure decoder (up-sampling path)
71
+ encoder_nfs = np.flip(encoder_nfs)
72
+ self.decoder = nn.ModuleList()
73
+ for level in range(self.nb_levels - 1):
74
+ convs = nn.ModuleList()
75
+ for conv in range(nb_conv_per_level):
76
+ nf = dec_nf[level * nb_conv_per_level + conv]
77
+ convs.append(ConvBlock(ndims, prev_nf, nf))
78
+ prev_nf = nf
79
+ self.decoder.append(convs)
80
+ if level < (self.nb_levels - 1):
81
+ prev_nf += encoder_nfs[level]
82
+
83
+ # now we take care of any remaining convolutions
84
+ self.remaining = nn.ModuleList()
85
+ for num, nf in enumerate(final_convs):
86
+ self.remaining.append(ConvBlock(ndims, prev_nf, nf))
87
+ prev_nf = nf
88
+
89
+ # final convolutions
90
+ if return_mask:
91
+ self.remaining.append(ConvBlock(ndims, prev_nf, 2, activation=None))
92
+ self.remaining.append(nn.Softmax(dim=1))
93
+ else:
94
+ self.remaining.append(ConvBlock(ndims, prev_nf, 1, activation=None))
95
+
96
+ def forward(self, x, a=None):
97
+
98
+ # encoder forward pass
99
+ x_history = [x]
100
+ for level, convs in enumerate(self.encoder):
101
+ for conv in convs:
102
+ x = conv(x)
103
+ x_history.append(x)
104
+ x = self.pooling[level](x)
105
+
106
+ # decoder forward pass with upsampling and concatenation
107
+ for level, convs in enumerate(self.decoder):
108
+ for conv in convs:
109
+ x = conv(x)
110
+ if level < (self.nb_levels - 1):
111
+ x = self.upsampling[level](x)
112
+ x = torch.cat([x, x_history.pop()], dim=1)
113
+
114
+ # remaining convs at full resolution
115
+ for conv in self.remaining:
116
+ x = conv(x)
117
+
118
+ return x
119
+
120
+ class ConvBlock(nn.Module):
121
+ """
122
+ Specific convolutional block followed by leakyrelu for unet.
123
+ """
124
+
125
+ def __init__(self, ndims, in_channels, out_channels, stride=1, activation='leaky'):
126
+ super().__init__()
127
+
128
+ Conv = getattr(nn, 'Conv%dd' % ndims)
129
+ self.conv = Conv(in_channels, out_channels, 3, stride, 1)
130
+ if activation == 'leaky':
131
+ self.activation = nn.LeakyReLU(0.2)
132
+ elif activation == None:
133
+ self.activation = None
134
+ else:
135
+ raise ValueError(f'Unknown activation: {activation}')
136
+
137
+ def forward(self, x):
138
+ out = self.conv(x)
139
+ if self.activation is not None:
140
+ out = self.activation(out)
141
+ return out
@@ -0,0 +1,5 @@
1
+ __author__='Bahram Jafrasteh'
2
+
3
+ __all__ = ['mainwindow_widget', 'fileDialog_widget', 'be_dl_unet3d', 'settings_widget', 'melageAbout', 'repeat_widget', 'registrationWidget', 'HistImage', 'about', 'iminfo', 'activator', 'openglWidgets', 'MaskOperations', 'N4Dialog', 'Synthstrip', 'ChangeSystem', 'ImageThresholding', 'screenshot_widget', 'be_dl', 'ApplyMask', 'colorwidget', 'enhanceImWidget', 'tranformationWidget', 'activation', 'dockWidgets', 'brain_extraction', 'brain_extraction_dl']
4
+
5
+
@@ -0,0 +1,246 @@
1
+ __AUTHOR__ = 'Bahram Jafrasteh'
2
+
3
+ from PyQt5 import QtWidgets, QtCore, QtGui
4
+ from PyQt5.QtCore import pyqtSignal
5
+
6
+ class iminfo_dialog(QtWidgets.QDialog):
7
+ """
8
+ This calss has been implemented to show image info
9
+ """
10
+
11
+ closeSig = pyqtSignal()
12
+ def __init__(self, parent=None):
13
+ QtWidgets.QDialog.__init__(self, parent)
14
+ self.setWindowTitle("Activation")
15
+
16
+ self.setupUi()
17
+ def closeEvent(self, a0: QtGui.QCloseEvent) -> None:
18
+ self.closeSig.emit()
19
+ super(iminfo_dialog, self).closeEvent(a0)
20
+
21
+ def setupUi(self):
22
+ Dialog = self.window()
23
+ Dialog.setObjectName("Image info")
24
+ Dialog.resize(803, 340)
25
+ self.grid_main = QtWidgets.QVBoxLayout(self)
26
+ self.grid_main.setContentsMargins(10,10,10,10)
27
+ self.grid_main.setObjectName("gridLayout")
28
+ self.tabWidget = QtWidgets.QTabWidget()
29
+ self.tabWidget.setGeometry(QtCore.QRect(20, 30, 761, 251))
30
+ self.tabWidget.setObjectName("tabWidget")
31
+ sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.MinimumExpanding, QtWidgets.QSizePolicy.MinimumExpanding)
32
+ sizePolicy.setHorizontalStretch(0)
33
+ sizePolicy.setVerticalStretch(0)
34
+ sizePolicy.setHeightForWidth(self.tabWidget.sizePolicy().hasHeightForWidth())
35
+ self.tabWidget.setSizePolicy(sizePolicy)
36
+ self.tabWidget.setMinimumSize(QtCore.QSize(100, 100))
37
+ self.tab = QtWidgets.QWidget()
38
+ self.tab.setObjectName("tab")
39
+ self.gridLayout_mri = QtWidgets.QGridLayout(self.tab)
40
+ self.gridLayout_mri.setContentsMargins(10, 10, 10, 10)
41
+ self.gridLayout_mri.setObjectName("gridLayout_6")
42
+ self.label_mri = QtWidgets.QTextEdit(self.tab)
43
+ #a=[['Specific Character Set', 'ISO 2022 IR 100'], ['Image Type', ['ORIGINAL', 'SECONDARY', 'M', 'ND', 'NORM', 'FM', 'FIL']], ['Instance Creation Date', '20221122'], ['Instance Creation Time', '132720'], ['SOP Class UID', '1.2.840.10008.5.1.4.1.1.4'], ['SOP Instance UID', '1.2.840.113704.7.1.0.24314716597252255.1669120040.34722'], ['Study Date', '20210918'], ['Series Date', '20210918'], ['Acquisition Date', '20210918'], ['Content Date', '20210918'], ['Study Time', '125148.593000'], ['Series Time', '130306.453000'], ['Acquisition Time', '125906.770000'], ['Content Time', '130306.453000'], ['Accession Number', '124599971'], ['Modality', 'MR'], ['Modalities in Study', ['MR', 'SR']], ['Manufacturer', 'SIEMENS'], ['Institution Name', 'Hospital Puerta del Mar'], ['Institution Address', 'Av. Ana deb Viya 21,Cadiz,District,ES,11009'], ["Referring Physician's Name", 'RUIZ^ESTEFANIA'], ['Station Name', 'MRC37557'], ['Study Description', 'RM sin Contraste I.V. de Cráneo'], ['Procedure Code Sequence', 1], ['Series Description', 't1_mprage_tra_p2_iso'], ['Institutional Department Name', 'Department'], ['Physician(s) of Record', 'RUIZ^ESTEFANIA'], ["Performing Physician's Name", ''], ["Manufacturer's Model Name", 'SymphonyTim'], ['Referenced Image Sequence', 3], ['Source Image Sequence', 1], ["Patient's Name", 'BEARDO NAVAS^ADRIANA'], ['Patient ID', 'AN1337834619'], ['Issuer of Patient ID', 'NUHSA'], ["Patient's Birth Date", '20110128'], ["Patient's Sex", 'F'], ["Patient's Age", '010Y'], ["Patient's Size", '0.0'], ["Patient's Weight", '35.0'], ['Pregnancy Status', 4], ['Scanning Sequence', ['GR', 'IR']], ['Sequence Variant', ['SP', 'MP', 'OSP']], ['Scan Options', ['IR', 'PFP']], ['MR Acquisition Type', '3D'], ['Sequence Name', '*tfl3d1'], ['Angio Flag', 'N'], ['Slice Thickness', '1.0'], ['Repetition Time', '1910.0'], ['Echo Time', '3.53'], ['Inversion Time', '1100.0'], ['Number of Averages', '1.0'], ['Imaging Frequency', '63.686144'], ['Imaged Nucleus', '1H'], ['Echo Number(s)', '1'], ['Magnetic Field Strength', '1.5'], ['Number of Phase Encoding Steps', '223'], ['Echo Train Length', '1'], ['Percent Sampling', '100.0'], ['Percent Phase Field of View', '75.0'], ['Pixel Bandwidth', '130.0'], ['Device Serial Number', '37557'], ['Software Versions', 'syngo MR B19'], ['Protocol Name', 't1_mprage_tra_p2_iso'], ['Radionuclide Total Dose', None], ['Transmit Coil Name', 'Body'], ['Acquisition Matrix', [0, 256, 192, 0]], ['In-plane Phase Encoding Direction', 'ROW'], ['Flip Angle', '15.0'], ['Variable Flip Angle Flag', 'N'], ['SAR', '0.02698522422428'], ['dB/dt', '0.0'], ['Patient Position', 'HFS'], ['Private Creator', 'SIEMENS MR HEADER'], ['Study Instance UID', '1.2.840.113564.99.1.71094327813832.73.202191614221430.18408.2'], ['Series Instance UID', '1.2.840.113704.7.32.0.2.33.37557.2021091813030271133005070.0.0.0'], ['Study ID', '124599971'], ['Series Number', '5'], ['Acquisition Number', '1'], ['Instance Number', '1'], ['Image Position (Patient)', [-100.65369859619, -134.58704029078, -54.95581203964]], ['Image Orientation (Patient)', [0.99978196469588, 0.00571799450922, 0.02008301789151, -0.0087249648952, 0.98818840483709, 0.15299526637481]], ['Frame of Reference UID', '1.3.12.2.1107.5.2.33.37557.1.20210918125148781.0.0.0'], ['Position Reference Indicator', ''], ['Slice Location', '-31.777824626422'], ['Number of Study Related Instances', '513'], ['Samples per Pixel', 1], ['Photometric Interpretation', 'MONOCHROME2'], ['Rows', 256], ['Columns', 192], ['Pixel Spacing', [1, 1]], ['Bits Allocated', 16], ['Bits Stored', 12], ['High Bit', 11], ['Pixel Representation', 0], ['Smallest Image Pixel Value', 0], ['Largest Image Pixel Value', 328], ['Window Center', '170.0'], ['Window Width', '404.0'], ['Rescale Intercept', '0.0'], ['Rescale Slope', '1.0'], ['Window Center & Width Explanation', 'Selección del usuario'], ['VOI LUT Function', 'LINEAR'], ['Private Creator', 'SIEMENS CSA HEADER'], ['Private Creator', 'SIEMENS MEDCOM HEADER2'], ['Requesting Physician', 'RUIZ^ESTEFANIA'], ['Requesting Service', 'Servicio Andaluz de Salud'], ['Requested Procedure Description', 'RM sin Contraste I.V. de Cráneo'], ['Requested Procedure Code Sequence', 1], ['Performed Procedure Step Start Date', '20210918'], ['Performed Procedure Step Start Time', '125148.718000'], ['Performed Procedure Step ID', '124599971'], ['Performed Procedure Step Description', 'RM sin Contraste I.V. de Cráneo'], ['Request Attributes Sequence', 1], ['Private Creator', 'SIEMENS MR HEADER'], ['Icon Image Sequence', 1], ['Private Creator', 'ELSCINT1'], ['[Unknown]', 'N'], ['[Presentation Relative Center]', [0, 0]], ['[Presentation Relative Part]', [1, 1]], ['[Presentation Horizontal Invert]', 'N'], ['[Unknown]', 'N'], ['Private Creator', 'ELSCINT1'], ['[number of images in series]', 144], ['[Tamar Software Version]', '12.1.5.5'], ['[Tamar Study Status]', 'UNREAD'], ['Private tag data', 'NOT ASSIGNED'], ['[Unknown]', '1'], ['Private tag data', 'AXIAL'], ['[Tamar Site Id]', 10009], ['Private tag data', 'Y'], ['Private tag data', 'S'], ['Private tag data', '20210918131109.000000'], ['Private tag data', 'N'], ['[Unknown]', ['2D', 'PALETTE']], ['[Tamar Translate Flags]', 3], ['Private tag data', '00021563706'], ['Private tag data', '02009'], ['Private tag data', '10009'], ['Private tag data', '9022727127041'], ['Private Creator', 'ELSCINT1'], ['[Tamar Exe Software Version]', '12.1.5.5'], ['[Tamar Study Has Sticky Note]', 'N'], ['Private tag data', 'RMCRA-SCIV'], ['Private tag data', 'Pediatría'], ['Private tag data', 'SC'], ['Private tag data', 'ZUAZO'], ['Private tag data', 'MIREN AMAYA'], ['Private tag data', '7044233'], ['Private tag data', 'SG10009MR01'], ['[Unknown]', [0, 0, 0, 0, 1, 0, 0]], ['Private tag data', 'T1'], ['[Unknown]', 'N']]#, ['[Unknown]', <Sequence, length 8>], ['Private tag data', 'N'], ['[Unknown]', 'N'], ['[Unknown]', 'N'], ['Private tag data', 0], ['Private tag data', 'N'], ['Private tag data', 'N']]
44
+ #txt = ''
45
+ #for el in a:
46
+ #txt += '<p style="color:#0088ff">{}'.format(el[0]) + " "+'<span style="color:#ff0026;"></span>{}</p><br>'.format(el[1])
47
+ #txt = '<p style="font-size:14px; color:#538b01; font-weight:bold; font-style:italic;">Enter the competition by <span style="font-size:14px; color:#ff00; font-weight:bold; font-style:italic;"</span>summer</p>'
48
+ # txt += '<p style="font-size:14px; color:#538b01; font-weight:bold; font-style:italic;"> {} <span style="color:#FF0000">{}</span> </p>'.format(el[0], el[1])
49
+ #self.label_mri.setHtml(txt)
50
+ self.label_mri.setReadOnly(True)
51
+ self.gridLayout_mri.addWidget(self.label_mri,1,1,1,1)
52
+
53
+
54
+ self.tabWidget.addTab(self.tab, "")
55
+ self.tab_2 = QtWidgets.QWidget()
56
+ self.tab_2.setObjectName("tab_2")
57
+
58
+ self.gridLayout_eco = QtWidgets.QGridLayout(self.tab_2)
59
+ self.gridLayout_eco.setContentsMargins(10, 10, 10, 10)
60
+ self.gridLayout_eco.setObjectName("gridLayout_6")
61
+ self.label_eco = QtWidgets.QTextEdit(self.tab)
62
+
63
+ self.label_eco.setReadOnly(True)
64
+ self.gridLayout_eco.addWidget(self.label_eco,0,0,0,0)
65
+
66
+ self.tabWidget.addTab(self.tab_2, "")
67
+ self.hbox = QtWidgets.QHBoxLayout()
68
+ self.buttonBox = QtWidgets.QPushButton()
69
+ self.buttonBox.clicked.connect(self._next_find)
70
+
71
+ self.buttonBox.setGeometry(QtCore.QRect(610, 290, 166, 25))
72
+ #self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel | QtWidgets.QDialogButtonBox.Ok)
73
+ self.buttonBox.setObjectName("buttonBox")
74
+
75
+ #self.gridLayout_6.addWidget(self.buttonBox, 4, 4, 1, 1)
76
+ #self.gridLayout_4.addWidget(self.buttonBox, 4, 4, 1, 1)
77
+
78
+
79
+ #self.grid_main.addLayout(self.gridLayout_6)
80
+ #self.grid_main.addWidget(self.tab_2)
81
+
82
+ #
83
+ self.label_search = QtWidgets.QLineEdit()
84
+ # spacer = QtWidgets.QSpacerItem(1120, 4, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
85
+
86
+ self.label_search.textChanged.connect(self.search_for_text)
87
+ self.hbox.addWidget(self.label_search)
88
+ self.hbox.addWidget(self.buttonBox)
89
+ # self.hbox.addItem(spacer)
90
+
91
+ self.grid_main.addWidget(self.tabWidget)
92
+ self.grid_main.addLayout(self.hbox, 0)
93
+ #self.gridLayout_mri.addWidget(self.label_search)
94
+
95
+ self.retranslateUi(Dialog)
96
+ self.tabWidget.setCurrentIndex(0)
97
+ QtCore.QMetaObject.connectSlotsByName(Dialog)
98
+
99
+ def set_tag_value(self, a, ind):
100
+ txt = ''
101
+ for el in a:
102
+ # txt += '<p style="color:#0088ff">{}'.format(el[0]) + " "+'<span style="color:#ff0026;"></span>{}</p><br>'.format(el[1])
103
+ # txt = '<p style="font-size:14px; color:#538b01; font-weight:bold; font-style:italic;">Enter the competition by <span style="font-size:14px; color:#ff00; font-weight:bold; font-style:italic;"</span>summer</p>'
104
+ txt += '<p style="font-size:14px; color:#538b01; font-weight:bold; font-style:italic;"> {} <span style="color:#FF0000">{}</span> </p>'.format(
105
+ str(el[0]), str(el[1]))
106
+ if ind ==0:
107
+ self.label_mri.setHtml(txt)
108
+ else:
109
+ self.label_eco.setHtml(txt)
110
+
111
+ def _next_find(self):
112
+ if not hasattr(self, '_next_el'):
113
+ return
114
+ self._next_el += 1
115
+ ind = self.tabWidget.currentIndex()
116
+ if ind == 0:
117
+ label = self.label_mri
118
+ else:
119
+ label = self.label_eco
120
+ txt2 = self.label_search.text()
121
+ if txt2 != '':
122
+ try:
123
+ txt = label.toPlainText().split('\n')
124
+ founds = [i for i, el in enumerate(txt) if txt2.lower() in el.lower()]
125
+ if self._next_el>len(founds):
126
+ self._next_el = 0
127
+ cursor = QtGui.QTextCursor(label.document().findBlockByNumber(founds[self._next_el]))
128
+ # format = QtGui.QTextCharFormat()
129
+ # format.setBackground(QtGui.QBrush(QtGui.QColor("blue")))
130
+ # cursor.setCharFormat(format)
131
+ cursor.movePosition(QtGui.QTextCursor.EndOfLine, 1)
132
+
133
+ label.setTextCursor(cursor)
134
+
135
+ except:
136
+ pass
137
+
138
+
139
+ def search_for_text(self):
140
+ ind = self.tabWidget.currentIndex()
141
+ if ind == 0:
142
+ label = self.label_mri
143
+ else:
144
+ label = self.label_eco
145
+ txt2 = self.label_search.text()
146
+ if txt2!='':
147
+ try:
148
+ txt = label.toPlainText().split('\n')
149
+ found= [i for i, el in enumerate(txt) if txt2.lower() in el.lower()]
150
+ self._next_el = 0
151
+ cursor = QtGui.QTextCursor(label.document().findBlockByNumber(found[0]))
152
+ #format = QtGui.QTextCharFormat()
153
+ #format.setBackground(QtGui.QBrush(QtGui.QColor("blue")))
154
+ #cursor.setCharFormat(format)
155
+ cursor.movePosition(QtGui.QTextCursor.EndOfLine, 1)
156
+
157
+ label.setTextCursor(cursor)
158
+
159
+ except:
160
+ pass
161
+ else:
162
+ cursor = QtGui.QTextCursor(label.document())
163
+ cursor.movePosition(QtGui.QTextCursor.Start, 0)
164
+
165
+ label.setTextCursor(cursor)
166
+
167
+
168
+
169
+ def UpdateName(self, a, b):
170
+ _translate = QtCore.QCoreApplication.translate
171
+ if a is not None:
172
+ self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Dialog", a))
173
+ if b is not None:
174
+ self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("Dialog", b))
175
+
176
+ def updata_name_iminfo(self, name, index):
177
+ _translate = QtCore.QCoreApplication.translate
178
+ if index==0:
179
+ self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Dialog", "MRI".format(name)))
180
+ else:
181
+ self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("Dialog", "{}".format(name)))
182
+ def retranslateUi(self, Dialog):
183
+ _translate = QtCore.QCoreApplication.translate
184
+ Dialog.setWindowTitle(_translate("Dialog", "Image Information"))
185
+
186
+ self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab), _translate("Dialog", "MRI"))
187
+
188
+ self.buttonBox.setText(_translate("Dialog", "OK"))
189
+
190
+ self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_2), _translate("Dialog", "US"))
191
+ def setmri(self, lst):
192
+ try:
193
+ #_eco = ['affine_eco_l', 'dt_eco_l', 'fn_eco_l', 'frmt_eco_l', 'dim_eco_l', 'spc_eco_l', 'voxel_offset_eco_l']
194
+ #_mri = ['affine_mri_l', 'dt_mri_l', 'fn_mri_l', 'frmt_mri_l', 'dim_mri_l', 'spc_mri_l', 'voxel_offset_mri_l']
195
+ header, affine, filename , format = lst
196
+ self.affine_mri_l.setText(''.join(str(affine).split('\n')))
197
+
198
+ self.fn_mri_l.setText(filename.split('.')[0])
199
+ self.frmt_mri_l.setText(format)
200
+
201
+ self.dt_mri_l.setText(header.get_data_dtype().name)
202
+ spacing = ', '.join([str(el) for el in header['pixdim'][1:4]])
203
+ self.spc_mri_l.setText(spacing)
204
+ dims = ', '.join([str(el) for el in header['dim'][1:4]])
205
+ self.dim_mri_l.setText(dims)
206
+ vos = str(header['vox_offset'])
207
+ self.voxel_offset_mri_l.setText(vos)
208
+ except:
209
+ pass
210
+ def seteco(self, lst):
211
+ try:
212
+ #_eco = ['affine_eco_l', 'dt_eco_l', 'fn_eco_l', 'frmt_eco_l', 'dim_eco_l', 'spc_eco_l', 'voxel_offset_eco_l']
213
+ #_mri = ['affine_mri_l', 'dt_mri_l', 'fn_mri_l', 'frmt_mri_l', 'dim_mri_l', 'spc_mri_l', 'voxel_offset_mri_l']
214
+ header, affine, filename , format = lst
215
+ self.affine_eco_l.setText(''.join(str(affine).split('\n')))
216
+
217
+ self.fn_eco_l.setText(filename.split('.')[0])
218
+ self.frmt_eco_l.setText(format)
219
+
220
+ self.dt_eco_l.setText(header.get_data_dtype().name)
221
+ spacing = ', '.join([str(el) for el in header['pixdim'][1:4]])
222
+ self.spc_eco_l.setText(spacing)
223
+ dims = ', '.join([str(el) for el in header['dim'][1:4]])
224
+ self.dim_eco_l.setText(dims)
225
+ vos = str(header['vox_offset'])
226
+ self.voxel_offset_eco_l.setText(vos)
227
+ except:
228
+ pass
229
+
230
+
231
+
232
+
233
+
234
+
235
+
236
+
237
+
238
+ def run():
239
+ import sys
240
+ app = QtWidgets.QApplication(sys.argv)
241
+ window = iminfo0()
242
+ window.show()
243
+ sys.exit(app.exec_())
244
+
245
+ if __name__ == '__main__':
246
+ run()