예제 #1
0
def fareyMapping(N):
    '''
    Print out the Farey/rational angle mapping to the finite angle set.
    The angles are based on L1 norm minimal rational angle set.
    Also returns the finite angle set, matching rational angles and No. of bins lists
    '''
    #create angle set with Farey vectors
    fareyVectors = farey.Farey()        
    fareyVectors.compactOn()
    fareyVectors.generateFiniteWithCoverage(N)
#    angles = fareyVectors.vectors
#    print "Number of Projections:", len(angles)
#    print fareyVectors.finiteAngles
#    print fareyVectors.vectors
    
    #sort to reorder result for prettier printing
    finiteAnglesSorted, anglesSorted = fareyVectors.sort('finite')
    
    #print mapping
    BList = []
    for finiteAngle, angle in zip(finiteAnglesSorted, anglesSorted):
        p, q = farey.get_pq(angle)
        B = farey.projectionLength(angle, N, N)
        BList.append(B)
        print("m:", finiteAngle, "p:", p, "q:", q, "B:", B)
        
    return finiteAnglesSorted, anglesSorted, BList
예제 #2
0
def mojetteProjection(projection, N, angle, P, Q):
    '''
    Convert a finite projection into a Mojette projection for given (p,q).
    
    Assumes you have correctly determined (p,q) for the m value of the finite projection.
    '''
    #    dyadic = True
    #    if N % 2 == 1: # if odd, assume prime
    #        dyadic = False

    p, q = farey.get_pq(angle)
    B = farey.projectionLength(angle, P, Q)  #no. of bins
    m, inv = farey.toFinite(angle, N)
    translateOffset, perp = farey.finiteTranslateOffset(angle, N, P, Q)
    mojetteProj = np.zeros(B)
    angleSign = p * q
    '''if nt.is_coprime(q, N):
        inv = q
    else: #perp projection
        inv = p
    
    for translate, bin in enumerate(projection):
        translateMojette = int((inv*translate)%N)
        if angleSign >= 0 and perp: #Reverse for perp
            translateMojette = int(translateOffset) - translateMojette
        else:
            translateMojette += int(translateOffset)
        print "TR:", translate, "Tm:", translateMojette
        mojetteProj[translateMojette] += bin'''

    for translate, bin in enumerate(mojetteProj):
        if angleSign >= 0 and perp:  #Reverse for perp
            translateMojette = int(translateOffset) - int(translate)
        else:
            translateMojette = int(translate) - int(translateOffset)

        if translateMojette < 0:
            translateFinite = (N - (inv * abs(translateMojette)) % N) % N
        else:
            translateFinite = (inv * translateMojette
                               ) % N  #has issues in C, may need checking
        mojetteProj[translate] += projection[translateFinite]


#        print "TR:", translateFinite, "TM:", translate

    return mojetteProj
예제 #3
0
def getMojetteProjectionLength(angle, P, Q):
    '''
    Return the number of bins for projection at angle of a PxQ image.
    Wraps function from Farey module
    '''
    return farey.projectionLength(angle, P, Q) #no. of bins