# Problem showing images

I am quite new to SAGE so I am probably asking something silly but some days of google search did not provide a simple answer to my question. Using instructions from this website I created a small sage program:

from numpy import *
import scipy.ndimage
import matplotlib.image
import matplotlib.pyplot
print 'Image dtype: %s'%(img.dtype)
print 'Image size: %6d'%(img.size)
print 'Image shape: %3dx%3d'%(img.shape,img.shape)
print 'Max value %1.2f at pixel %6d'%(img.max(),img.argmax())
print 'Min value %1.2f at pixel %6d'%(img.min(),img.argmin())
print 'Variance: %1.5f\nStandard deviation: %1.5f'%(img.var(),img.std())


where dummy.png is an existing PNG image that I loaded into the worksheet. The script works perfectly and I get the required info out of it:

Image dtype: float32
Image size: 17335905
Image shape: 2305x2507
Max value 1.00 at pixel   1767
Min value 0.00 at pixel 2032962
Variance: 0.06310
Standard deviation: 0.25120


now if I want to actually see the picture everything fails. I tried to type:

img
show(img)
img.show
img.show()


My final goal was to overlay the image, a photo, with the plot resulting from an analysis to show the accuracy of the prediction. Does anyone know how to do that?

thanks, mcirri

edit retag close merge delete

Sort by » oldest newest most voted

In fact, img is a numpy array containing (r,g,b) values. In Sage, you can plot it with

sage: matrix_plot(img, origin='lower')


Colors may be inverted (is 1.0 white or black?), you can try

sage: matrix_plot(1.0-img, origin='lower')


to flip it around.

more

Considering how often I use matrix_plot, I should have tried this... but I got stuck in mpl mode, which I don't really get that well :)

img isn't a graphic, as the blog post indicates.

sage: type(img)
<type 'numpy.ndarray'>


The "right" thing to do is use imshow like here, but I can never figure out how to actually get it to show up in the notebook. But this might give you enough hints if you've used mpl in the past.

more This post is a wiki. Anyone with karma >750 is welcome to improve it.

You can do

import Image
img = Image.open(DATA+"filename") # if you load the image from disk
img = Image.fromarray(imgarray) # if the image is numpy array

img.save("test.png")


It will show up in the notebook. But it will also save a copy of the image to your disk. If I find out how to write the image to /dev/null, then maybe I could avoid writing to disk.

more