Ejemplo n.º 1
0
        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])
Ejemplo n.º 2
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
Ejemplo n.º 3
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
Ejemplo n.º 4
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])