{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# 3D Transforms\n", "\n", "In this example we demonstrate 3D WarpAffine and Rotate.\n", "\n", "## Warp operators\n", "All warp operators work by caclulating the output pixels by sampling the source image at transformed coordinates:\n", "\n", "$${Out}(x, y, z) = {In}(x_{src}, y_{src}, z_{src})$$\n", "\n", "This way each output pixel is calculated exactly once.\n", "\n", "If the source coordinates do not point exactly to pixel centers, the values of neighboring pixels will be interpolated or the nearest pixel is taken, depending on the interpolation method specified in the `interp_type` argument.\n", "\n", "### Affine transform\n", "\n", "The source sample coordinates $x_{src}, y_{src}, z_{src}$ are calculated according to the formula:\n", "\n", "$$\n", "\\begin{vmatrix}\n", "x_{src} \\\\\n", "y_{src} \\\\\n", "z_{src}\n", "\\end{vmatrix}\n", "= \\begin{vmatrix}\n", "m_{00} & m_{01} & m_{02} & t_x \\\\\n", "m_{10} & m_{11} & m_{12} & t_y \\\\\n", "m_{20} & m_{21} & m_{22} & t_z\n", "\\end{vmatrix}\n", "\\begin{vmatrix}\n", "{x} \\\\\n", "{y} \\\\\n", "{z} \\\\\n", "1\n", "\\end{vmatrix}\n", "$$\n", "\n", "Where $x, y$ are coordinates of the destination pixel and the matrix represents the inverse (destination to source) affine transform. The \n", "$\\begin{vmatrix}\n", "m_{00} & m_{01} & m_{02} \\\\\n", "m_{10} & m_{11} & m_{12} \\\\\n", "m_{20} & m_{21} & m_{22}\n", "\\end{vmatrix}$ block represents a combined rotate/scale/shear transform and $t_x, t_y, t_z$ is a translation vector.\n", "\n", "### 3D Rotation\n", "\n", "Rotate operator is implemented in terms of affine transform, but calculates the transform matrix internally. The output size is automatically adjusted and the size parity is adjusted to reduce blur near the volume centre. The rotation is defined by specifying axis (as a vector) and angle (in degrees).\n", "\n", "The rotation matrix (source-to-destination) is calculated as:\n", "\n", "$$\n", "\\begin{vmatrix}\n", "u^2 + (v^2 + w^2) \\cdot \\cos \\alpha &\n", "uv\\cdot(1-\\cos \\alpha) - w\\cdot \\sin \\alpha &\n", "uw\\cdot(1-\\cos \\alpha) + v\\cdot \\sin \\alpha \\\\\n", "uv\\cdot(1-\\cos \\alpha) - w\\cdot \\sin \\alpha &\n", "v^2 + (u^2 + w^2) \\cdot \\cos \\alpha &\n", "vw\\cdot(1-\\cos \\alpha) - u\\cdot \\sin \\alpha \\\\\n", "uw\\cdot(1-\\cos \\alpha) - v\\cdot \\sin \\alpha &\n", "vw\\cdot(1-\\cos \\alpha + u\\cdot \\sin \\alpha &\n", "w^2 + (u^2 + w^2) \\cdot \\cos \\alpha\n", "\\end{vmatrix}\n", "$$\n", "\n", "where $u, v, w$ is normalized `axis` vector and $\\alpha$ is `angle` converted from degrees to radians.\n", "\n", "Note that internally, the inverse matrix is used to achieve destination-to-source mapping, which is how the operation is actually implemented." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Usage example\n", "\n", "First, let's import the necessary modules." ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "from nvidia.dali.pipeline import Pipeline\n", "import nvidia.dali.ops as ops\n", "import nvidia.dali.types as types\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import math\n", "import os.path" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Let's define some volumetric test data. To make the data easy to interpret visually, the volume is mostly empty, with only the voxels lying at a cube's edges set to a color changing along Z axis from green to violet." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "nvidia_green = [0x76,0xb9,0x00]\n", "violet = [0xff - 0x76, 0xff - 0xb9, 0xff]\n", "\n", "def lerp(a, b, w):\n", " return a*(1-w)+b*w\n", "\n", "def build_cube(output_shape, size, color_front = nvidia_green, color_back = violet):\n", " color_front = np.array(color_front)\n", " color_back = np.array(color_back)\n", " arr = np.zeros(output_shape + [3], np.uint8)\n", " lo = (np.array(output_shape) - np.array(size)) * 0.5\n", " hi = (np.array(output_shape) + np.array(size)) * 0.5\n", " dims = len(output_shape)\n", " for d in range(dims):\n", " for c in range(int(np.rint(lo[d])), int(np.rint(hi[d]))):\n", " d0 = 0\n", " d1 = 1\n", " if d == 0:\n", " d0 = 1\n", " d1 = 2\n", " elif d == 1:\n", " d0 = 0\n", " d1 = 2\n", " p = [int(x) for x in lo]\n", " def color():\n", " return lerp(color_front, color_back, (p[0]-lo[0])/(hi[0]-lo[0]))\n", "\n", " p[d] = c\n", " arr[p[0], p[1], p[2], :] = color()\n", " p[d0] = int(np.rint(hi[d0]))\n", " arr[p[0], p[1], p[2], :] = color()\n", " p[d1] = int(np.rint(hi[d1]))\n", " arr[p[0], p[1], p[2], :] = color()\n", " p[d0] = int(np.rint(lo[d0]))\n", " arr[p[0], p[1], p[2], :] = color()\n", " return arr" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now, let's define the pipeline. The transform parameters are hard-coded, but axis, angle and matrix arguments can be specified as CPU tensors. The warp matrices can alternatively be passed as a regular input to the WarpAffine operator, in which case they can be passed as a GPU tensor.\n", "See Warp example for exact usage." ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "class ExamplePipeline(Pipeline):\n", " def __init__(self, batch_size, num_threads, device_id, pipelined = True, exec_async = True):\n", " super(ExamplePipeline, self).__init__(\n", " batch_size, num_threads, device_id,\n", " seed = 12, exec_pipelined=pipelined, exec_async=exec_async)\n", " \n", " self.input = ops.ExternalSource()\n", " \n", " self.rotate_gpu = ops.Rotate(\n", " device = \"gpu\",\n", " angle = 30,\n", " interp_type = types.INTERP_LINEAR\n", " )\n", " self.rotate_cpu = ops.Rotate(\n", " device = \"cpu\",\n", " axis = (0.5,1,1),\n", " angle = 30,\n", " interp_type = types.INTERP_LINEAR\n", " )\n", " self.warp_gpu = ops.WarpAffine(\n", " device = \"gpu\",\n", " size = (256, 256, 400),\n", " matrix = (\n", " 1, 1, 0, -200,\n", " 0, 1, 0.2, -20,\n", " 0, 0, 1, 10\n", " ),\n", " interp_type = types.INTERP_LINEAR\n", " )\n", " \n", " # Then, we can tie the operators together to form a graph\n", " \n", " def define_graph(self):\n", " self.data = self.input()\n", " outputs = [self.data.gpu()]\n", " # pass axis as a tensor argument\n", " axis = types.Constant([0.5,1,1])\n", " # pass the transform parameters through GPU memory\n", " outputs += [self.rotate_gpu(self.data.gpu(), axis = axis),\n", " self.rotate_cpu(self.data).gpu(), # axis for this rotation is defined in __init__\n", " self.warp_gpu(self.data.gpu())]\n", "\n", " return outputs\n", " \n", " # Since we're using ExternalSource, we need to feed the externally provided data to the pipeline\n", " \n", " def iter_setup(self):\n", " # Generate the transforms for the batch and feed them to the ExternalSource\n", " self.feed_input(self.data, [build_cube([128,128,128],[80,80,80]), build_cube([160,160,160],[80,120,80])]) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The pipeline class is now ready to use - we need to construct and build it before we run it." ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "scrolled": false }, "outputs": [], "source": [ "batch_size = 2\n", "pipe = ExamplePipeline(batch_size=batch_size, num_threads=2, device_id = 0)\n", "pipe.build()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Finally, we can call `run` on our pipeline to obtain the first batch of preprocessed images." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "pipe_out = pipe.run()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Example output\n", "\n", "Now that we've processed the first batch of images, let's see the results. The output is projected by taking maximum intensity values along projection direction.\n", "\n", "We use a perspective projection and the projected volume is displayed in left-handed coordinates, with X axis pointing right, Y axis pointing up and Z axis pointing away from the viewer." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "image/png": "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h2/4/NeBXzHGfNQ4jxhjHrrh+/+hMeakMWYG+E+A3xl9/QXgKWPMs6OmN796k8f6Ydz6TBERERGRu6awKA80a+1rwN8A/idgA/hJXEObaHST/xr4T0edUn8F+Ce4cs5rwPeA5953yH8IPDm6/WestSnwE8CzwIXRY/w6bkYS4O+OjncB+CPgN24z5H8A/NxoBhRr7adxZbG/hVtj+Blg5obb/9bouG/hylX/3uh+rwP/OfB54A3g/Z1Rl4AnR8cTEREREblrZp+3exOR9zHG/BbwT621uwY5Y8xF4G9aaz9/D4/x94Hz1tpfu7dRioiIiMhRp7AockCNExZFRERERMalMlQRERERERHZQTOLIiIiIiIisoNmFkVERERERGQHhUURERERERHZwd/tm8YY1aiKiMiesdaaSY9BRERE7oxmFkVERERERGQHhUURERERERHZQWFRREREREREdlBYFBERERERkR0UFkVERERERGQHhUURERERERHZQWFRREREREREdlBYFBERERERkR0UFkVERERERGQHhUURERERERHZQWFRREREREREdlBYFBERERERkR0UFkVERERERGQHhUURERERERHZQWFRREREREREdlBYFBERERERkR0UFkVERERERGQHhUURERERERHZQWFRREREREREdlBYFBERERERkR0UFkVERERERGQHhUURERERERHZQWFRREREREREdlBYFBERERERkR0UFkVERERERGQHhUURERERERHZQWFRREREREREdlBYFBERERERkR0UFkVERERERGQHhUURERERERHZQWFRREREREREdlBYFBERERERkR0UFkVERERERGQHhUURERERERHZQWFRREREREREdlBYFBERERERkR0UFkVERETkgWGcf2yM2TbGfGP0tV8yxqwaY7rGmNnRfx/ep8f/RWPMf78fx37f43zIGPPn+/04Irsx1tpbf9OYW39TRETkLllrzaTHICIPNmPMp4DfBh631vaMMQHQBj5hrX1hnx87D5wfPda1/Xys0eN9DvhfrbW/v9+PJXIzmlkUERERkX1jjPH3+JAPARettb3R54tAEXh5jx/nZn4KePV+BMWR/wv4xfv0WCI7KCyKiIiICMaYf8cY8/s3fP6GMebTN3x+xRjz7Ojj/2H0edsY863RbN/bt/tVY8zvGmN+0xjTBv7tG772O8aYjjHmeWPMM7uM5abHN8b8AvDrwCdHpaa/Dbw2ulvTGPPF0e2sMeaR0cf/hzHmfzHGfHb02F83xpy74bGeMMb8sTFmyxjzmjHmX9/lZfqXgS+9b6z/ljHmkjFm0xjznxljLhpjfux9r8VNn/eN47xhrH/vhsP/KfCXjTGFXcYksm8UFkVEREQEXAj6lDHGM8YcB/LAJwFG6/+qwIuj234TeBaYAX4L+LQxpnjDsX4K+F1gCjc79vbXPn3DfT4zKiG9mZse31r7D4H/APiatbZqrf1Z4KnRfaastf/CLY73M8DfBaaBN4H/cvS8KsAfjx5jYXS7XzPGPHmL43yQd8Mpo9v9GvBzwBLQAE687z5387zfYzSDGQOP38ntRfaawqKIiIiIYK19C+jgQtpfAv4QWDbGPAH8MPBla202uu1vWms3rbWJtfbvAwXeG2i+Zq39jLU2s9YORl/7lrX2d621MfDf4UpHP3GLsdzu+Hfrn1lrv2GtTXDh9dnR138CV9L6j0eP9W3g/wH+tVscZwr3Gr3trwO/b639irU2Av4O8P6eH3f8vG+hM3pckftur2vIRUREROTB9SXgR4BHRh83cUHxk9xQfmmM+RXgF4DjuHBUB+ZuOM6Vmxz7na9ZazNjzNXR/Xe4g+PfrZUbPu7jZknBrX/8uDGmecP3feA3bnGcbaB2w+fHee/z6htjNt93nzt+3rdQw/0cRO47hUUREREReduXgJ8EzgL/FS6k/BwuLP7P8E430v8I+MvAy6MAtA3c2O34Zh31T739gTHGA04Cy++/0R0ef69cAb5krf0X7/D2LwKP3fD5dW6Y8TTGlIDZ991nt+fdB8o33PYYcPWG25/AlQO/hsgEqAxVRERERN72JeBHgZK19irwZeCv4gLQt0e3qQEJsA74xpi/g5v5u52PGmP+2qg76t8GQuC5m9zuXo9/L/4AeMwY8/PGmGD07/uMMR+4xe0/h5tpfdvvAj9pjPmB0bYav8rOULvb8/4O8G8aY3LGmL/6vmMz+vyL1trwnp+hyBgUFkVEREQEAGvt60AXFxKx1raBt4CvWmvT0c3+EPjnwOvAJWDIzctO3+/3gH8DV8r588BfG63je797Pf5ds9Z2gH8J19hmGVeu+t/g1kjezO8DT4waAGGtfRn4ZeD/xs0ydoE1XCB8227P+2/hZnLfnsH9zPse7+eA/+3en6HIeIy1N6sSGH3TmFt/U0RE5C5Za/ejjExEDjhjzK8Cj1hr/8akxzIuY8y/Dzxprf3bN/leFRf8HrXWXhjneRtjPgT879baT447ZpF7pTWLIiIiIiJ3yFr7D2783Bjzk8AXcOWn/y3wEnBxDx7nRUZbl4hMispQRURERETu3U/hSliXgUeBn7G7le6JPEBUhioiIveNylBFREQeHJpZFBERERERkR20ZlFEROQBoqofERHZS7tV/WhmUURERERERHZQWBQREREREZEdFBZFRERERERkB4VFERERERER2UFhUURERERERHZQWBQREREREZEdFBZFRERERERkB4VFERERERER2UFhUURERERERHZQWBQREREREZEdFBZFRERERERkB4VFERERERER2UFhUURERERERHZQWBQREREREZEdFBZFRERERERkB4VFERERERER2UFhUURERERERHZQWBQREREREZEdFBZFRERERERkB4VFERERERER2UFhUURERERERHZQWBQREREREZEdFBZFRERERERkB4VFERERERER2UFhUURERERERHZQWBQREREREZEdFBZFRERERERkB4VFERERERER2UFhUURERERERHZQWBQREREREZEdFBZFRERERERkB4VFERERERER2UFhUURERERERHZQWBQREREREZEd/EkPQOTQMOB54OchTSBLwWaTHpSIiIiIyL1RWBQZkzGQC8AvQFCEUgOiHgw6EPUVGEVERETkwaSwKHKvRjOJuQBKdShUoVCBcgPigcFbswCEPcBOdqgiIiIiInfLWHvrd7HGGL3FFbkZ48pNCxWoTMPSB1xIxEJvyzB13NBeNWwvw/KrKfEQBUYRwFprJj2GB53OzSIispd2OzdrZlHkThnwcuAH0FiC2VOQL7sy0/42rJ+HOATftzSWDAZDPvBYOuexdiklGmRkyaSfhIiIiIjInVFYFLkDng/FmptJLFbdbKKfhySE3jZ0N90axSyFfAm6m5ZB25LElkI5R7UBPQvDXsYuk/kiIiIiIgeGwqLILowHOd/NIE4vQXkKinUgg0EXeluwfRWG3dHtc26msb1iSaKMLDEEgaE+F2CMwdqUcJCq6Y2IiIiIHHgKiyK34Pmus2ltDhYehqklGHZg/SJcewXiAdj0vfexGcRDiIZQn7dg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PgqLIiIiIiIi0kdhUURERERERPooLIqIiIiIiEgfhUURERERERHpo7AoIiIiIiIifRQWRUREREREpI/CooiIiIiIiPRRWBQREREREZE+CosiIiIiIiLSR2FRRERERERE+igsioiIiIiISB+FRREREREREemjsCgiIiIiIiJ9FBZFRERERESkj8KiiIiIiIiI9FFYFBERERERkT4KiyIiIiIiItJHYVFERERERET6KCyKiIiIiIhIH4VFERERERER6aOwKCIiIiIiIn0UFkVERERERKSPwqKIiIiIiIj0UVgUERERERGRPgqLIiIiIiIi0kdhUURERERERPooLIqIiIiIiEgfhUURERERERHpo7AoIiIiIiIifRQWRUREREREpI/CooiIiIiIiPRRWBQREREREZE+CosiIiIiIiLSR2FRRERERERE+igsioiIiIiISB+FRREREREREemjsCgiIiIiIiJ9FBZFRERERESkj8KiiIiIiIiI9FFYFBERERERkT4KiyIiIiIiItJHYVFERERERET6KCyKiIiIiIhIH4VFERERERER6aOwKCIiIiIiIn0UFkVERERERKSPwqKIiIiIiIj0UVgUERERERGRPgqLIiIiIiIi0kdhUURERERERPo4xphBP4OIiIiIiIgMGZ0sioiIiIiISB+FRREREREREemjsCgiIiIiIiJ9FBZFRERERESkj8KiiIiIiIiI9FFYFBERERERkT7/P3n+LEaijvJDAAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "n = 1 # change this value to see other images from the batch;\n", " # it must be in 0..batch_size-1 range\n", " \n", "import cv2\n", " \n", "def centered_scale(in_size, out_size, scale):\n", " tx = (in_size[1]-out_size[1]/scale)/2\n", " ty = (in_size[0]-out_size[0]/scale)/2\n", " return np.array([[1/scale, 0, tx],\n", " [0, 1/scale, ty]])\n", "\n", "def project_volume(volume, out_size, eye_z, fovx = 90, zstep = 0.25):\n", " output = np.zeros(out_size + [volume.shape[-1]])\n", " in_size = volume.shape[1:3]\n", " fovx_z = math.tan(math.radians(fovx/2)) * volume.shape[2] / out_size[1]\n", "\n", " def project_slice(volume, plane_z):\n", " plane_index = int(plane_z)\n", " volume_slice = volume[plane_index]\n", " scale = volume_slice.shape[1] / fov_w\n", " M = centered_scale(in_size, out_size, scale)\n", " return cv2.warpAffine(volume_slice, M,\n", " dsize = (out_size[1], out_size[0]),\n", " flags = cv2.WARP_INVERSE_MAP+cv2.INTER_LINEAR)\n", "\n", " for plane_z in np.arange(0, volume.shape[0], zstep):\n", " z = plane_z - eye_z\n", " fov_w = z * fovx_z\n", " z0 = np.clip(math.floor(plane_z), 0, volume.shape[0]-1)\n", " z1 = np.clip(math.ceil(plane_z), 0, volume.shape[0]-1)\n", " projected_slice = project_slice(volume, z0)\n", " # trilinear interpolation\n", " if z1 != z0:\n", " slice1 = project_slice(volume, z1)\n", " q = (plane_z - np.floor(plane_z))\n", " projected_slice = (projected_slice * (1-q) + slice1*q).astype(np.uint8)\n", "\n", " np.maximum(output, projected_slice, out = output)\n", "\n", " return output\n", "\n", "\n", "import matplotlib.gridspec as gridspec\n", "\n", "len_outputs = len(pipe_out)\n", "\n", "captions = [\"original\",\n", " \"rotated (gpu)\", \"rotated (cpu)\", \"warp affine (gpu)\"]\n", "\n", "fig = plt.figure(figsize = (16,18))\n", "plt.suptitle(\"3D transforms\", fontsize=16)\n", "columns = 2\n", "rows = int(math.ceil(len_outputs / columns))\n", "gs = gridspec.GridSpec(rows, columns)\n", "\n", "for i in range(len_outputs):\n", " plt.subplot(gs[i])\n", " plt.axis(\"off\")\n", " plt.title(captions[i])\n", " pipe_out_cpu = pipe_out[i].as_cpu()\n", " volume = pipe_out_cpu.at(n)\n", " window_size = 300\n", " (h, w) = volume.shape[1:3]\n", " if h > w:\n", " w = window_size * w // h\n", " h = window_size\n", " else:\n", " h = window_size * h // w\n", " w = window_size\n", " img = project_volume(volume, [h,w], -volume.shape[2]) * (1 / 255.0)\n", " \n", " # Display in left-handed coordinates:\n", " # X axis points right\n", " # Y axis points up\n", " # Z axis points away\n", " plt.imshow(img, origin='lower')" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.9" } }, "nbformat": 4, "nbformat_minor": 2 }