[AstroPy] Moving Ahead with Raw Image Conversion
Peter Erwin
erwin at mpe.mpg.de
Mon Apr 13 16:17:36 EDT 2009
Hi Wayne,
Pyfits will want a numpy array of integers (or floats). You can get a
numpy array of
either integer or floats with the numpy.array() function.
Here's a short example (sort-of based on your "make_image" function),
using integers:
import numpy, pyfits
# create a 2D integer array with 2 rows (a normal Python list-of-lists)
int_array = []
for j in range(2):
new_row = []
for k in range(5):
new_row.append(k + j*5)
int_array.append(new_row)
>>> print int_array
[[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]]
# make a numpy array version of that Python list-of-lists
int_array_numpy = numpy.array(int_array)
>>> print int_array_numpy
[[0 1 2 3 4]
[5 6 7 8 9]]
# save this numpy array as a FITS image (based on p.10 of the PyFits
1.0 Manual):
hdu = pyfits.PrimaryHDU(int_array_numpy)
# [ at this point you might optionally modify the header (e.g., add
date, lat and long, etc.) ... ]
# ... and save the data to file:
hdu.writeto("simple_array.fits")
Now, the problem is that what I've done is to create a Python array of
*integers*,
then converted it to numpy form. In your example code, you've created
a Python
array of hexadecimal-valued bytes -- which I guess is what you get
reading in your
"raw" image, so that's OK. But you still have to convert those
'\x01', etc., values
to Python integers. Since I basically never work with raw bytes or
hexadecimal
coding, I don't actually know how to do this... but I imagine other
people on the
list do.
cheers,
Peter
On Apr 13, 2009, at 6:38 PM, Wayne Watson wrote:
> Hi, not familiar with much of anything in numpy, then again, I'm not
> anxious to read through the 300+ page manual. :-)
> Well, let's see if I can explain this in py-talk. Here's a small
> program I wrote to get the raw image
>
> #import Image
> import string
>
> def make_array():
> im_array=[]
> im_data=range(10)
> print im_data
> for j in range(2):
> row=[]
> for k in range(5):
> item=hex(int(im_data[k+j*5]))
> row.append(item)
> im_array.append(row)
> print im_array
>
> raw_file=open('sent_internal.raw','rb')
> raw_image=raw_file.read()
> raw_file.close()
> print 'info:', len(raw_image), type(raw_image)
> make_array()
>
> make_array, instead of working on the 307200 byte(640x480) string
> representing the image, is used to see if I can generate a 2x5 array
> like that apparently needed to represent the image to pyfits. The
> above produces this:
> info: 307200 <type 'str'>
> [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <--- my fictional 2x5 image as a py
> list.
> [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]] <--- the type of structure I
> think numarray(numpy equivalent) wants.
>
> I'm looking at page 7 of the FITS manual, and I see in the middle,
> hdulist[1].data. This appears to be where the data(image) goes. At
> the top of page 10, the steps to construct a simple fits file are
> shown. numarray is used. Simply put, how do I proceed from here?
>
>
> I've attached the 'sent_internal.raw' file. It may cause this msg to
> be rejected by the mail list.
>
> Jim Vickroy wrote:
>> Wayne Watson wrote:
>>
>>> I've pretty much gotten my 640x480 1 byte, "raw" image under
>>> control within Python Image and Python file use. I wrote a file of
>>> 307200 bytes in bytes, byte representation of characters. I
>>> couldn't see anything within pyfits or numpy that would help me do
>>> that. Now I believe I'm in a position to use pyfits to create a
>>> fits format file. The next step is to arrange the image (data)
>>> into a 640x480 array. I can do that in python, but would like to
>>> know how it can be done in numpy, for the experience. The IDA
>>> tutorial talks to making arrays, but I do not see where they work
>>> with creating an array with fresh data. Once that's done, then I
>>> should be able to work out from a reading of page 10 in the pyfits
>>> manual.
>>>
>>>
>> Hello Wayne,
>>
>> Could you post a sample script illustrating exactly what you want
>> to do along with some sample output showing how it is failing to do
>> so?
>>
>> Are you familiar with the numpy.ndarray.reshape() procedure?
>>
>> -- jv
>> _______________________________________________
>> AstroPy mailing list
>> AstroPy at scipy.org
>> http://mail.scipy.org/mailman/listinfo/astropy
>>
>>
>
> --
> Wayne Watson (Watson Adventures, Prop., Nevada City, CA)
>
> (121.015 Deg. W, 39.262 Deg. N) GMT-8 hr std. time)
> Obz Site: 39° 15' 7" N, 121° 2' 32" W, 2700 feet
> All the neutrons, and protons in the human body
> occupy a cube whose side is 5.52*10**-6 meters (tiny!).
> That adds up to a 150 pound person. It's not a surprise that
> we are mostly space. (Calculation by WTW)
>
> <sent_internal.raw>_______________________________________________
> AstroPy mailing list
> AstroPy at scipy.org
> http://mail.scipy.org/mailman/listinfo/astropy
=============================================================
Peter Erwin Max-Planck-Insitute for Extraterrestrial
erwin at mpe.mpg.de Physics, Giessenbachstrasse
tel. +49 (0)89 30000 3695 85748 Garching, Germany
fax +49 (0)89 30000 3495 http://www.mpe.mpg.de/~erwin
More information about the AstroPy
mailing list