def genLayoutEdgeMap(scene, size): edgeMap = np.zeros(size) sizeT = (size[1], size[0]) for wall in scene.label.getLayoutWalls(): if wall.planeEquation[3] > 0: continue for edge in wall.edges: color = utils.normal2ManhColor(edge.vector) #color = (1, 1, 1) for i in range(len(edge.coords) - 1): isCross, l, r = utils.pointsCrossPano(edge.sample[i], edge.sample[i + 1]) if not isCross: pos1 = utils.coords2pos(edge.coords[i], sizeT) pos2 = utils.coords2pos(edge.coords[i + 1], sizeT) utils.imageDrawLine(edgeMap, pos1, pos2, color) else: lpos = utils.coords2pos(utils.xyz2coords(l), sizeT) rpos = utils.coords2pos(utils.xyz2coords(r), sizeT) ch = int((lpos[1] + rpos[1]) / 2) utils.imageDrawLine(edgeMap, lpos, (0, ch), color) utils.imageDrawLine(edgeMap, rpos, (sizeT[0], ch), color) edgeMap = utils.imageDilation(edgeMap, 1) edgeMap = utils.imageGaussianBlur(edgeMap, 2) return edgeMap
def drawEdges(qp, obj): for edge in obj.edges: for i in range(len(edge.coords) - 1): isCross, l, r = utils.pointsCrossPano( edge.sample[i], edge.sample[i + 1]) if not isCross: pos1 = utils.coords2pos(edge.coords[i], size) pos2 = utils.coords2pos(edge.coords[i + 1], size) qp.drawLine(pos1[0], pos1[1], pos2[0], pos2[1]) else: lpos = utils.coords2pos(utils.xyz2coords(l), size) rpos = utils.coords2pos(utils.xyz2coords(r), size) ch = int((lpos[1] + rpos[1]) / 2) qp.drawLine(lpos[0], lpos[1], 0, ch) qp.drawLine(rpos[0], rpos[1], size[0], ch)
def genBbox2d(self, wall): size = (self.size[0], self.size[1]) sizeT = utils.posTranspose(size) extend = 10 bbox = wall.bbox2d poslt = utils.posTranspose(utils.coords2pos(bbox[0], sizeT)) posrb = utils.posTranspose(utils.coords2pos(bbox[1], sizeT)) poslt = (poslt[0] - extend, poslt[1] - extend) poslt = utils.checkImageBoundary(poslt, size) posrb = (posrb[0] + extend, posrb[1] + extend) posrb = utils.checkImageBoundary(posrb, size) return poslt, posrb
def genWallPolygon2d(size, wall): size = (size[1], size[0]) isCrossUp, ul, ur = wall.edges[0].checkCross() isCrossDown, dl, dr = wall.edges[2].checkCross() polygon = [] vertex = [] for edge in wall.edges: vertex.extend([s for s in edge.sample]) polygon.extend([utils.coords2pos(c, size) for c in edge.coords]) if not (isCrossUp or isCrossDown): return False, polygon else: iur = vertex.index(ur) iul = iur + 1 idr = vertex.index(dr) idl = idr - 1 uh = int((polygon[iur][1] + polygon[iul][1]) / 2) dh = int((polygon[idr][1] + polygon[idl][1]) / 2) polygon1 = polygon[:iur] + [(size[0], uh), (size[0], dh)] + polygon[idr:] polygon2 = [(0, uh)] + polygon[iul:idl] + [(0, dh)] return True, (polygon1, polygon2)
def genLayoutEdgeMap(scene, size, dilat=4, blur=20): edgeMap = np.zeros(size) sizeT = (size[1], size[0]) walls = sortWallsByDist(scene.layoutWalls) for wall in walls: #if wall.planeEquation[3] > 0: # continue ''' isCross, polygon = genWallPolygon2d(size, wall) if not isCross: utils.imageDrawPolygon(edgeMap, polygon, (0,0,0)) else: utils.imageDrawPolygon(edgeMap, polygon[0], (0,0,0)) utils.imageDrawPolygon(edgeMap, polygon[1], (0,0,0)) ''' for i, edge in enumerate(wall.edges): #color = utils.normal2ManhColor(edge.vector) #color = (1, 1, 1) #color = type2Color(edge.type) color = idx2Color(i) for i in range(len(edge.coords) - 1): isCross, l, r = utils.pointsCrossPano(edge.sample[i], edge.sample[i + 1]) if not isCross: pos1 = utils.coords2pos(edge.coords[i], sizeT) pos2 = utils.coords2pos(edge.coords[i + 1], sizeT) utils.imageDrawLine(edgeMap, pos1, pos2, color) else: lpos = utils.coords2pos(utils.xyz2coords(l), sizeT) rpos = utils.coords2pos(utils.xyz2coords(r), sizeT) ch = int((lpos[1] + rpos[1]) / 2) utils.imageDrawLine(edgeMap, lpos, (0, ch), color) utils.imageDrawLine(edgeMap, rpos, (sizeT[0], ch), color) edgeMap = utils.imageDilation(edgeMap, dilat) edgeMap = utils.imageGaussianBlur(edgeMap, blur) for i in range(size[2]): edgeMap[:, :, i] *= (1.0 / edgeMap[:, :, i].max()) return edgeMap
def genLayoutCornerMap(scene, size, dilat=4, blur=20): corMap = np.zeros(size) for point in scene.layoutFloor.corners + scene.layoutCeiling.corners: pos = utils.coords2pos(utils.posTranspose(point.coords), size) corMap[pos[0]][pos[1]] = 1 corMap = utils.imageDilation(corMap, dilat) corMap = utils.imageGaussianBlur(corMap, blur) corMap *= (1.0/corMap.max()) return corMap
def initByScene(self): if self.coords == None: self.coords = utils.xyz2coords(self.xyz) coordsT = (self.coords[1], self.coords[0]) colorData = self.__scene.getPanoColorData() colorPos = utils.coords2pos(coordsT, colorData.shape) rgb = colorData[colorPos[0]][colorPos[1]] self.color = (rgb[0], rgb[1], rgb[2]) depthData = self.__scene.getPanoDepthData() depthPos = utils.coords2pos(coordsT, depthData.shape) depthMean = utils.imageRegionMean(depthData, depthPos, (5, 5)) self.depth = depthMean #self.depth = depthData[depthPos[0]][depthPos[1]] if self.xyz == None: self.xyz = utils.coords2xyz(self.coords, self.depth)
def __init__(self, scene, coords=None, xyz=None): self.coords = coords self.color = (0, 0, 0) self.depth = 0 self.xyz = xyz self.type = 0 # [concave, convex, occul] self.id = 0 if self.coords == None: self.coords = utils.xyz2coords(self.xyz) coordsT = (self.coords[1], self.coords[0]) cpos = utils.coords2pos(coordsT, scene.color.shape) self.color = tuple(scene.color[cpos[0]][cpos[1]]) dpos = utils.coords2pos(coordsT, scene.depth.shape) self.depth = scene.depth[dpos[0]][dpos[1]] if self.xyz == None: self.xyz = utils.coords2xyz(self.coords, self.depth)
def paintEvent(self, event): size = (self.width(), self.height()) def drawEdges(qp, obj): for edge in obj.edges: for i in range(len(edge.coords) - 1): isCross, l, r = utils.pointsCrossPano( edge.sample[i], edge.sample[i + 1]) if not isCross: pos1 = utils.coords2pos(edge.coords[i], size) pos2 = utils.coords2pos(edge.coords[i + 1], size) qp.drawLine(pos1[0], pos1[1], pos2[0], pos2[1]) else: lpos = utils.coords2pos(utils.xyz2coords(l), size) rpos = utils.coords2pos(utils.xyz2coords(r), size) ch = int((lpos[1] + rpos[1]) / 2) qp.drawLine(lpos[0], lpos[1], 0, ch) qp.drawLine(rpos[0], rpos[1], size[0], ch) if not self.__isAvailable: return qp = QPainter() qp.begin(self) panoPixmap = self.__scene.getPanoColorPixmap() qp.drawPixmap(0, 0, size[0], size[1], panoPixmap) qp.setOpacity(1.0) linesPixmap = self.__scene.getPanoLinesPixmap() if linesPixmap and self.isPanoLinesEnable: qp.drawPixmap(0, 0, size[0], size[1], linesPixmap) qp.setOpacity(1.0) OmapPixmap = self.__scene.getPanoOmapPixmap() if OmapPixmap and self.isPanoOmapEnable: qp.drawPixmap(0, 0, size[0], size[1], OmapPixmap) qp.setPen(QPen(Qt.red, 2, Qt.SolidLine)) if self.__dragPoints: pos = utils.xyz2pos(self.__dragPoints[0], size) qp.drawEllipse(QPoint(pos[0], pos[1]), 5, 5) if len(self.__dragPoints) == 2: pos2 = utils.xyz2pos(self.__dragPoints[1], size) qp.drawEllipse(QPoint(pos2[0], pos2[1]), 5, 5) qp.drawLine(pos[0], pos[1], pos2[0], pos2[1]) if self.isLayoutPointEnable: for point in self.__scene.label.getLayoutPoints(): if point in self.__scene.selectObjs: qp.setPen(QPen(Qt.yellow, 2, Qt.SolidLine)) else: qp.setPen(QPen(Qt.red, 2, Qt.SolidLine)) pos = utils.coords2pos(point.coords, size) qp.drawEllipse(QPoint(pos[0], pos[1]), 5, 5) #qp.drawLine(pos[0], 0, pos[0], self.height()) if self.isLayoutLineEnable: #draw all obj first if self.isPanoLinesEnable: qp.setPen(QPen(Qt.white, 1, Qt.SolidLine)) elif self.isPanoOmapEnable: qp.setPen(QPen(Qt.white, 2, Qt.SolidLine)) else: qp.setPen(QPen(Qt.blue, 2, Qt.SolidLine)) for wall in self.__scene.label.getLayoutWalls(): drawEdges(qp, wall) floor = self.__scene.label.getLayoutFloor() ceiling = self.__scene.label.getLayoutCeiling() if floor is not None: drawEdges(qp, floor) if ceiling is not None: drawEdges(qp, ceiling) #darw selected obj again qp.setPen(QPen(Qt.yellow, 2, Qt.SolidLine)) for obj in self.__scene.getSelectObjs('WallPlane'): drawEdges(qp, obj) for obj in self.__scene.getSelectObjs('FloorPlane'): drawEdges(qp, obj) if self.isLayoutObject2dEnable: for obj in self.__scene.label.getLayoutObject2d(): qp.setPen(QPen(QColor(0, 255, 255), 2, Qt.SolidLine)) drawEdges(qp, obj) for obj in self.__scene.getSelectObjs('Object2D'): qp.setPen(QPen(Qt.yellow, 2, Qt.SolidLine)) drawEdges(qp, obj) ###TEST ''' def drawBbox(obj): size = (self.width(), self.height()) poslt = utils.coords2pos(obj.bbox2d[0], size) posrb = utils.coords2pos(obj.bbox2d[1], size) qp.drawRect(poslt[0], poslt[1], posrb[0]-poslt[0], posrb[1]-poslt[1]) qp.setPen(QPen(Qt.red, 1, Qt.SolidLine)) drawBbox(self.__scene.label.getLayoutFloor()) drawBbox(self.__scene.label.getLayoutCeiling()) for wall in self.__scene.label.getLayoutWalls(): drawBbox(wall) ''' qp.setPen(QPen(Qt.green, 4, Qt.SolidLine)) qp.drawText(10, 10, "FPS : {0:.2f}".format(utils.getFPS())) qp.end() self.__mainWindow.updateViews()