Ejemplo n.º 1
0
def findWonkyVectors(x, y, dx, dy, tol=100):
    from PYME.Analysis.LMVis.visHelpers import genEdgeDB
    T = delaunay.Triangulation(x, y)

    edb = genEdgeDB(T)

    wonkyVecs = np.zeros(len(x))

    #remove any shifts which are markedly different from their neighbours
    for i in range(len(x)):
        incidentEdges = T.edge_db[edb[i][0]]

        #        d_x = np.diff(T.x[incidentEdges])
        #        d_y = np.diff(T.y[incidentEdges])
        #
        #        dist = (d_x**2 + d_y**2)
        #
        #        di = np.mean(np.sqrt(dist))

        neighb = incidentEdges.ravel()
        neighb = neighb[(neighb == i) < .5]

        if (abs(dx[i] - np.median(dx[neighb])) >
                tol) or (abs(dy[i] - np.median(dy[neighb])) > tol):
            wonkyVecs[i] = 1

    return wonkyVecs > .5
Ejemplo n.º 2
0
def findWonkyVectors(x, y,dx,dy, tol=100):
    from PYME.Analysis.LMVis.visHelpers import genEdgeDB
    T = delaunay.Triangulation(x,y)

    edb = genEdgeDB(T)

    wonkyVecs = np.zeros(len(x))


    #remove any shifts which are markedly different from their neighbours
    for i in range(len(x)):
        incidentEdges = T.edge_db[edb[i][0]]

#        d_x = np.diff(T.x[incidentEdges])
#        d_y = np.diff(T.y[incidentEdges])
#
#        dist = (d_x**2 + d_y**2)
#
#        di = np.mean(np.sqrt(dist))

        neighb = incidentEdges.ravel()
        neighb = neighb[(neighb == i) < .5]

        if (abs(dx[i] - np.median(dx[neighb])) > tol) or (abs(dy[i] - np.median(dy[neighb])) > tol):
            wonkyVecs[i] = 1

    return wonkyVecs > .5
Ejemplo n.º 3
0
def cluster(T):
    edb = genEdgeDB(T)
    nodeNum = -1*np.ones(T.x.shape)
    nodeInfo = np.iinfo('i').max*np.ones((len(T.x), 2))

    curNode = 0

    for i in range(len(T.x)):
        incidentEdges = T.edge_db[edb[i][0]]
        neighbourPoints = edb[i][1]

        dx = np.diff(T.x[incidentEdges])
        dy = np.diff(T.y[incidentEdges])

        dist = (dx**2 + dy**2)

        sI = argsort(dist)[::-1]

        #Do nearest neighbour - this MUST generate a new node
        iMin = np.argmin(np.sqrt(dist))
        d = dist[iMin]
        n = neighbourPoints[iMin]

        nodeInfo[curNode, 1] = d
        nodeNum[i] = curNode
        if n < i: #have already visited other point
            nn = nodeNum[n]

            if nodeInfo[nn, 1] >= d:
                nodeNum[n] = curNode
            else:
                nnp = nn
                while nodeInfo[nn, 1] < d: #traverse upwards until distance is larger
                    nnp = nn
                    nn = nodeInfo[nn, 0] #parent
                    
                nodeInfo[nnp, 0] = curNode

            nodeInfo[curNode, 0] = nn
                        
        else:
            nodeInfo[curNode,0] = len(T.x)-1 #last node
            nodeNum[n] = curNode

        curNode += 1


    return nodeNum, nodeInfo
Ejemplo n.º 4
0
def cluster(T):
    edb = genEdgeDB(T)
    nodeNum = -1 * np.ones(T.x.shape)
    nodeInfo = np.iinfo('i').max * np.ones((len(T.x), 2))

    curNode = 0

    for i in range(len(T.x)):
        incidentEdges = T.edge_db[edb[i][0]]
        neighbourPoints = edb[i][1]

        dx = np.diff(T.x[incidentEdges])
        dy = np.diff(T.y[incidentEdges])

        dist = (dx**2 + dy**2)

        sI = argsort(dist)[::-1]

        #Do nearest neighbour - this MUST generate a new node
        iMin = np.argmin(np.sqrt(dist))
        d = dist[iMin]
        n = neighbourPoints[iMin]

        nodeInfo[curNode, 1] = d
        nodeNum[i] = curNode
        if n < i:  #have already visited other point
            nn = nodeNum[n]

            if nodeInfo[nn, 1] >= d:
                nodeNum[n] = curNode
            else:
                nnp = nn
                while nodeInfo[
                        nn, 1] < d:  #traverse upwards until distance is larger
                    nnp = nn
                    nn = nodeInfo[nn, 0]  #parent

                nodeInfo[nnp, 0] = curNode

            nodeInfo[curNode, 0] = nn

        else:
            nodeInfo[curNode, 0] = len(T.x) - 1  #last node
            nodeNum[n] = curNode

        curNode += 1

    return nodeNum, nodeInfo