ret = cv2.waitKey(150) if ret >= 0: break # # HOG # hogSize = 8 # hogIn = np.dstack([regions,regions,regions]) # hog = features.hog(hogIn, hogSize) # hIm = HOGpicture(hog, hogSize) # imshow(hIm) # r2 = overlayHOG(regions>0, hIm) # imshow(r2) # touching neighbors allEdges = nsp.getNeighborEdges(np.ascontiguousarray(regions, dtype=uint8)) edges = [] for i in allEdges: if i[0] != 0 and i[1] != 0: # if 1: if i not in edges: edges.append(i) if [i[1], i[0]] not in edges: edges.append([i[1], i[0]]) edgeDict = edgeList2Dict(edges) relativeDists = getRelativeDists(edgeDict) # closestNodes = getClosestConnectedNode(edgeDict, regionLabels, avgColor) closestNodes = getClosestConnectedNode(edgeDict, regionLabels, posMat) regionXYZ = ([x[1] for x in regionLabels if x[0] != 0]) regionPos = ([x[2] for x in regionLabels if x[0] != 0])
def regionGraph(posMat, pixelSize=750): im8bit = deepcopy(posMat) mask_erode = posMat[:,:,2]>0 if 0: 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=np.uint8) im4d = np.dstack([mask_erode, im8bit]) else: im8bit = im8bit[:,:,2] im8bit /= im8bit.max()/256 im8bit = np.array(im8bit, dtype=np.uint8) im4d = np.dstack([mask_erode*0+1, im8bit, im8bit, im8bit]) # im4d = np.dstack([mask_erode, im8bit, mask_erode, mask_erode]) # slicRegionCount = int(posMat.shape[0]*posMat.shape[1]/1020) # regions = slic.slic_n(np.array(im4d, dtype=np.uint8), slicRegionCount,10)#50 posMean = posMat[posMat[:,:,2]>0,:].mean(0)[2]*1.2 # print posMean # regions = slic.slic_s(np.array(np.ascontiguousarray(im4d), dtype=np.uint8), int(1000 * (1000.0/posMean)**2),5)+1 # regions = slic.slic_s(np.array(np.ascontiguousarray(im4d), dtype=np.uint8), 1500,5)+1 regions = slic.slic_s(np.array(np.ascontiguousarray(im4d), dtype=np.uint8), pixelSize,5)+1 regions *= mask_erode avgColor = np.zeros([regions.shape[0],regions.shape[1],3]) 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)) < 100: regions[regions==i] = 0 else: 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], # posMat[regions==i,:].mean(0)[2], (dists2Tot[regions==i].mean())]) if 0: # If using depth only meanPos = np.array([(np.nonzero(regions==i)[0].mean()), (np.nonzero(regions==i)[1].mean()), (im8bit[regions==i].mean())]) avgColor[regions==i,:] = meanPos - bodyMean if not np.isnan(meanPos[0]) and meanPos[0] != 0.0: tmp = np.nonzero(regions==i) argPos = [int(tmp[0].mean()),int(tmp[1].mean())] regionLabels.append([i, meanPos-bodyMean, argPos]) goodRegions += 1 regions[regions==i] = goodRegions # print np.sum(np.equal(regions,i)) else: regions[regions==i] = 0 regionCount = regions.max() allEdges = nsp.getNeighborEdges(np.ascontiguousarray(regions, dtype=np.uint8)) edges = [] for i in allEdges: if i[0] != 0 and i[1] != 0: if i not in edges: edges.append(i) if [i[1],i[0]] not in edges: edges.append([i[1],i[0]]) edgeDict = edgeList2Dict(edges) regionXYZ = ([x[1] for x in regionLabels if x[0] != 0]) regionXYZ.insert(0,[0,0,0]) regionPos = ([x[2] for x in regionLabels if x[0] != 0]) regionPos.insert(0,[0,0]) # distMat = UnstructuredDijkstras(regionXYZ, edgeDict) # distMat, bendMat = UnstructuredDijkstrasAndBend(regionXYZ, edgeDict) # mstEdges, edgeDict2 = MinimumSpanningTree(distMat[1:,1:]) return regions, regionXYZ, regionLabels, edgeDict
def regionGraph(posMat, pixelSize=750): im8bit = deepcopy(posMat) mask_erode = posMat[:, :, 2] > 0 if 0: 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=np.uint8) im4d = np.dstack([mask_erode, im8bit]) else: im8bit = im8bit[:, :, 2] im8bit /= im8bit.max() / 256 im8bit = np.array(im8bit, dtype=np.uint8) im4d = np.dstack([mask_erode * 0 + 1, im8bit, im8bit, im8bit]) # im4d = np.dstack([mask_erode, im8bit, mask_erode, mask_erode]) # slicRegionCount = int(posMat.shape[0]*posMat.shape[1]/1020) # regions = slic.slic_n(np.array(im4d, dtype=np.uint8), slicRegionCount,10)#50 posMean = posMat[posMat[:, :, 2] > 0, :].mean(0)[2] * 1.2 # print posMean # regions = slic.slic_s(np.array(np.ascontiguousarray(im4d), dtype=np.uint8), int(1000 * (1000.0/posMean)**2),5)+1 # regions = slic.slic_s(np.array(np.ascontiguousarray(im4d), dtype=np.uint8), 1500,5)+1 regions = slic.slic_s(np.array(np.ascontiguousarray(im4d), dtype=np.uint8), pixelSize, 5) + 1 regions *= mask_erode avgColor = np.zeros([regions.shape[0], regions.shape[1], 3]) 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)) < 100: regions[regions == i] = 0 else: 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], # posMat[regions==i,:].mean(0)[2], (dists2Tot[regions == i].mean()) ]) if 0: # If using depth only meanPos = np.array([(np.nonzero(regions == i)[0].mean()), (np.nonzero(regions == i)[1].mean()), (im8bit[regions == i].mean())]) avgColor[regions == i, :] = meanPos - bodyMean if not np.isnan(meanPos[0]) and meanPos[0] != 0.0: tmp = np.nonzero(regions == i) argPos = [int(tmp[0].mean()), int(tmp[1].mean())] regionLabels.append([i, meanPos - bodyMean, argPos]) goodRegions += 1 regions[regions == i] = goodRegions # print np.sum(np.equal(regions,i)) else: regions[regions == i] = 0 regionCount = regions.max() allEdges = nsp.getNeighborEdges( np.ascontiguousarray(regions, dtype=np.uint8)) edges = [] for i in allEdges: if i[0] != 0 and i[1] != 0: if i not in edges: edges.append(i) if [i[1], i[0]] not in edges: edges.append([i[1], i[0]]) edgeDict = edgeList2Dict(edges) regionXYZ = ([x[1] for x in regionLabels if x[0] != 0]) regionXYZ.insert(0, [0, 0, 0]) regionPos = ([x[2] for x in regionLabels if x[0] != 0]) regionPos.insert(0, [0, 0]) # distMat = UnstructuredDijkstras(regionXYZ, edgeDict) # distMat, bendMat = UnstructuredDijkstrasAndBend(regionXYZ, edgeDict) # mstEdges, edgeDict2 = MinimumSpanningTree(distMat[1:,1:]) return regions, regionXYZ, regionLabels, edgeDict
break # # HOG # hogSize = 8 # hogIn = np.dstack([regions,regions,regions]) # hog = features.hog(hogIn, hogSize) # hIm = HOGpicture(hog, hogSize) # imshow(hIm) # r2 = overlayHOG(regions>0, hIm) # imshow(r2) # touching neighbors allEdges = nsp.getNeighborEdges(np.ascontiguousarray(regions, dtype=uint8)) edges = [] for i in allEdges: if i[0] != 0 and i[1] != 0: # if 1: if i not in edges: edges.append(i) if [i[1],i[0]] not in edges: edges.append([i[1],i[0]]) edgeDict = edgeList2Dict(edges) relativeDists = getRelativeDists(edgeDict) # closestNodes = getClosestConnectedNode(edgeDict, regionLabels, avgColor) closestNodes = getClosestConnectedNode(edgeDict, regionLabels, posMat) regionXYZ = ([x[1] for x in regionLabels if x[0] != 0]) regionPos = ([x[2] for x in regionLabels if x[0] != 0])