def get_contours_from_mask(x_grid, y_grid, mask): fig, ax = plt.subplots() with warnings.catch_warnings(): warnings.simplefilter("ignore", UserWarning) cs = ax.contour(x_grid, y_grid, mask, [0]) contours = [path.vertices for path in cs.collections[0].get_paths()] plt.close(fig) return contours
def read_dicom3D(direc, i_option): # item = 0 for subdir, dirs, files in os.walk(direc): # pylint: disable = unused-variable k = 0 for file in tqdm(sorted(files)): # print('filename=', file) if os.path.splitext(file)[1] == ".dcm": dataset = pydicom.dcmread(direc + file) if k == 0: ArrayDicom = np.zeros( (dataset.Rows, dataset.Columns, 0), dtype=dataset.pixel_array.dtype, ) tmp_array = dataset.pixel_array if i_option.startswith(("y", "yeah", "yes")): max_val = np.amax(tmp_array) tmp_array = tmp_array / max_val min_val = np.amin(tmp_array) tmp_array = tmp_array - min_val tmp_array = 1 - tmp_array # inverting the range # min_val = np.amin(tmp_array) # normalizing # tmp_array = tmp_array - min_val # tmp_array = tmp_array / (np.amax(tmp_array)) tmp_array = u.norm01(tmp_array) else: # min_val = np.amin(tmp_array) # tmp_array = tmp_array - min_val # tmp_array = tmp_array / (np.amax(tmp_array)) tmp_array = u.norm01(tmp_array) # just normalize ArrayDicom = np.dstack((ArrayDicom, tmp_array)) # print("item thickness [mm]=", dataset.SliceThickness) SID = dataset.RTImageSID dx = 1 / (SID * (1 / dataset.ImagePlanePixelSpacing[0]) / 1000) dy = 1 / (SID * (1 / dataset.ImagePlanePixelSpacing[1]) / 1000) print("pixel spacing row [mm]=", dx) print("pixel spacing col [mm]=", dy) else: tmp_array = dataset.pixel_array if i_option.startswith(("y", "yeah", "yes")): max_val = np.amax(tmp_array) tmp_array = tmp_array / max_val min_val = np.amin(tmp_array) tmp_array = tmp_array - min_val tmp_array = 1 - tmp_array # inverting the range # min_val = np.amin(tmp_array) # normalizing # tmp_array = tmp_array - min_val # tmp_array = tmp_array / (np.amax(tmp_array)) tmp_array = u.norm01(tmp_array) else: # min_val = np.amin(tmp_array) # tmp_array = tmp_array - min_val # tmp_array = tmp_array / (np.amax(tmp_array)) # just normalize tmp_array = u.norm01(tmp_array) ArrayDicom = np.dstack((ArrayDicom, tmp_array)) k = k + 1 xfield, yfield, rotfield = image_analyze(ArrayDicom, i_option) multi_slice_viewer(ArrayDicom, dx, dy) if np.shape(xfield)[2] == 2: fig, peak_figs, junctions_figs = merge_view_vert(xfield, dx, dy) with PdfPages(direc + "jaws_X_report.pdf") as pdf: pdf.savefig(fig) # for i in range(0, len(peak_figs)): for _, f in enumerate(peak_figs): pdf.savefig(f) # for i in range(0, len(junctions_figs)): for _, f in enumerate(junctions_figs): pdf.savefig(f) plt.close() else: print( "X jaws data analysis not completed please verify that you have two X jaws images. For more information see manual." ) if np.shape(yfield)[2] == 4: fig, peak_figs, junctions_figs = merge_view_horz(yfield, dx, dy) # print('peak_figs********************************************************=', len(peak_figs),peak_figs) with PdfPages(direc + "jaws_Y_report.pdf") as pdf: pdf.savefig(fig) # for i in range(0, len(peak_figs)): for _, f in enumerate(peak_figs): pdf.savefig(f) for _, f in enumerate(junctions_figs): pdf.savefig(f) plt.close() else: print( "Y jaws data analysis not completed please verify that you have four Y jaws images. For more information see manual." ) if np.shape(rotfield)[2] == 4: fig, peak_figs, junctions_figs = merge_view_filtrot(rotfield, dx, dy) with PdfPages(direc + "jaws_FR_report.pdf") as pdf: pdf.savefig(fig) for _, f in enumerate(peak_figs): pdf.savefig(f) for _, f in enumerate(junctions_figs): pdf.savefig(f) plt.close() else: print( "Field rotation data analysis not completed please verify that you have four field rotation images. For more information see manual." )