[Yt-svn] yt-commit r1735 - in trunk/yt/extensions: . volume_rendering
mturk at wrangler.dreamhost.com
mturk at wrangler.dreamhost.com
Thu May 27 09:28:32 PDT 2010
Author: mturk
Date: Thu May 27 09:28:30 2010
New Revision: 1735
URL: http://yt.enzotools.org/changeset/1735
Log:
Updating docstrings for image_handling module, adding write_bitmap function to
image_writer module
Modified:
trunk/yt/extensions/image_writer.py
trunk/yt/extensions/volume_rendering/image_handling.py
Modified: trunk/yt/extensions/image_writer.py
==============================================================================
--- trunk/yt/extensions/image_writer.py (original)
+++ trunk/yt/extensions/image_writer.py Thu May 27 09:28:30 2010
@@ -60,6 +60,32 @@
image = image.transpose().copy() # Have to make sure it's contiguous
au.write_png(image, fn)
+def write_bitmap(bitmap_array, filename, max_val = None):
+ """
+ This accepts a three- or four-channel *bitmap_array*. If the image is not
+ already uint8, it will be scaled and converted. If it is not four channel,
+ a fourth alpha channel will be added and set to fully opaque. The
+ resultant image will be directly written to *filename* as a PNG with no
+ colormap applied. *max_val* is a value used if the array is passed in as
+ anything other than uint8; it will be the value used for scaling and
+ clipping when the array is converted.
+
+ Additionally, the minimum is assumed to be zero; this makes it primarily
+ suited for the results of volume rendered images, rather than misaligned
+ projections.
+ """
+ if bitmap_array.dtype != na.uint8:
+ if max_val is None: max_val = bitmap_array.max()
+ bitmap_array = na.clip(bitmap_array / max_val, 0.0, 1.0) * 255
+ bitmap_array = bitmap_array.astype("uint8")
+ if len(bitmap_array.shape) != 3 or bitmap_array.shape[-1] not in (3,4):
+ raise RuntimeError
+ if bitmap_array.shape[-1] == 3:
+ s1, s2 = bitmap_array.shape[:2]
+ alpha_channel = 255*na.ones((s1,s2,1), dtype='uint8')
+ bitmap_array = na.concatenate([bitmap_array, alpha_channel], axis=-1)
+ au.write_png(bitmap_array.copy(), filename)
+
def write_image(image, filename, color_bounds = None, cmap_name = "algae"):
if color_bounds is None:
mi = na.nanmin(image[~na.isinf(image)])
Modified: trunk/yt/extensions/volume_rendering/image_handling.py
==============================================================================
--- trunk/yt/extensions/volume_rendering/image_handling.py (original)
+++ trunk/yt/extensions/volume_rendering/image_handling.py Thu May 27 09:28:30 2010
@@ -30,19 +30,12 @@
try: import pyfits
except: pass
-'''
-export_rgba:
-args:
-image - rgba numpy array of dimension NxNx4
-fn - file basename for exported files
-
-kwargs:
-h5 [True]: Use hdf5 to export the rgba channels, creates fn.h5 file.
-fits [False]: Export to fits format (requires pyfits), creates fn_[r,g,b,a].fits files
-
-output: None
-'''
def export_rgba(image, fn, h5=True, fits=False, ):
+ """
+ This function accepts an *image*, of shape (N,M,4) corresponding to r,g,b,a,
+ and saves to *fn*. If *h5* is True, then it will save in hdf5 format. If
+ *fits* is True, it will save in fits format.
+ """
if h5:
f = h5py.File('%s.h5'%fn, "w")
f.create_dataset("R", data=image[:,:,0])
@@ -66,18 +59,12 @@
hdulist.writeto('%s_a.fits'%fn,clobber=True)
except: print 'You do not have pyfits, install before attempting to use fits exporter'
-'''
-import_rgba:
-args:
-name of hdf5 file containing R,G,B,A arrays
-
-kwargs:
-h5 [True]: Use hdf5 to input the rgba channels.
-
-returns:
-a Numpy array of shape NxNx4
-'''
def import_rgba(name, h5=True):
+ """
+ This function will read back in an HDF5 file, as saved by export_rgba, and
+ return the frames to the user. *name* is the name of the file to be read
+ in.
+ """
if h5:
f = h5py.File(name, "r")
r = f['R'].value
@@ -88,29 +75,18 @@
print 'No support for fits import.'
return na.array([r,g,b,a]).swapaxes(0,2).swapaxes(0,1)
-'''
-plot_channel:
-args:
-image - single channel of an image, of shape NxN
-name - prefix for image output
-
-kwargs:
-cmap ['gist_stern'] - name of colormap to use
-log [True] - use a log scale
-dex [3] - Scale the image between image.max()/10**dex and image.max()
-zero_factor [1.0e-10] - Set all zero values to zero_factor
-label [None] - Label in upper left corner of image
-label_color ['w'] - Color of label
-label_size ['large'] - Size of label
-
-returns:
-None
-
-output:
-name_cmap.png
-'''
def plot_channel(image, name, cmap='gist_heat', log=True, dex=3, zero_factor=1.0e-10,
label=None, label_color='w', label_size='large'):
+ """
+ This function will plot a single channel. *image* is an array shaped like
+ (N,M), *name* is the pefix for the output filename. *cmap* is the name of
+ the colormap to apply, *log* is whether or not the channel should be
+ logged. Additionally, you may optionally specify the minimum-value cutoff
+ for scaling as *dex*, which is taken with respect to the minimum value of
+ the image. *zero_factor* applies a minimum value to all zero-valued
+ elements. Optionally, *label*, *label_color* and *label_size* may be
+ specified.
+ """
Nvec = image.shape[0]
image[na.isnan(image)] = 0.0
ma = image[image>0.0].max()
@@ -132,24 +108,13 @@
pylab.savefig("%s_%s.png" % (name,cmap))
pylab.clf()
-'''
-plot_rgb:
-args:
-image - rgb channels of an image, of shape NxNx3 or NxNx4. Values must be normalized from 0.0-1.0
-name - prefix for image output
-
-kwargs:
-label [None] - Label in upper left corner of image
-label_color ['w'] - Color of label
-label_size ['large'] - Size of label
-
-returns:
-None
-
-output:
-name_rgb.png
-'''
def plot_rgb(image, name, label=None, label_color='w', label_size='large'):
+ """
+ This will plot the r,g,b channels of an *image* of shape (N,M,3) or
+ (N,M,4). *name* is the prefix of the file name, which will be supplemented
+ with "_rgb.png." *label*, *label_color* and *label_size* may also be
+ specified.
+ """
Nvec = image.shape[0]
image[na.isnan(image)] = 0.0
if image.shape[2] >= 4:
More information about the yt-svn
mailing list