예제 #1
0
def computePerpLines(kSpace, anglesSorted, finiteAnglesSorted, r, mValues, centered = True, twoQuads = False):
    '''
    compute finite lines coordinates given Katz criterion
    Returns a list or list of slice 2-tuples and corresponding list of angles and m values
    perp computes the perpendicular (s) lines as well
    '''
    N, M = kSpace.shape
    perpAngles = []
    linesPerp = []
    sValues = []
    for s in range(0, int(N/8*r)):
        m = N+s
        if m in mValues or m in sValues: #skip
            continue
        
        index = finiteAnglesSorted.index(m)
        angle = anglesSorted[index] #corresponding angle
        u, v = radon.getSliceCoordinates2(m, kSpace, centered)
        linesPerp.append((u,v))
        sValues.append(m)
        perpAngles.append(angle)
        if twoQuads:
            m = N-m
            u, v = radon.getSliceCoordinates2(m, kSpace, centered)
            linesPerp.append((u,v))
            sValues.append(m)
            perpAngles.append(angle)
    
    return linesPerp, perpAngles, sValues
예제 #2
0
def computeKatzLines(kSpace, anglesSorted, finiteAnglesSorted, K, centered = True, twoQuads = False):
    '''
    compute finite lines coordinates given Katz criterion
    Returns a list or list of slice 2-tuples and corresponding list of angles and m values
    perp computes the perpendicular (s) lines as well
    '''
    N, M = kSpace.shape
    lines = []
    angles = []
    mValues = []
    for m, angle in zip(finiteAnglesSorted, anglesSorted):
        if isKatzCriterion(N, N, angles, K):
            print("Katz Criterion Met. Breaking")
            break
        m, inv = farey.toFinite(angle, N)
        u, v = radon.getSliceCoordinates2(m, kSpace, centered)
        lines.append((u,v))
        mValues.append(m)
        angles.append(angle)
        #second quadrant
        if twoQuads:
            if m != 0 and m != N: #dont repeat these
                m = N-m
                u, v = radon.getSliceCoordinates2(m, kSpace, centered)
                lines.append((u,v))
                mValues.append(m)
                p, q = farey.get_pq(angle)
                newAngle = farey.farey(-p,q) #not confirmed
                angles.append(newAngle)
    
    return lines, angles, mValues
예제 #3
0
def computeLines(kSpace, angles, centered = True, twoQuads = False):
    '''
    compute finite lines coordinates
    Returns a list or list of slice 2-tuples and corresponding list of m values
    '''
    p, s = kSpace.shape
    lines = []
    mValues = []
    for angle in angles:
        m, inv = farey.toFinite(angle, p)
        u, v = radon.getSliceCoordinates2(m, kSpace, centered, p)
        lines.append((u,v))
        mValues.append(m)
        #second quadrant
        if twoQuads:
            if m != 0 and m != p: #dont repeat these
                m = p-m
                u, v = radon.getSliceCoordinates2(m, kSpace, centered, p)
                lines.append((u,v))
                mValues.append(m)
    
    return lines, mValues