コード例 #1
0
ファイル: LayoutTool.py プロジェクト: zokin/PanoAnnotator
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
コード例 #2
0
 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)
コード例 #3
0
    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
コード例 #4
0
ファイル: LayoutTool.py プロジェクト: zokin/PanoAnnotator
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)
コード例 #5
0
ファイル: LayoutTool.py プロジェクト: zhigangjiang/LED2-Net
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
コード例 #6
0
ファイル: LayoutTool.py プロジェクト: zokin/DuLa-Net
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
コード例 #7
0
ファイル: GeoPoint.py プロジェクト: zokin/PanoAnnotator
    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)
コード例 #8
0
    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)
コード例 #9
0
    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()