print(wordnum, word) if args.verbose: print(lines) if lines[0][0] == '#': continue patientID[:63] = lines[0] print("working on patient: " + patientID) pathT2 = lines[1] print("in the directory: " + pathT2) pathROI = lines[2] timeflag[0] = int(lines[3]) ypT[0] = int(lines[4]) # data, ROI = read_files(pathT2, pathROI, args.verbose, True) freader = FileReader(pathT2, pathROI, args.verbose) data, ROI = freader.read(True) roinorm = False if args.verbose: print("dicom file read") if args.norm: myroifilename = lines[5] roireader = roiFileHandler(args.verbose) myroisnorm, roisnormSetted = roireader.read(myroifilename) roinorm = myroi2roi(myroisnorm, data.shape, args.verbose) if args.verbose:
print("working on patient: "+patientID) print("in the directory: "+pathT2) if os.path.isdir(pathT2): print("T2 dir found.") pathROI = analasisysdir + "ROI/" if os.path.isdir(pathROI): print("ROI dir found.") infos = info_file_parser(analasisysdir + "info.txt") timeflag[0] = timeflagconverter_string2int(infos["time"]) ypT[0] = int(infos["ypT"]) # # data, ROI = read_files(pathT2, pathROI, args.verbose, True) freader = FileReader(pathT2, pathROI, args.verbose) try: data, ROI = freader.read(raw=True) except NotImplementedError: data = freader.readUsingGDCM(raw=True) ROI = freader.readROI() except ValueError: continue roinorm=False if args.verbose: print("dicom file read") if args.norm: myroifilename = analasisysdir + "roinormmuscle.myroi" roireader = roiFileHandler(args.verbose)
def __init__(self): # QtGui.QWidget.__init__(self) super(Window_dicom_roi2, self).__init__() # self.setGeometry(50, 50, 500, 300) self.setWindowTitle("DICOM roi (v3)") # self.setWindowIcon(QtGui.QIcon('pythonlogo.png')) widgetWindow = QtGui.QWidget(self) self.setCentralWidget(widgetWindow) outfname = "roi.txt" self.inpath = "." parser = argparse.ArgumentParser() parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true") parser.add_argument("-r", "--raw", help="dont read raw data", action="store_true") parser.add_argument("-i", "--inputpath", help="path of the DICOM directory (default ./)") parser.add_argument("-o", "--outfile", help="define output file name (default roi.txt)") parser.add_argument("-l", "--layer", help="select layer", type=int) parser.add_argument( "-f", "--filterROI", help= "filter the image with a ROI (folder path, nrrd file supported)") group = parser.add_mutually_exclusive_group() group.add_argument("-y", "--yview", help="swap axes", action="store_true") group.add_argument("-x", "--xview", help="swap axes", action="store_true") args = parser.parse_args() self.layer = 0 if args.outfile: outfname = args.outfile if args.inputpath: self.inpath = args.inputpath if args.layer: self.layer = args.layer self.raw = not args.raw openFile = QtGui.QAction("&Open ROI File", self) openFile.setShortcut("Ctrl+O") openFile.setStatusTip('Open ROI File') openFile.triggered.connect(self.file_open) saveFile = QtGui.QAction("&Save ROI on File", self) saveFile.setShortcut("Ctrl+S") saveFile.setStatusTip('Save ROI on File') saveFile.triggered.connect(self.file_save) # self.statusBar() mainMenu = self.menuBar() fileMenu = mainMenu.addMenu('&ROI') # fileMenu.addAction(extractAction) fileMenu.addAction(openFile) fileMenu.addAction(saveFile) self.verbose = args.verbose self.filterROI = args.filterROI freader = FileReader(self.inpath, args.filterROI, args.verbose) # dataRGB, unusedROI = read_files(inpath, False, args.verbose, False) if self.raw: dataBW, ROI = freader.read(True) self.dataZ = dataBW #[:,:,::-1] else: dataRGB, ROI = freader.read(False) self.dataZ = dataRGB #[:,:,:,0] # # self.data = dataRGB[:,:,::-1,:] #dataswappedX = np.swapaxes(np.swapaxes(self.data,0,1),1,2) self.dataswappedX = np.swapaxes(np.swapaxes(self.dataZ, 0, 1), 1, 2)[:, ::-1, ::-1] self.dataswappedY = np.swapaxes(self.dataZ, 0, 2)[:, :, ::-1] self.ConstPixelDims = freader.ConstPixelDims self.ConstPixelSpacing = freader.ConstPixelSpacing if args.verbose: print(self.dataZ.shape) print("layer: ", self.layer) self.xview = args.xview self.yview = args.yview self.img1a = pg.ImageItem() self.arr = None self.firsttime = True if self.xview: imgScaleFactor = 1. / freader.scaleFactor self.data = self.dataswappedX self.ROI = np.swapaxes(np.swapaxes(ROI, 0, 1), 1, 2)[:, ::-1, ::-1] self.xscale = self.ConstPixelSpacing[1] self.yscale = self.ConstPixelSpacing[2] elif self.yview: imgScaleFactor = 1. / freader.scaleFactor self.data = self.dataswappedY self.ROI = np.swapaxes(ROI, 0, 2)[:, :, ::-1] self.xscale = self.ConstPixelSpacing[0] self.yscale = self.ConstPixelSpacing[2] else: imgScaleFactor = 1. self.data = self.dataZ self.ROI = ROI self.xscale = self.ConstPixelSpacing[0] self.yscale = self.ConstPixelSpacing[1] self.xshift = 0 self.yshift = 0 if self.verbose: print("data len:", len(self.data)) self.updatemain() self.rois = [None] * len(self.data) self.button_next = QtGui.QPushButton('Next', self) self.button_prev = QtGui.QPushButton('Prev', self) self.button_next.clicked.connect(self.nextimg) self.button_prev.clicked.connect(self.previmg) # layout = QtGui.QVBoxLayout(self) # layout = QtGui.QGridLayout(self) layout = QtGui.QGridLayout(widgetWindow) layout.addWidget(self.button_next, 1, 1) layout.addWidget(self.button_prev, 2, 1) self.button_setroi = QtGui.QPushButton('Set ROI', self) self.button_setroi.clicked.connect(self.setROI) layout.addWidget(self.button_setroi, 12, 1) self.button_delroi = QtGui.QPushButton('Del ROI', self) self.button_delroi.clicked.connect(self.delROI) layout.addWidget(self.button_delroi, 13, 1) label = QtGui.QLabel( "Click on a line segment to add a new handle. Right click on a handle to remove." ) # label.setAlignment(Qt.AlignCenter) layout.addWidget(label, 0, 0) self.label_layer = QtGui.QLabel("layer: " + str(self.layer + 1) + "/" + str(len(self.data))) self.label_shape = QtGui.QLabel("shape: " + str(self.arr.shape)) self.label_size = QtGui.QLabel("size: " + str(self.arr.size)) self.label_min = QtGui.QLabel("min: " + str(self.arr.min())) self.label_max = QtGui.QLabel("max: " + str(self.arr.max())) self.label_mean = QtGui.QLabel("mean: " + str(self.arr.mean())) self.label_sd = QtGui.QLabel("sd: " + str(ndimage.mean(self.arr))) self.label_sum = QtGui.QLabel("sum: " + str(ndimage.sum(self.arr))) layout.addWidget(self.label_layer, 3, 1) layout.addWidget(self.label_shape, 4, 1) layout.addWidget(self.label_size, 5, 1) layout.addWidget(self.label_min, 6, 1) layout.addWidget(self.label_max, 7, 1) layout.addWidget(self.label_mean, 8, 1) layout.addWidget(self.label_sd, 9, 1) layout.addWidget(self.label_sum, 10, 1) self.roisSetted = 0 self.label2_roisSetted = QtGui.QLabel("ROI setted: 0") self.label2_shape = QtGui.QLabel() self.label2_size = QtGui.QLabel() self.label2_min = QtGui.QLabel() self.label2_max = QtGui.QLabel() self.label2_mean = QtGui.QLabel() self.label2_sd = QtGui.QLabel() self.label2_sum = QtGui.QLabel() layout.addWidget(self.label2_roisSetted, 14, 1) layout.addWidget(self.label2_shape, 15, 1) layout.addWidget(self.label2_size, 16, 1) layout.addWidget(self.label2_min, 17, 1) layout.addWidget(self.label2_max, 18, 1) layout.addWidget(self.label2_mean, 19, 1) layout.addWidget(self.label2_sd, 20, 1) layout.addWidget(self.label2_sum, 21, 1) self.p1 = pg.PlotWidget() self.p1.setAspectLocked(True, imgScaleFactor) self.p1.addItem(self.img1a) # imv = pg.ImageView(imageItem=img1a) layout.addWidget(self.p1, 1, 0, 10, 1) # self.slider = QtGui.QSlider(QtCore.Qt.Horizontal) self.slider = QtGui.QScrollBar(QtCore.Qt.Horizontal) self.slider.setMinimum(1) self.slider.setMaximum(len(self.data)) self.slider.setValue(self.layer + 1) self.slider.setSingleStep(1) self.slider.setFocus() self.slider.setFocusPolicy(QtCore.Qt.StrongFocus) # self.slider.setTickPosition(QtGui.QSlider.TicksBelow) # self.slider.setTickInterval(5) # self.slider.sliderMoved.connect(self.slider_jump_to) self.slider.valueChanged.connect(self.slider_jump_to) layout.addWidget(self.slider, 11, 0) self.statusBar = MyStatusBar() self.statusBar.setSize(len(self.data)) layout.addWidget(self.statusBar, 12, 0) self.img1b = pg.ImageItem() # self.img1a.scale(self.xscale, self.yscale) # self.img1a.translate(self.xshift, self.yshift) # self.img1b.scale(self.xscale, self.yscale) # self.img1b.translate(self.xshift, self.yshift) if not args.filterROI: self.roi = pg.PolyLineROI([[80, 60], [90, 30], [60, 40]], pen=(6, 9), closed=True) else: self.rois = roi2myroi(self.ROI) if self.rois[self.layer]: self.roi = self.rois[self.layer] else: self.roi = pg.PolyLineROI([[80, 60], [90, 30], [60, 40]], pen=(6, 9), closed=True) # for simplex in hull.simplices: # if self.rois[self.layer]: # self.roi = self.rois[self.layer] self.p2 = pg.PlotWidget() # self.p2.disableAutoRange('xy') self.p2.setAspectLocked(True, imgScaleFactor) self.p2.addItem(self.img1b) # if not args.filterROI: self.p1.addItem(self.roi) self.roi.sigRegionChanged.connect(self.update) layout.addWidget(self.p2, 13, 0, 10, 1)
print(wordnum, word) if args.verbose: print(lines) if lines[0][0] == '#': continue patientID[:63] = lines[0] print("working on patient: "+patientID) pathT2 = lines[1] print("in the directory: "+pathT2) pathROI = lines[2] timeflag[0] = int(lines[3]) ypT[0] = int(lines[4]) # data, ROI = read_files(pathT2, pathROI, args.verbose, True) freader = FileReader(pathT2, pathROI, args.verbose) data, ROI = freader.read(True) roinorm=False if args.verbose: print("dicom file read") if args.norm: myroifilename = lines[5] roireader = roiFileHandler(args.verbose) myroisnorm, roisnormSetted = roireader.read(myroifilename) roinorm = myroi2roi(myroisnorm, data.shape, args.verbose) if args.verbose:
args = parser.parse_args() if args.inputpath: inpath = args.inputpath if args.roi: myroifilename = args.roi if args.outfile: outfname = args.outfile out_file = open(outfname,"w") out_file.write("#layer \t max \t meaninroi \n") freader = FileReader(inpath, False, args.verbose) data, unusedROI = freader.read(True) roireader = roiFileHandler() rois, roisSetted = roireader.read(myroifilename) nFette = len(data) if nFette != len(rois): print("error: len rois = ",len(rois)," but len dicom=",nFette) for layer in xrange(0,nFette): thisroi = grid_points_in_poly(data[layer].shape, rois[layer]['points']) masked = data[layer]*thisroi maximum = data[layer].max() meaninroi = masked.mean() out_file.write(str(layer)+"\t"+str(maximum)+"\t"+str(meaninroi)+"\n")
def __init__(self): # QtGui.QWidget.__init__(self) super(Window_dicom_roi_RGB, self).__init__() # self.setGeometry(50, 50, 500, 300) self.setWindowTitle("DICOM roi (vRGB)") # self.setWindowIcon(QtGui.QIcon('pythonlogo.png')) widgetWindow = QtGui.QWidget(self) self.setCentralWidget(widgetWindow) outfname="roi.txt" self.inpath="." parser = argparse.ArgumentParser() parser.add_argument("-v", "--verbose", help="increase output verbosity", action="store_true") parser.add_argument("-i", "--inputpath", help="path of the DICOM directory (default ./)") parser.add_argument("-o", "--outfile", help="define output file name (default roi.txt)") parser.add_argument("-l", "--layer", help="select layer", type=int) parser.add_argument("-f", "--filterROI", help="filter the image with a ROI (folder path, nrrd file supported)") parser.add_argument("-c","--colorRange", help="highlight a color range (expects sometghin like 100:200)") parser.add_argument("-r","--raw", help="do not normalize",action="store_true") group = parser.add_mutually_exclusive_group() group.add_argument("-y", "--yview", help="swap axes", action="store_true") group.add_argument("-x", "--xview", help="swap axes", action="store_true") args = parser.parse_args() self.layer=0 if args.outfile: outfname = args.outfile if args.inputpath: self.inpath = args.inputpath if args.layer: self.layer = args.layer openFile = QtGui.QAction("&Open ROI File", self) openFile.setShortcut("Ctrl+O") openFile.setStatusTip('Open ROI File') openFile.triggered.connect(self.file_open) saveFile = QtGui.QAction("&Save ROI on File", self) saveFile.setShortcut("Ctrl+S") saveFile.setStatusTip('Save ROI on File') saveFile.triggered.connect(self.file_save) # self.statusBar() mainMenu = self.menuBar() fileMenu = mainMenu.addMenu('&ROI') # fileMenu.addAction(extractAction) fileMenu.addAction(openFile) fileMenu.addAction(saveFile) self.verbose = args.verbose freader = FileReader(self.inpath, args.filterROI, args.verbose) # dataRGB, unusedROI = read_files(inpath, False, args.verbose, False) dataRGB, unusedROI = freader.read(False) self.scaleFactor = freader.scaleFactor if not args.raw: thisNormalizer = Normalizer(self.verbose) thisNormalizer.setRootOutput() self.dataZ = thisNormalizer.match_all(dataRGB) thisNormalizer.writeRootOutputOnFile("checkNorm.root") else: self.dataZ = dataRGB if args.colorRange: self.dataZ = highlight_color(dataRGB,args.colorRange,args.verbose) # self.dataZ = np.swapaxes(dataRGB[:,:,:,:],0,1) # # self.data = dataRGB[:,:,::-1,:] #dataswappedX = np.swapaxes(np.swapaxes(self.data,0,1),1,2) self.dataswappedX = np.swapaxes(np.swapaxes(self.dataZ,0,1),1,2)[:,::-1,::-1,:] self.dataswappedY = np.swapaxes(self.dataZ,0,2)[:,:,::-1,:] if args.verbose: print("shape:", self.dataZ.shape) print("shape of a channel:", self.dataZ[:,:,:,0].shape) print("layer: ",self.layer) self.xview = args.xview self.yview = args.yview self.img1a = pg.ImageItem() self.arr = None self.firsttime = True if self.xview: imgScaleFactor= 1./freader.scaleFactor self.data = self.dataswappedX elif self.yview: imgScaleFactor= 1./freader.scaleFactor self.data = self.dataswappedY else: imgScaleFactor= 1. self.data = self.dataZ if self.verbose: print("data len:",len(self.data[:,:,:,0])) self.updatemain() self.rois = [None]*len(self.data[:,:,:,0]) self.button_next = QtGui.QPushButton('Next', self) self.button_prev = QtGui.QPushButton('Prev', self) self.button_next.clicked.connect(self.nextimg) self.button_prev.clicked.connect(self.previmg) # layout = QtGui.QVBoxLayout(self) # layout = QtGui.QGridLayout(self) layout = QtGui.QGridLayout(widgetWindow) layout.addWidget(self.button_next,1,1) layout.addWidget(self.button_prev,2,1) self.button_setroi = QtGui.QPushButton('Set ROI', self) self.button_setroi.clicked.connect(self.setROI) layout.addWidget(self.button_setroi,12,1) self.button_delroi = QtGui.QPushButton('Del ROI', self) self.button_delroi.clicked.connect(self.delROI) layout.addWidget(self.button_delroi,13,1) label = QtGui.QLabel("Click on a line segment to add a new handle. Right click on a handle to remove.") # label.setAlignment(Qt.AlignCenter) layout.addWidget(label,0,0) self.label_layer = QtGui.QLabel("layer: "+str(self.layer+1)+"/"+str(len(self.data[:,:,:,0]))) self.label_shape = QtGui.QLabel("shape: "+str(self.arr[:,:,0].shape)) self.label_size = QtGui.QLabel("size: "+str(self.arr[:,:,0].size)) self.label_min = QtGui.QLabel("min: "+str(self.arr[:,:,0].min())) self.label_max = QtGui.QLabel("max: "+str(self.arr[:,:,0].max())) self.label_mean = QtGui.QLabel("mean: "+str(self.arr[:,:,0].mean())) self.label_sd = QtGui.QLabel("sd: "+str(ndimage.standard_deviation(self.arr[:,:,0]))) self.label_sum = QtGui.QLabel("sum: "+str(ndimage.sum(self.arr[:,:,0]))) layout.addWidget(self.label_layer,3,1) layout.addWidget(self.label_shape,4,1) layout.addWidget(self.label_size,5,1) layout.addWidget(self.label_min,6,1) layout.addWidget(self.label_max,7,1) layout.addWidget(self.label_mean,8,1) layout.addWidget(self.label_sd,9,1) layout.addWidget(self.label_sum,10,1) self.roisSetted = 0 self.label2_roisSetted = QtGui.QLabel("ROI setted: 0") self.label2_shape = QtGui.QLabel() self.label2_size = QtGui.QLabel() self.label2_min = QtGui.QLabel() self.label2_max = QtGui.QLabel() self.label2_mean = QtGui.QLabel() self.label2_sd = QtGui.QLabel() self.label2_sum = QtGui.QLabel() layout.addWidget(self.label2_roisSetted,14,1) layout.addWidget(self.label2_shape,15,1) layout.addWidget(self.label2_size,16,1) layout.addWidget(self.label2_min,17,1) layout.addWidget(self.label2_max,18,1) layout.addWidget(self.label2_mean,19,1) layout.addWidget(self.label2_sd,20,1) layout.addWidget(self.label2_sum,21,1) self.p1 = pg.PlotWidget() self.p1.setAspectLocked(True,imgScaleFactor) self.p1.addItem(self.img1a) # imv = pg.ImageView(imageItem=img1a) layout.addWidget(self.p1,1,0,10,1) # self.slider = QtGui.QSlider(QtCore.Qt.Horizontal) self.slider = QtGui.QScrollBar(QtCore.Qt.Horizontal) self.slider.setMinimum(1) self.slider.setMaximum(len(self.data[:,:,:,0])) self.slider.setValue(self.layer+1) self.slider.setSingleStep(1) self.slider.setFocus() self.slider.setFocusPolicy(QtCore.Qt.StrongFocus) # self.slider.setTickPosition(QtGui.QSlider.TicksBelow) # self.slider.setTickInterval(5) # self.slider.sliderMoved.connect(self.slider_jump_to) self.slider.valueChanged.connect(self.slider_jump_to) layout.addWidget(self.slider,11,0) self.img1b = pg.ImageItem() self.roi = pg.PolyLineROI([[80, 60], [90, 30], [60, 40]], pen=(6,9), closed=True) # if self.rois[self.layer]: # self.roi = self.rois[self.layer] self.p2 = pg.PlotWidget() # self.p2.disableAutoRange('xy') self.p2.setAspectLocked(True,imgScaleFactor) self.p2.addItem(self.img1b) self.p1.addItem(self.roi) self.roi.sigRegionChanged.connect(self.update) layout.addWidget(self.p2,12,0,10,1)
print("in the directory: "+pathT2) if os.path.isdir(pathT2): print("T2 dir found.") pathROI = analasisysdir + "ROI/" if os.path.isdir(pathROI): print("ROI dir found.") infos = info_file_parser(analasisysdir + "info2.txt") timeflag = timeflagconverter_string2int(infos["time"]) ypT = int(infos["ypT"]) ypT2 = int(infos["ypT2"]) # # data, ROI = read_files(pathT2, pathROI, args.verbose, True) freader = FileReader(pathT2, pathROI, args.verbose) try: data, ROI = freader.read(raw=True) except NotImplementedError: data = freader.readUsingGDCM(raw=True) ROI = freader.readROI() except ValueError: print("Data not read. Check folders") continue roinorm=False if args.verbose: print("dicom file read") if args.norm: myroifilename = analasisysdir + "roinormmuscle.myroi"
def setExternalTemplate(self, dcmfile): freader = FileReader(dcmfile, False, self.verbose) dataRGB, unusedROI = freader.read(False) self.externalTemplateSetted = True self.externalTemplate = dataRGB[:,:,0] self.NormLayer = -1
def setExternalTemplate(self, dcmfile): freader = FileReader(dcmfile, False, self.verbose) dataRGB, unusedROI = freader.read(False) self.externalTemplateSetted = True self.externalTemplate = dataRGB[:, :, 0] self.NormLayer = -1