[AstroPy] Moving Ahead with Raw Image Conversion

Jim Vickroy Jim.Vickroy@noaa....
Mon Apr 13 15:58:33 CDT 2009


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.

OK, here is a sample interactive session showing some features of numpy:

 >>> import numpy
 >>> numpy.__version__
'1.2.1'
 >>> data = numpy.arange(16, dtype=int) # use dtype=float, etc. as desired
 >>> data
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])
 >>> bytes = data.tostring() # equivalent of your raw data
 >>> bytes
'\x00\x00\x00\x00\x01\x00\x00\x00\x02\x00\x00\x00\x03\x00\x00\x00\x04\x00\x00\x00\x05\x00\x00\x00\x06\x00\x00\x00\x07\x00\x00\x00\x08\x00\x00\x00\t\x00\x00\x00\n\x00\x00\x00\x0b\x00\x00\x00\x0c\x00\x00\x00\r\x00\x00\x00\x0e\x00\x00\x00\x0f\x00\x00\x00'
 >>> image = numpy.frombuffer(bytes, dtype=int) # dtype must be same as 
*data* above
 >>> image
array([ 0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13, 14, 15])
 >>> image = image.reshape((4,4))
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11],
       [12, 13, 14, 15]])
 >>> image

HTH,
-- jv



>
> 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@scipy.org
>> http://mail.scipy.org/mailman/listinfo/astropy
>>
>>   
>



More information about the AstroPy mailing list