{ "cells": [ { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "%gui qt" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n# Complex image data\n\nSimple use of SceneCanvas to display an image consisting of complex numbers.\n\nThe left and right arrow keys can be used to cycle the view between the real,\nimaginary, phase, or magnitude of the data.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": false }, "outputs": [], "source": [ "import sys\n\nimport numpy as np\nfrom vispy import app, scene\n\n\ndef complex_ramp(size=512, phase_range=(-np.pi, np.pi), mag_range=(0, 10)):\n \"\"\"Returns a complex array where X ramps phase and Y ramps magnitude.\"\"\"\n p0, p1 = phase_range\n phase_ramp = np.linspace(p0, p1 - 1 / size, size)\n m0, m1 = mag_range\n mag_ramp = np.linspace(m1, m0 + 1 / size, size)\n phase_ramp, mag_ramp = np.meshgrid(phase_ramp, mag_ramp)\n return (mag_ramp * np.exp(1j * phase_ramp)).astype(np.complex64)\n\n\ncanvas = scene.SceneCanvas(keys=\"interactive\",\n title=\"Complex number view: phase\")\ncanvas.size = 512, 512\ncanvas.show()\n\n# Set up a viewbox to display the image with interactive pan/zoom\nview = canvas.central_widget.add_view()\n\n# Create the image\nimg_data = complex_ramp()\n\n# View it with \"complex_mode=imaginary\"\nimage = scene.visuals.ComplexImage(img_data, parent=view.scene, complex_mode=\"phase\")\n\n# Set 2D camera (the camera will scale to the contents in the scene)\nview.camera = scene.PanZoomCamera(aspect=1)\nview.camera.set_range()\nview.camera.zoom(1)\n\n\ncomplex_modes = [\n \"real\",\n \"imaginary\",\n \"magnitude\",\n \"phase\",\n]\nmode_index = 3\n\n\n@canvas.connect\ndef on_key_press(event):\n global mode_index\n if event.key not in ['Left', 'Right']:\n return\n\n if event.key == 'Right':\n step = 1\n else:\n step = -1\n mode_index = (mode_index + step) % len(complex_modes)\n complex_mode = complex_modes[mode_index]\n image.complex_mode = complex_mode\n canvas.title = f'Complex number view: {complex_mode}'\n canvas.update()\n\n\nif __name__ == \"__main__\" and sys.flags.interactive == 0:\n app.run()" ] } ], "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.9.19" } }, "nbformat": 4, "nbformat_minor": 0 }