def createFractal4(reduction, N, proportion): #parameters M = 2*N twoQuads = True angles, lengths = mojette.angleSet_Symmetric(N,N,1,True,50) perpAngle = farey.farey(1,0) angles.append(perpAngle) powerSpect = np.zeros((M,M)) #compute lines centered = True mLines = [] sLines = [] mValues = [] sValues = [] pValues = [] qValues = [] for angle in angles: m, s, p, q, inv = farey.toFinite(angle, M) pValues.append(p) qValues.append(q) if m not in mValues and m < M: u, v = radon.getSliceCoordinates2(m, powerSpect, centered, M) mLines.append((u,v)) mValues.append(m) #second quadrant if twoQuads: if m != 0 and m != M: #dont repeat these m = M-m if m not in mValues and m < M: u, v = radon.getSliceCoordinates2(m, powerSpect, centered, M) mLines.append((u,v)) mValues.append(m) i = (len(mValues)+len(sValues))/float(M) if i >= 1: break ss = [] ss.append(M) ss.extend(range(0, N/2)) maxLines = len(ss) for i,s in enumerate(ss): u, v = radon.getSliceCoordinates2(s, powerSpect, centered, M) sLines.append((u,v)) sValues.append(s) i = (len(mValues)+len(sValues))/float(M) if i >= 1.5: break length = 0 fig, ax = plt.subplots(nrows=1, ncols=2, figsize=(16, 8)) plt.gray() plt.tight_layout() maxLines = len(sLines+mLines) i = 0 ax[0].imshow(powerSpect) ax[1].imshow(powerSpect) color=iter(cm.jet(np.linspace(0,1,maxLines+1))) fareyImage = np.zeros_like(powerSpect) fareyImage1 = np.zeros_like(powerSpect) for i, sLine in enumerate(sLines): u, v = sLine ax[1].plot(u, v, '.w',markersize=1) fareyImage[u,v] = 1 length = length + 1 i = np.count_nonzero(fareyImage)/float((M*M)) if i >= reduction*proportion: break maxLines = len(mLines) for i, mLine in enumerate(mLines): u, v = mLine ax[0].plot(u, v, '.r', markersize=1) ax[1].plot(u, v, '.r',markersize=1) fareyImage[u,v] = 1 fareyImage1[u,v] = 1 length = length + 1 i = np.count_nonzero(fareyImage)/float((M*M)) if i >= reduction: break print("Proportion of M:", (length/float(M))) print("Non-zero elements with holes: ", np.count_nonzero(fareyImage1)/float((M*M)) * 100) print("Non-zero elements without holes: ", np.count_nonzero(fareyImage)/float((M*M)) * 100) print("Absolute difference percentage extra filled in is ", (np.count_nonzero(fareyImage)- np.count_nonzero(fareyImage1))/float((M*M)) *100) withHoles = np.count_nonzero(fareyImage1)/float((M*M)) * 100 withoutHoles = np.count_nonzero(fareyImage)/float((M*M)) * 100 percentage = (withoutHoles - withHoles)/float(withHoles) * 100 print("Percentage difference percentage extra filled in is ", percentage) ax[0].set_title('Sampling (colour per line) for dyadic size:'+str(M)) ax[1].set_title('Sampling (same colour per line) for dyadic size:'+str(M)) imageio.imsave("farey_image_"+str(M)+"_"+".png", fareyImage) plt.show() lines = mLines + sLines return fareyImage, lines
import finitetransform.imageio as imageio #local module import finitetransform.farey as farey #local module import numpy as np #parameters N = 512 M = 2*N K = 1 twoQuads = True print("N:", N, "M:", M) #p = nt.nearestPrime(M) #print("p:", p) #pDash = nt.nearestPrime(N) #print("p':", pDash) #angles = mojette.angleSet_Finite(pDash, 2) angles, lengths = mojette.angleSet_Symmetric(N,N,1,True,K) #here #getProjectionCoordinates perpAngle = farey.farey(1,0) angles.append(perpAngle) print("Number of Angles:", len(angles)) print("angles:", angles) #powerSpect = np.zeros((p,p)) powerSpect = np.zeros((M,M)) #np.set_printoptions(threshold=np.nan) #compute lines print("Computing Finite lines...") centered = True lines = []