示例#1
0
    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))
示例#2
0
    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))
示例#3
0
 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')
示例#4
0
    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))
示例#5
0
    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()