def slot_slic(self, pyr): ''' perform SLIC superpixel segmentation Input: QPixmap self.query int32 number of superpixel Output: ndarray self.npimg - input image ndarray self.nplabel - seg label ndarray self.npdraw - draw map QPixmap self.qdraw - a draw map with segmentation boundary ''' #w = self.image.width() #h = self.image.height() # QPixmap to QImage qimage = self.query.toImage() # QImage to numpy imgarr = rgb_view(qimage) #imgarr = qimage2numpy(qimage) self.npimg = imresize(imgarr, (self.label[pyr].size().height(), self.label[pyr].size().width()), interp='bicubic') if pyr == 0: self.label0 = slic.slic_n(self.npimg, 300, 10) #contours = slic.contours(self.npimg, self.label0, 10) else: self.auxlabel = slic.slic_n(self.npimg, 50, 10)
def __init__(self, image, input_clf, number_regions=500, consistency=5): """def __init__(self, image, number_regions=500, input_clf):""" self.original_image = cv2.imread(image) self.hsvimage = cv2.cvtColor(self.original_image, cv2.COLOR_BGR2HSV) self.number_regions = number_regions self.clf = joblib.load(input_clf) self.label_mask = np.array(slic.slic_n(self.original_image, number_regions, consistency),dtype=np.uint8) pass
def slot_load(self): newDialog = QDialog() fpath = QFileDialog.getExistingDirectory(newDialog, "Select data directory", '../') if len(fpath) == 0: QMessageBox.warning(None, 'Warning!', 'Nothing loaded.') return self.data_path = str(fpath) + '/' # loaded path self.qfiles = sorted(glob.glob(self.data_path+'query/*')) self.npyr = len(self.label) self.mergeSegs = [[] for i in range(self.npyr)] # load label data self.save_path = self.data_path + 'parts.pkl' print self.qfiles if os.path.isfile(self.save_path): # labeled data exists f = open(self.save_path, 'rb') self.data = cPickle.load(f) f.close() self.index = self.data['index'] # initialize labeled data {label0, auxlabel} self.label0 = self.data['labels'][self.index] self.query = QPixmap(self.qfiles[self.index]) qimage = self.query.toImage() imgarr = rgb_view(qimage) self.npimg = imresize(imgarr, (self.h, self.w), interp='bicubic') self.auxlabel = slic.slic_n(self.npimg, 50, 10) else: # no previous annotation available self.data = {} self.data['index'] = self.index self.data['labels'] = [np.zeros((self.h, self.w), dtype=np.int32) for i in range(len(self.qfiles))] self.data['scores'] = [[] for i in range(len(self.qfiles))] self.data['identity'] = map(lambda x: os.path.basename(x)[0:os.path.basename(x).find('_')], self.qfiles) self.data['flags'] = np.zeros(len(self.qfiles)) self.data['sflags'] = [[] for i in range(len(self.qfiles))] self.index = 0 self.query = QPixmap(self.qfiles[self.index]) # compute the initial label map given self.query for i in range(self.npyr): self.slot_slic(i) for i in range(self.npyr): self.show_label(i)
def load_etrims(radius, size, is08, shuffle, name, n_superpixels, compactness, t_index=None): # ----- make up ----- isInit = t_index is None # ----- path initialize ----- root_path = '../Dataset/etrims-db_v1/' an_name = 'annotations/' im_name = 'images/' et_name = '08_etrims-ds/' if is08 else '04_etrims-ds/' an_path = root_path + an_name + et_name im_path = root_path + im_name + et_name dir_list = os.listdir(an_path) # ----- train index ----- train_index = [] DATA_SIZE = size # max=60 TRAIN_SIZE = 2 * size / 3 # max=40 if isInit: train_index = random.sample(range(DATA_SIZE), TRAIN_SIZE) if shuffle else range(TRAIN_SIZE) else: train_index = t_index # ----- test set and train set ----- train_set = [] test_set = [] test_or_train = [test_set, train_set] for i in xrange(DATA_SIZE): # open annotation.png and image.jpg dis = dir_list[i] file_name = dis.split(".")[0] annot_path = an_path + file_name + ".png" annotation = Image.open(annot_path) image_path = im_path + file_name + ".jpg" image = Image.open(image_path) spixel = sc.slic_n(np.array(image), n_superpixels, compactness) # get index and set picture index = i in train_index picture = Pic(image, annotation, spixel) test_or_train[index].append(picture) # print filename if isInit: print_time("eTRIMS: %s" % file_name, name) # ----- finish ----- if isInit: print_parameter(train_index, name) print_time("eTRIMS: train=%d test=%d" % (len(train_set), len(test_set)), name) return train_set, test_set
def __call__(self, im): if self.check_cache(im) is False: arrIn = np.zeros(( im.getSize()[0], im.getSize()[1], 3 )) if im.getTypeAsString()=="RGB": image_slices = sp.Image() sp.splitChannels(im, image_slices) for i in range(3): arrtmp = image_slices.getSlice(i) arrIn[:, :, i] = arrtmp.getNumArray() else: for i in range(3): arrIn[:, :, i] = im.getNumArray() region_labels = slic.slic_n(np.uint8(arrIn), self._params["nb_regions"], self._params["m"]) imout = sp.Image(region_labels.shape[0], region_labels.shape[1]) arrOut = imout.getNumArray() for i in range(region_labels.shape[0]): for j in range(region_labels.shape[1]): arrOut[i, j] = region_labels[i, j] ## copie16 = sp.Image(imout, "UINT16") sp.copy(imout, copie16) self.update_cache(im, copie16) return self._cache_seg
import numpy as np import PIL.Image import matplotlib.pyplot as plt import slic im = np.array(PIL.Image.open("grass.jpg")) region_labels = slic.slic_n(im, 1000, 10) print type(region_labels) contours = slic.contours(im, region_labels, 10) plt.imshow(contours[:, :, :-1].copy()) plt.show()
# im8bit = (d[objects[ind]]*mask_erode) # im8bit = im8bit / np.ceil(im8bit.max()/256.0) im8bit = deepcopy(posMat) for i in range(3): im8bit[:, :, i][im8bit[:, :, i] != 0] -= im8bit[:, :, i][im8bit[:, :, i] != 0].min() im8bit[:, :, i] /= im8bit[:, :, i].max() / 256 im8bit = np.array(im8bit, dtype=uint8) # im8bit = im8bit[:,:,2] im4d = np.dstack([mask_erode, im8bit]) # im4d = np.dstack([mask_erode, im8bit, im8bit, im8bit]) # im4d = np.dstack([mask_erode, dists2Tot, dists2Tot, dists2Tot]) # im4d = np.dstack([mask_erode, im8bit, dists2Tot, mask_erode]) regions = slic.slic_n(np.array(im4d, dtype=uint8), 50, 10) #2 # regions = slic.slic_s(np.array(im4d, dtype=uint8), 550,3) regions *= mask_erode imshow(regions) avgColor = np.zeros([regions.shape[0], regions.shape[1], 3]) # avgColor = np.zeros([regions.shape[0],regions.shape[1],4]) regionCount = regions.max() regionLabels = [[0]] goodRegions = 0 bodyMean = np.array([ posMat[mask_erode, 0].mean(), posMat[mask_erode, 1].mean(), posMat[mask_erode, 2].mean() ]) for i in range(1, regionCount + 2):
# dists2Tot[dists2Tot>1000] = 1000 # im8bit = (d[objects[ind]]*mask_erode) # im8bit = im8bit / np.ceil(im8bit.max()/256.0) im8bit = deepcopy(posMat) for i in range(3): im8bit[:,:,i][im8bit[:,:,i]!=0] -= im8bit[:,:,i][im8bit[:,:,i]!=0].min() im8bit[:,:,i] /= im8bit[:,:,i].max()/256 im8bit = np.array(im8bit, dtype=uint8) # im8bit = im8bit[:,:,2] im4d = np.dstack([mask_erode, im8bit]) # im4d = np.dstack([mask_erode, im8bit, im8bit, im8bit]) # im4d = np.dstack([mask_erode, dists2Tot, dists2Tot, dists2Tot]) # im4d = np.dstack([mask_erode, im8bit, dists2Tot, mask_erode]) regions = slic.slic_n(np.array(im4d, dtype=uint8), 50,10)#2 # regions = slic.slic_s(np.array(im4d, dtype=uint8), 550,3) regions *= mask_erode imshow(regions) avgColor = np.zeros([regions.shape[0],regions.shape[1],3]) # avgColor = np.zeros([regions.shape[0],regions.shape[1],4]) regionCount = regions.max() regionLabels = [[0]] goodRegions = 0 bodyMean = np.array([posMat[mask_erode,0].mean(),posMat[mask_erode,1].mean(),posMat[mask_erode,2].mean()]) for i in range(1, regionCount+2): if np.sum(np.equal(regions,i)) < 50: regions[regions==i] = 0 else:
import numpy as np import Image import matplotlib.pyplot as plt import slic im = np.array(Image.open("grass.jpg")) image_argb = np.dstack([im[:, :, :1], im]).copy("C") region_labels = slic.slic_n(image_argb, 1000, 10) slic.contours(image_argb, region_labels, 10) plt.imshow(image_argb[:, :, 1:].copy()) plt.show()
def getSuperPixels_SLIC(image, nbSegments, compactness): return slic.slic_n(image, nbSegments, compactness)
import numpy as np import slic from sklearn.svm import SVC from sklearn.externals import joblib original = cv2.imread('./banana.jpg') o_im = cv2.cvtColor(original, cv2.COLOR_BGR2HSV) # testing number_regions = 500 region_labels = slic.slic_n(original, 500, 5) label_mask = np.array(region_labels.copy(),dtype=np.uint8) clf = joblib.load("banana_clf.pkl") def label_color(label, number_regions, shape): out = np.ones(shape,dtype=np.uint8) for i in range(number_regions): newval = np.random.randint(256, size=3) out[label==i] = newval return out segment_result = label_color(region_labels,number_regions,original.shape )
# region_labels = slic.slic_n(image_argb, 100, 0) # slic.contours(image_argb, region_labels, 1) # plt.imshow(image_argb[:, :, 0]) # regions = slic.slic_n(np.array(np.dstack([im,im[:,:,2]]), dtype=uint8), 50,10) dists2Tot[dists2Tot>1000] = 1000 im8bit = (d[objects[ind]]*mask_erode) im8bit = im8bit / np.ceil(im8bit.max()/256.0) im4d = np.dstack([mask_erode, im8bit, im8bit, im8bit]) # im4d = np.dstack([mask_erode, dists2Tot, dists2Tot, dists2Tot]) # im4d = np.dstack([mask_erode, im8bit, dists2Tot, mask_erode]) regions = slic.slic_n(np.array(im4d, dtype=uint8), 100,5) # regions = slic.slic_s(np.array(im4d, dtype=uint8), 300,2) regions *= mask_erode imshow(regions) avgColor = np.zeros([regions.shape[0],regions.shape[1],3]) # avgColor = np.zeros([regions.shape[0],regions.shape[1],4]) regionCount = regions.max() regionLabels = [] for i in range(regionCount): if 1: #if using x/y/z meanPos = posMat[regions==i,:].mean(0) if 0: # If using distance map meanPos = np.array([posMat[regions==i,:].mean(0)[0], posMat[regions==i,:].mean(0)[1],
def setupUi(self, MainWindow): self.w = 270 #self.label[0].size().width() self.h = 720 #self.label[0].size().height() MainWindow.setObjectName(_fromUtf8("MainWindow")) MainWindow.resize(3*self.w +180, self.h+90) self.centralwidget = QtGui.QWidget(MainWindow) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) #self.label = CLabel(self.centralwidget) #self.label.setGeometry(QtCore.QRect(180, 30, 270, 720)) #self.label.setObjectName(_fromUtf8("label")) self.widget = QtGui.QWidget(self.centralwidget) self.widget.setGeometry(QtCore.QRect(20, 70, 110, 611)) self.widget.setObjectName(_fromUtf8("widget")) self.verticalLayout = QtGui.QVBoxLayout(self.widget) # self.verticalLayout.setMargin(0) self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) self.pushButton = [] for i in range(7): button = QPushButton(self.widget) button.setObjectName('pushButton_{}'.format(i)) self.pushButton.append(button) self.verticalLayout.addWidget(self.pushButton[-1]) self.widget = QtGui.QWidget(self.centralwidget) self.widget.move(150, 20) self.widget.setObjectName(_fromUtf8("widget")) self.horizontalLayout = QtGui.QHBoxLayout(self.widget) # self.horizontalLayout.setMargin(0) self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.label = [] for i in range(2): label = CLabel(self.widget) label.setObjectName(_fromUtf8("label_{}".format(i))) self.label.append(label) self.label[-1].setGeometry(QRect(150, 20, self.w, self.h)) self.horizontalLayout.addWidget(self.label[-1]) self.reflabel = QLabel(self.widget) self.reflabel.setObjectName('label_{}'.format(i+1)) self.reflabel.setGeometry(QRect(150, 20, self.w, self.h)) self.horizontalLayout.addWidget(self.reflabel) self.readme = QPlainTextEdit(self.centralwidget) self.readme.setReadOnly(True) self.readme.setGeometry(QRect(150, self.h+40, 3*self.w, 25)) self.readme.setPlainText("Important: before clicking 'Save Parts' button, please select all body part!") MainWindow.setCentralWidget(self.centralwidget) self.statusbar = QtGui.QStatusBar(MainWindow) self.statusbar.setObjectName(_fromUtf8("statusbar")) MainWindow.setStatusBar(self.statusbar) self.retranslateUi(MainWindow) QObject.connect(self.pushButton[2], QtCore.SIGNAL(_fromUtf8("clicked()")), self.slot_previous) QObject.connect(self.pushButton[3], QtCore.SIGNAL(_fromUtf8("clicked()")), self.slot_next) QObject.connect(self.pushButton[1], QtCore.SIGNAL(_fromUtf8("clicked()")), self.slot_merge) QObject.connect(self.pushButton[5], QtCore.SIGNAL(_fromUtf8("clicked()")), self.slot_save) QObject.connect(self.pushButton[4], QtCore.SIGNAL(_fromUtf8("clicked()")), self.slot_reset) QObject.connect(self.pushButton[6], QtCore.SIGNAL(_fromUtf8("clicked()")), self.slot_exit) QObject.connect(self.pushButton[0], QtCore.SIGNAL(_fromUtf8("clicked()")), self.slot_load) for i in range(len(self.label)): QObject.connect(self.label[i], SIGNAL('clicked()'), lambda pyr = i: self.slot_click(pyr)) QtCore.QMetaObject.connectSlotsByName(MainWindow) # load default files self.data_path = '../data_cuhk/' # default path self.qfiles = sorted(glob.glob(self.data_path+'query/*')) self.npyr = len(self.label) self.mergeSegs = [[] for i in range(self.npyr)] # load label data self.save_path = self.data_path + 'parts.pkl' if os.path.isfile(self.save_path): # labeled data exists f = open(self.save_path, 'rb') self.data = cPickle.load(f) f.close() self.index = self.data['index'] # initialize labeled data {label0, auxlabel} self.label0 = self.data['labels'][self.index] self.query = QPixmap(self.qfiles[self.index]) qimage = self.query.toImage() imgarr = rgb_view(qimage) self.npimg = imresize(imgarr, (self.h, self.w), interp='bicubic') self.auxlabel = slic.slic_n(self.npimg, 50, 10) else: # no previous annotation available self.index = 0 self.query = QPixmap(self.qfiles[self.index]) self.data = {} self.data['index'] = self.index self.data['labels'] = [np.zeros((self.h, self.w), dtype=np.int32) for i in range(len(self.qfiles))] self.data['scores'] = [[] for i in range(len(self.qfiles))] self.data['identity'] = map(lambda x: os.path.basename(x)[0:os.path.basename(x).find('_')], self.qfiles) self.data['flags'] = np.zeros(len(self.qfiles)) self.data['sflags'] = [[] for i in range(len(self.qfiles))] # compute the initial label map given self.query for i in range(self.npyr): self.slot_slic(i) for i in range(self.npyr): self.show_label(i)
import numpy as np import Image import matplotlib.pyplot as plt import slic im = np.array(Image.open("tennis.png")) region_labels = slic.slic_n(im, 100, 10) contours = slic.contours(im, region_labels, 10) plt.imshow(contours[:, :, :-1].copy()) plt.show()