コード例 #1
0
    def drawThreshMask(self, worm_img, worm_qimg, row_data, read_center=True):
        #in very old versions of the tracker I didn't save the area in trajectories table,
        #let's assign a default value to deal with this cases
        if 'area' in row_data:
            min_blob_area = row_data['area'] / 2
        else:
            min_blob_area = 10

        c1, c2 = (row_data['coord_x'],
                  row_data['coord_y']) if read_center else (-1, -1)

        worm_mask, worm_cnt, _ = getWormMask(
            worm_img,
            row_data['threshold'],
            strel_size=self.strel_size,
            roi_center_x=c1,
            roi_center_y=c2,
            min_blob_area=min_blob_area,
            is_light_background=self.is_light_background)

        worm_mask = QImage(worm_mask.data, worm_mask.shape[1],
                           worm_mask.shape[0], worm_mask.strides[0],
                           QImage.Format_Indexed8)
        worm_mask = worm_mask.convertToFormat(QImage.Format_RGB32,
                                              Qt.AutoColor)
        worm_mask = QPixmap.fromImage(worm_mask)

        worm_mask = worm_mask.createMaskFromColor(Qt.black)
        p = QPainter(worm_qimg)
        p.setPen(QColor(0, 204, 102))
        p.drawPixmap(worm_qimg.rect(), worm_mask, worm_mask.rect())

        if False:
            #test skeletonization
            skeleton, ske_len, cnt_side1, cnt_side2, cnt_widths, cnt_area = \
                getSkeleton(worm_cnt, np.zeros(0), 49)
            for cnt in skeleton, cnt_side1, cnt_side2:
                p.setPen(Qt.black)
                polyline = QPolygonF()
                for point in cnt:
                    polyline.append(QPointF(*point))
                p.drawPolyline(polyline)

        p.end()
コード例 #2
0
    def drawThreshMask(self, worm_img, worm_qimg, row_data, read_center = True):
        worm_mask = getWormMask(worm_img, row_data['threshold'])
        min_mask_area = row_data['area']/2
        if read_center:
            worm_cnt, _ = binaryMask2Contour(worm_mask, roi_center_x = row_data['coord_y'], roi_center_y = row_data['coord_x'], min_mask_area = min_mask_area)
        else:
            worm_cnt, _ = binaryMask2Contour(worm_mask, min_mask_area = min_mask_area)
        worm_mask = np.zeros_like(worm_mask)
        cv2.drawContours(worm_mask, [worm_cnt.astype(np.int32)], 0, 1, -1)

        worm_mask = QImage(worm_mask.data, worm_mask.shape[1], 
        worm_mask.shape[0], worm_mask.strides[0], QImage.Format_Indexed8)
        worm_mask = worm_mask.convertToFormat(QImage.Format_RGB32, Qt.AutoColor)
        worm_mask = worm_mask.scaled(worm_qimg.width(),worm_qimg.height(), Qt.KeepAspectRatio)
        worm_mask = QPixmap.fromImage(worm_mask)

        worm_mask = worm_mask.createMaskFromColor(Qt.black)
        p = QPainter(worm_qimg)
        p.setPen(QColor(0,204,102))
        p.drawPixmap(worm_qimg.rect(), worm_mask, worm_mask.rect())
        p.end()
