Spaces:
Running
Running
# Copyright 2017 The TensorFlow Authors All Rights Reserved. | |
# | |
# Licensed under the Apache License, Version 2.0 (the "License"); | |
# you may not use this file except in compliance with the License. | |
# You may obtain a copy of the License at | |
# | |
# http://www.apache.org/licenses/LICENSE-2.0 | |
# | |
# Unless required by applicable law or agreed to in writing, software | |
# distributed under the License is distributed on an "AS IS" BASIS, | |
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
# See the License for the specific language governing permissions and | |
# limitations under the License. | |
# ============================================================================== | |
"""Utility functions.""" | |
from __future__ import absolute_import | |
from __future__ import division | |
from __future__ import print_function | |
import StringIO | |
import matplotlib | |
matplotlib.use('Agg') | |
from matplotlib import pylab as p | |
# axes3d is being used implictly for visualization. | |
from mpl_toolkits.mplot3d import axes3d as p3 # pylint:disable=unused-import | |
import numpy as np | |
from PIL import Image | |
from skimage import measure | |
from six.moves import xrange | |
import tensorflow as tf | |
def save_image(inp_array, image_file): | |
"""Function that dumps the image to disk.""" | |
inp_array = np.clip(inp_array, 0, 255).astype(np.uint8) | |
image = Image.fromarray(inp_array) | |
buf = StringIO.StringIO() | |
image.save(buf, format='JPEG') | |
with open(image_file, 'w') as f: | |
f.write(buf.getvalue()) | |
return None | |
def image_flipud(images): | |
"""Function that flip (up-down) the np image.""" | |
quantity = images.get_shape().as_list()[0] | |
image_list = [] | |
for k in xrange(quantity): | |
image_list.append(tf.image.flip_up_down(images[k, :, :, :])) | |
outputs = tf.stack(image_list) | |
return outputs | |
def resize_image(inp_array, new_height, new_width): | |
"""Function that resize the np image.""" | |
inp_array = np.clip(inp_array, 0, 255).astype(np.uint8) | |
image = Image.fromarray(inp_array) | |
# Reverse order | |
image = image.resize((new_width, new_height)) | |
return np.array(image) | |
def display_voxel(points, vis_size=128): | |
"""Function to display 3D voxel.""" | |
try: | |
data = visualize_voxel_spectral(points, vis_size) | |
except ValueError: | |
data = visualize_voxel_scatter(points, vis_size) | |
return data | |
def visualize_voxel_spectral(points, vis_size=128): | |
"""Function to visualize voxel (spectral).""" | |
points = np.rint(points) | |
points = np.swapaxes(points, 0, 2) | |
fig = p.figure(figsize=(1, 1), dpi=vis_size) | |
verts, faces = measure.marching_cubes_classic(points, 0, spacing=(0.1, 0.1, 0.1)) | |
ax = fig.add_subplot(111, projection='3d') | |
ax.plot_trisurf( | |
verts[:, 0], verts[:, 1], faces, verts[:, 2], cmap='Spectral_r', lw=0.1) | |
ax.set_axis_off() | |
fig.tight_layout(pad=0) | |
fig.canvas.draw() | |
data = np.fromstring( | |
fig.canvas.tostring_rgb(), dtype=np.uint8, sep='').reshape( | |
vis_size, vis_size, 3) | |
p.close('all') | |
return data | |
def visualize_voxel_scatter(points, vis_size=128): | |
"""Function to visualize voxel (scatter).""" | |
points = np.rint(points) | |
points = np.swapaxes(points, 0, 2) | |
fig = p.figure(figsize=(1, 1), dpi=vis_size) | |
ax = fig.add_subplot(111, projection='3d') | |
x = [] | |
y = [] | |
z = [] | |
(x_dimension, y_dimension, z_dimension) = points.shape | |
for i in range(x_dimension): | |
for j in range(y_dimension): | |
for k in range(z_dimension): | |
if points[i, j, k]: | |
x.append(i) | |
y.append(j) | |
z.append(k) | |
ax.scatter3D(x, y, z) | |
ax.set_axis_off() | |
fig.tight_layout(pad=0) | |
fig.canvas.draw() | |
data = np.fromstring( | |
fig.canvas.tostring_rgb(), dtype=np.uint8, sep='').reshape( | |
vis_size, vis_size, 3) | |
p.close('all') | |
return data | |