I'm attempting to create a custom image filter which takes in an image and generates an image which uses every RGB color by finding the (approximate) closest unused color. I've optimized it as much as I can think of for now, but I estimate it will still take over 40 hours to complete one (4096x4096) image as is, hoping someone else will have ideas. This is the current function which finds the (approximate) closest available color given the next pixel: def getColor(pixelVal, colorArray): for distance in range(256): if distance < 10: distanceArray = colorArray[max(pixelVal[0]-distance,0):min(pixelVal[0]+distance+1,255), max(pixelVal[1]-distance,0):min(pixelVal[1]+distance+1,255), max(pixelVal[2]-distance,0):min(pixelVal[2]+distance+1,255)] available = distanceArray[distanceArray[..., 3] == 1] if (len(available) > 0): return available[0] else: pixelRMin = max(pixelVal[0]-distance,0) pixelRMax = min(pixelVal[0]+distance+1,255) pixelGMin = max(pixelVal[1]-distance,0) pixelGMax = min(pixelVal[1]+distance+1,255) pixelBMin = max(pixelVal[2]-distance,0) pixelBMax = min(pixelVal[2]+distance+1,255) array1 = colorArray[pixelRMinixelRMax, pixelGMinixelGMax, pixelBMinixelBMin+1] available = array1[array1[..., 3] == 1] if (len(available) > 0): return available[0] array2 = colorArray[pixelRMinixelRMax, pixelGMinixelGMax, pixelBMax-1ixelBMax] available = array2[array2[..., 3] == 1] if (len(available) > 0): return available[0] array3 = colorArray[pixelRMinixelRMax, pixelGMinixelGMin+1, pixelBMinixelBMax] available = array3[array3[..., 3] == 1] if (len(available) > 0): return available[0] array4 = colorArray[pixelRMinixelRMax, pixelGMax-1ixelGMax, pixelBMinixelBMax] available = array4[array4[..., 3] == 1] if (len(available) > 0): return available[0] array5 = colorArray[pixelRMinixelRMin+1, pixelGMinixelGMax, pixelBMinixelBMax] available = array5[array5[..., 3] == 1] if (len(available) > 0): return available[0] array6 = colorArray[pixelRMax-1ixelRMax, pixelGMinixelGMax, pixelBMinixelBMax] available = array6[array6[..., 3] == 1] if (len(available) > 0): return available[0] It searches an expanding cube for a color that has not been used yet from a 4d array (R, G, B, and available boolean), eventually switching to only search the shell of the cube (at a distance of 10 which after some testing seems to be optimal). Here are the results for the first 10%: Thanks! Continue reading...