コード例 #3
0
	def updateROIcanvas(self, wormCanvas, worm_index_roi, comboBox_ROI, isDrawSkel):
		if not isinstance(self.frame_data, pd.DataFrame):
			wormCanvas.clear()
			return
		
		#update valid index for the comboBox
		comboBox_ROI.clear()
		comboBox_ROI.addItem(str(worm_index_roi))
		
		for ind in self.frame_data[self.worm_index_str].data:
			comboBox_ROI.addItem(str(ind))
		
		
		#extract individual worm ROI
		good = self.frame_data[self.worm_index_str] == worm_index_roi
		roi_data = self.frame_data.loc[good].squeeze()

		if roi_data.size == 0:
			wormCanvas.clear()
			return

		if np.isnan(roi_data['coord_x']) or np.isnan(roi_data['coord_y']):
			return #invalid coordinate, nothing to do here

		worm_roi, roi_corner = getWormROI(self.original_image, roi_data['coord_x'], roi_data['coord_y'], roi_data['roi_size'])
		roi_corner = roi_corner+1
		#worm_roi, roi_corner = self.original_image, np.zeros(2)

		roi_ori_size = worm_roi.shape
		
		worm_roi = np.ascontiguousarray(worm_roi)
		#worm_roi = cv2.cvtColor(worm_img, cv2.COLOR_GRAY2RGB);

		worm_img = QImage(worm_roi.data, worm_roi.shape[1], worm_roi.shape[0], worm_roi.strides[0], QImage.Format_Indexed8)
		worm_img = worm_img.convertToFormat(QImage.Format_RGB32, Qt.AutoColor)

		
		canvas_size = min(wormCanvas.height(),wormCanvas.width())
		worm_img = worm_img.scaled(canvas_size,canvas_size, Qt.KeepAspectRatio)#, Qt.SmoothTransformation)
		
		
		if isDrawSkel:
			if roi_data['has_skeleton']==1:
				c_ratio_y = worm_img.width()/roi_ori_size[1];
				c_ratio_x = worm_img.height()/roi_ori_size[0];
				
				skel_id = int(roi_data['skeleton_id'])

				qPlg = {}
				
				for tt in ['skeleton', 'contour_side1', 'contour_side2']:
					dat = self.skel_dat[tt][skel_id];
					dat[:,0] = (dat[:,0]-roi_corner[0])*c_ratio_x
					dat[:,1] = (dat[:,1]-roi_corner[1])*c_ratio_y
					
					#dat = (self.skel_dat[tt][skel_id] - 0)*c_ratio
					qPlg[tt] = QPolygonF()
					for p in dat:
						qPlg[tt].append(QPointF(*p))
				
				if 'is_good_skel' in roi_data and roi_data['is_good_skel'] == 0:
					self.skel_colors = {'skeleton':(102, 0, 0 ), 
					'contour_side1':(102, 0, 0 ), 'contour_side2':(102, 0, 0 )}
				else:
					self.skel_colors = {'skeleton':(27, 158, 119 ), 
					'contour_side1':(217, 95, 2), 'contour_side2':(231, 41, 138)}

				pen = QPen()
				pen.setWidth(2)
				
				painter = QPainter()
				painter.begin(worm_img)
			
				for tt, color in self.skel_colors.items():
					pen.setColor(QColor(*color))
					painter.setPen(pen)
					painter.drawPolyline(qPlg[tt])
				
				pen.setColor(Qt.black)
				painter.setBrush(Qt.white)
				painter.setPen(pen)
			
				radius = 3#*c_ratio_x
				painter.drawEllipse(qPlg['skeleton'][0], radius, radius)

				painter.end()
			elif roi_data['has_skeleton']==0:
				worm_mask = getWormMask(worm_roi, roi_data['threshold'])
				worm_cnt, _ = binaryMask2Contour(worm_mask)
				worm_mask = np.zeros_like(worm_mask)
				cv2.drawContours(worm_mask, [worm_cnt.astype(np.int32)], 0, 1, -1)

				worm_mask = QImage(worm_mask.data, worm_mask.shape[1], 
					worm_mask.shape[0], worm_mask.strides[0], QImage.Format_Indexed8)
				worm_mask = worm_mask.convertToFormat(QImage.Format_RGB32, Qt.AutoColor)
				worm_mask = worm_mask.scaled(canvas_size,canvas_size, 
					Qt.KeepAspectRatio)#, Qt.SmoothTransformation)
				worm_mask = QPixmap.fromImage(worm_mask)

				worm_mask = worm_mask.createMaskFromColor(Qt.black)
				p = QPainter(worm_img)
				p.setPen(QColor(0,204,102))
				p.drawPixmap(worm_img.rect(), worm_mask, worm_mask.rect())
				p.end()

		
		pixmap = QPixmap.fromImage(worm_img)
		wormCanvas.setPixmap(pixmap);