def run(self): # Network for Segmentation self.send_msg.emit('FCNN_V2 Initializing...') time_1 = datetime.now() if not self.is_run: self.fcnn = CRF_RNN(input_shape=[512, 512, 1], batch_size=1, input_dim=262144, pre_train=True) time_2 = datetime.now() - time_1 self.send_msg.emit('FCNN_V2 Initialize Finished.\nTime Using:' + str(time_2)) reader = dcm_reader(path=self.path) arr = self.process(reader.getPixelArray()) slices, rows, cols = arr.shape data_slices = list() for i in range(slices): flatten = arr[i, :, :].reshape((1, rows * cols)).astype(np.float32) pred = self.fcnn.predict(flatten, as_list=True)[0] pred = np.array(list(map(list, zip(*pred[::-1])))) pred = pred.transpose() * 255.0 Image.fromarray(pred).convert('RGB').save(image_path + str(i) + '.png') data_slices.append(pred[None, :, :]) self.signal.emit(int(i * 100 / slices)) self.data = np.concatenate(data_slices, axis=0) time_3 = datetime.now() - time_1 self.send_msg.emit('Thread Finished.\nTime Cost: ' + str(time_3))
def run(self): self.send_msg.emit('Decision Tree Initializing...') time_1 = datetime.now() self.dt = joblib.load(model_path + 'model.m') self.haar = haarReader() self.haar.setRandomWindowsFromFile(model_path + 'rands.npy') time_2 = datetime.now() - time_1 self.send_msg.emit('Decision Tree Initialize Finished.\nTime Using:' + str(time_2)) self.reader = dcm_reader(path=self.path) arr = self.reader.getPixelArray() slices, rows, cols = arr.shape data_slices = list() for i in range(slices): flatten = self.haar.getFeature(arr[i, :, :]) pred = self.dt.predict(flatten).reshape((512, 512)) data_slices.append(pred[None, :, :]) self.signal.emit(int(i * 100 / slices)) self.data = np.concatenate(data_slices, axis=0) time_3 = datetime.now() - time_1 self.send_msg.emit('Thread Finished.\nTime Cost: ' + str(time_3))
def _initialize(self, path): self.reader = dcm_reader(path) pixLabels = [self.ui.png1, self.ui.png2, self.ui.png3] chart = dict() for key, val in self.reader.data.items(): to_path = '\\'.join(key.split('\\')[:-1]) + '\\' + str( val.SeriesNumber) + '\\' if str(val.SeriesNumber) not in chart: # 如果已经有上次使用过的文件夹还存在,没有被删除的话,就先删掉 if str(val.SeriesNumber) in os.listdir( '\\'.join(key.split('\\')[:-1]) + '\\'): shutil.rmtree(to_path) # 新建文件夹 os.makedirs(to_path) self.to_del.append(to_path) # 保存图片到本地 try: img_to_save = self._dicom_normalize(val.pixel_array) Image.fromarray(img_to_save).convert('RGB').save( str(val.SeriesNumber) + '.png') chart[str( val.SeriesNumber)] = str(val.SeriesNumber) + '.png' except: print('Something wrong') continue shutil.copy(key, to_path + key.split('\\')[-1]) # 把上面保存在本地的图片文件渲染到界面上 for index, pic in enumerate(chart.values()): if index >= 3: break png = QtGui.QPixmap(pic) png = png.scaled(175, 175, QtCore.Qt.IgnoreAspectRatio, QtCore.Qt.SmoothTransformation) pixLabels[index].setPixmap(png) self.ui.statusBar.showMessage('Initialize Finished')
def run(self): # Network for Segmentation self.send_msg.emit('FCNN Initializing...') time_1 = datetime.now() if self.is_run: self.fcnn = FCNet(learning_rate=1e-4) self.fcnn.load( path= 'E:\\Python\\surgeryGuidingProject\\deep_learning\\network\\') time_2 = datetime.now() - time_1 self.send_msg.emit('FCNN Initialize Finished.\nTime Using:' + str(time_2)) reader = dcm_reader(path=self.path) # arr = reader.getPixelArray() arr = self.process(reader.getPixelArray()) slices, rows, cols = arr.shape data_slices = list() for i in range(slices): flatten = arr[i, :, :].reshape((1, rows * cols)).astype(np.float32) pred = self.fcnn.predict(flatten) pred = np.array(list(map(list, zip(*pred[::-1])))) pred = pred.transpose() # pred = np.array(list(map(list, zip(*pred[::-1])))) # levelset = LevelSet() # levelset.init_phi(pred) # levelset.evolution(iter_num=10, showed=False) # mask = levelset.get_contour(dtype=np.uint8) # data_slices.append(mask[None, :, :]) Image.fromarray(pred).convert('RGB').save(image_path + str(i) + '.png') data_slices.append(pred[None, :, :]) self.signal.emit(int(i * 100 / slices)) self.data = np.concatenate(data_slices, axis=0) time_3 = datetime.now() - time_1 self.send_msg.emit('Thread Finished.\nTime Cost: ' + str(time_3))
def evolution_once(self): self._phi = self.sess.run(self.evolution_op, feed_dict={self.phi_op: self._phi}) def show_contour(self): rgb_src = np.array(Image.fromarray(self.src[50, :, :]).convert('RGB')) mask = np.zeros_like(self._phi[50, :, :]).astype(np.int32) mask[self._phi[50, :, :] > 0] = 255 contours = measure.find_contours(mask, level=0.5) plt.figure() plt.imshow(rgb_src) for ct in contours: plt.plot(ct[:, 1], ct[:, 0], linewidth=2, color='c') plt.show() # for ct in contours: # rgb_src[ct[:, 0], ct[:, 1]] = (0, 255, 255) # Image.fromarray(rgb_src).save('6.png') print('Evolution result saved!') if __name__ == '__main__': reader = dcm_reader( path= 'E:\\C++\\Projects\\surgeryGuidingProject_copy\\8848\\new\DICOM\\20170510\\08290000\\6\\' ) arr = reader.getPixelArray() arr = reader.dicom_normalize(arr) levelset3 = LevelSet() levelset3.init_phi(arr) levelset3.evolution()