If you have a distortion filter that is reversible you can pre-distort an image, apply an 'art filter' to the distorted image, then un-distort the image. The result? The 'art filter' is distorted, while the image itself seems undistorted.
Unfortunately not enough Photoshop distortion filters are reversible, but I could probably back calculate an inverse displacement to a distortion by applying it to an image of absolute pixel addresses - an idea I partially present here:
Smear Now or Smear Later and
UV Map Now or UV Map Later


UPDATE 5/10/2009
I was reasonably successful in using channel calculations to compute displacement maps that undo other displacement maps. The quality is somewhat limited by things like Photoshop's refusal to displace in higher than 8-bits, but below is a test.

I used Perlin noise Photoshop 'clouds' to displace a photo, then I applied the mosaic filter. Finally I reversed the displacement so that the photo was normal, but made of rippled 'mosaic' tiles.
I reversed the displacement by applying the same displacement to an image of absolute pixel address (the yellow, red and green 'UV' image) and subtracting the undistorted version from the distorted version to get an image of relative displacements.
See Digital Heat Ripple to learn all about how the Photoshop displacement filter works.
UPDATE 5/12/2009
Here is a color version: a CMYK color halftone without using CMYK inks
Half brick offset mosaic. One level is offset, then mosaiced, then re-offset.

Full brick offset mosaic. One level is offset, then mosaiced, then re-offset.
I may do more elaborate work by uv mapping and warping reversible Maya meshes.
UPDATE 6/22/2009


Hello Joseph Francis
I love your web site, especially
2 mosaic. one is offset, mosaiced, then re-offset.
I have tried several times but can't get it to work.
could you please give me some detailed instruction on how to do it.I really want to do this.
Regards Andrew
1. Pick a number for your mosaic brick size in pixels. I pick 20.
2. Get a photo. Make your life easy by making it have a resolution that is divisible by 20. Lets say it's 600 x 800.
3. Make a second layer with a copy of the background photo.
4. Filter > Pixelate > Mosaic the lower layer with a cell size of 20.
5. Filter > Other > Offset the upper layer +10 pixels in the horizontal direction - with the 'wraparound' box checked.
6. Filter > Pixelate > Mosaic the upper layer with a cell size of 20.
7. Filter > Other > Offset the upper layer -10 pixels in the horizontal direction - with the 'wraparound' box checked.
8. Make a new image 20 pixels wide and 40 pixels tall. Make the top half of it black and the bottom half white.
9. Edit > Define Pattern.
10. Make a new layer and Edit > Fill... use Pattern. You should now have the upper layer number 3 filled with horizontal black and white stripes each 20 pixels tall.
11. Magic wand the white stripes (contiguous off) to load that as a selection.
12. Go to the upper mosaic (layer 2) and ask for a layer mask. The selection should make every other row of bricks in layer two go away to reveal the background mosaic (layer 1) underneath.
13. Hide the stripes. You now have a brick mosaic.
14. Experiment with flatter (non-square) bricks. Have fun.