suggestion for the interpolation in imshow()

suggestion for the interpolation in imshow()
The interpolation algorithm used in imshow() can produce spurious results, as has been noted before:

http://article.gmane.org/gmane.comp.python.matplotlib.general/12062

This happens because the data is converted to RGB before the interpolation/resampling, rather than after. How hard would it be to reverse this so that the data array is first interpolated & resampled and then converted by cmap to RGB?

Andrew Hawryluk

Andrew Hawryluk wrote:

The interpolation algorithm used in imshow() can produce spurious results, as has been noted before:

_http://article.gmane.org/gmane.comp.python.matplotlib.general/12062_

This happens because the data is converted to RGB before the interpolation/resampling, rather than after. How hard would it be to reverse this so that the data array is first interpolated & resampled and then converted by cmap to RGB?

To me, it looks very hard. The color mapping is done first, in python, and not repeated with every draw. The interpolation is done by agg at rendering time. Logically, I don't know any reason why agg shouldn't do what you suggest: interpolate the scalar field and then convert to rgb. Maybe agg can do it this way. If so, it would still take quite a bit of work by someone comfortable with agg (i.e., not me) to make the change.

Eric

Eric Firing wrote:

Andrew Hawryluk wrote:

The interpolation algorithm used in imshow() can produce spurious
results, as has been noted before:

_http://article.gmane.org/gmane.comp.python.matplotlib.general/12062_

This happens because the data is converted to RGB before the
interpolation/resampling, rather than after. How hard would it be to
reverse this so that the data array is first interpolated & resampled

and then converted by cmap to RGB?

To me, it looks very hard. The color mapping is done first, in

python, and not repeated with

every draw. The interpolation is done by agg at rendering time.

Logically, I don't know any

reason why agg shouldn't do what you suggest: interpolate the scalar

field and then convert

to rgb.
  Maybe agg can do it this way. If so, it would still take quite a

bit of work by someone

comfortable with agg (i.e., not me) to make the change.

Eric

Ah, that is certainly more difficult that what I would be prepared to
attempt, which is unfortunate because it would greatly improve the
output and reduce the interpolation's computation by a factor of three
(RGB).

Until someone feels up to the challenge, I will just add a manual
interpolation step when necessary for my data. e.g.:

import matplotlib.pyplot as p
import numpy as n
import scipy.ndimage
a = n.random.normal(size=(10,10))
p.imshow(a,interpolation='nearest') # the actual data
p.figure()
p.imshow(a,interpolation='bicubic') # an AGG interpolation of the RGB
values
b = scipy.ndimage.zoom(a,25)[:-24,:-24]
p.figure()
p.imshow(b) # the data interpolated at 25x magnification with a cubic
spline

Thanks for the information,
Andrew