Move and mix pixels manually?


    Nov 11 2015 | 12:17 am
    I want to take an image and rearrange the pixel values into aesthetically interesting variations that contain the exact same set of colors.
    This means no averaging or changing pixel values or smearing, blurring, using color filters or pretty much any standard effect I have seen applied to images - unless the result is the same exact set of RGB values. I also don't want the result to look like a sort - so bsorting all the pixels is out.
    Think of each pixel is an atom of pigment... a granule of sand that you can't break down further. You get to make a picture but you can only can move the colored sand around.
    Some possibilities:
    1. Click the image and drag a small cluster of pixels to another area of the image -- as the pixels from the new location are displaced to the old. This could range from a more fluid-effect to a no-so-fluid effect.
    2. Slice and dice the matrix in to many small sub matrices in which each is evaluated for some quality (ex. average luminosity) and then sort the submatrices (not merely a bsort on all pixels).
    2a. Iteratively chop up the matrix into submatrices of n-dimension.. gradually reducing the the size of the submatrices in subsequent iterations. ex. divide image into 16 submatrices and move them around. Then chop the result into 64 sub matrices. Shuffle those. Then chop into 256 submatrices and mix them up. etc
    I'm open to either the 'bang it and do it all' approach or a more interactive UI. I just want images that don't look like a bunch of re-sorted pixels.
    I don't think the solution is trivial... but this is Max! I know it's possible. All feedback is appreciated. Thanks!

    • Nov 11 2015 | 12:24 am
      Just to clarify, my use of the term pixel refers to color values, not actual pixels (which are positional). Hence, "moving a pixel" is just relocating the same channel values to a different pixel.
      Also, I am open to techniques in which intermediate steps result in a different set of values however the final output must contain all of the original color values.