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
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
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