{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ " **Chapter 1: [Introduction](CH1_00-Introduction.ipynb)** \n", "\n", "\n", "
\n", "\n", "# Matplotlib and Numpy for Micrographs\n", "\n", " Image-Data Representations in the Computer for Microscopists\n", "\n", "[Download](https://raw.githubusercontent.com/gduscher/MSE672-Introduction-to-TEM//main/Introduction/CH1_03-Data_Representation.ipynb)\n", "\n", "[![OpenInColab](https://colab.research.google.com/assets/colab-badge.svg)](\n", " https://colab.research.google.com/github/gduscher/MSE672-Introduction-to-TEM/blob/main/Introduction/CH1_03-Data_Representation.ipynb)\n", " \n", "part of\n", "\n", " **[MSE672: Introduction to Transmission Electron Microscopy](../_MSE672_Intro_TEM.ipynb)**\n", "\n", "**Spring 2024**\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Gerd Duscher Khalid Hattar
Microscopy Facilities Tennessee Ion Beam Materials Laboratory
Materials Science & Engineering Nuclear Engineering
Institute of Advanced Materials & Manufacturing
The University of Tennessee, Knoxville
\n", "\n", "Background and methods to analysis and quantification of data acquired with transmission electron microscopes.\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "***\n", "\n", "## Topic \n", "\n", "All notebooks of this notebook series rely on two core python-packages: [numpy](https://numpy.org/) and [matplotlib](https://matplotlib.org/)\n", "\n", "However, ``numpy`` and ``matplot`` are a bit confusing of how they are dealing with images from microscopes.\n", "\n", "The reason for these problems is that matplotlib is an image **and** a line plotting routine, and those routines are using different conventions of the plotting axis.\n", "\n", "The behaviour of these two packages will be explored in this notebook, and the differences of between [numpy](https://numpy.org/) and [matplotlib](https://matplotlib.org/) have direct impact on how we deal with data, how we store them, and how easily we can use other packages for data analysis.\n", "\n", "***\n", "\n", "There is only one command necessary to load the functionality of both packages (numpy and matplotlib) which is done in the code cell below. Every notebook in this series will start with that line." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import sys\n", "if 'google.colab' in sys.modules:\n", " !pip install ipympl -q\n", " from google.colab import output\n", " output.enable_custom_widget_manager()\n", "\n", "%matplotlib widget\n", "import matplotlib.pylab as plt\n", "import numpy as np" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## The Problem\n", "\n", "An image is stored as a matrix where each element of the matrix is the intensity level of the pixel.\n", "\n", "An empty image can easily be made with numpy (``np.zeros`` function)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[0. 1. 0. 1.]\n", " [1. 0. 1. 0.]\n", " [0. 1. 0. 1.]\n", " [1. 0. 1. 0.]\n", " [0. 1. 0. 1.]\n", " [1. 0. 1. 0.]\n", " [0. 1. 0. 1.]\n", " [1. 0. 1. 0.]]\n" ] } ], "source": [ "image = np.zeros((8,4))\n", "\n", "#make checkerboard (you can ignore how this is done exactly, the result is important)\n", "image[::2, 1::2] = 1\n", "image[1::2, ::2] = 1\n", "print(image)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Looks ok.\n", "\n", "Let's plot this boring image." ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "010f1079b4754acea96c1dda16916638", "version_major": 2, "version_minor": 0 }, "image/png": "iVBORw0KGgoAAAANSUhEUgAAASwAAAEsCAYAAAB5fY51AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAQKklEQVR4nO3db2iV9f/H8ddR8dLs7NTUrcZOtqRIW1ZuYvNf2VcHQ8IFSUWJZgSDqdmIYnkjjehY3ehOOJrFQkSUyH9UGpPYVGwxzcgkTFPayv+R58zdOMN5fjd+ONjXre86/z6+r/N8wLmxq3O+ex9Gzz7X9b3+BBKJREIAYMAw1wMAwFARLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGaMcD1ALrt27ZrOnDmjYDCoQCDgehykKJFIqKurS0VFRRo2jLVAJhAsh86cOaNwOOx6DKRZZ2eniouLXY/hSwTLoWAw6OT3RqPRrP/OUCiU9d+Z7e8Zi8UUDoed/V1zAcFyyNVuYF5enpPfm22uvie795nDjjYAMwgWADMIFgAzCBYAMwgWADMIFgAzCBYAMwhWitavX6+SkhKNGjVKZWVl2r9/v+uRAN8iWCnYunWrVq1apdWrV+vIkSOaPXu2qqqq1NHR4Xo0wJcCiUQi4XoIq6ZPn66pU6eqoaGhb9ukSZNUXV2tSCTyPz8fi8WcXLLi4k/u4uzvbH/P63/PaDSaM1cTZBsrrCT19PTo8OHDqqys7Le9srJSBw8eHPAz8XhcsVis3wvA0BGsJF26dEm9vb0qLCzst72wsFDnzp0b8DORSEShUKjvxZ0agH+HYKXov3d1EonEoLs/9fX1ikajfa/Ozs5sjAj4BndrSNK4ceM0fPjwG1ZTFy5cuGHVdZ3nefI8LxvjAb7ECitJI0eOVFlZmZqbm/ttb25u1owZMxxNBfgbK6wU1NXVafHixSovL1dFRYUaGxvV0dGhmpoa16MBvkSwUvDMM8/or7/+0ttvv62zZ8+qtLRUX3/9tSZMmOB6NMCXOA/LIc7DyizOw/IfjmEBMINgATCDYAEwg2ABMINgATCDYAEwg2ABMINgATCDM91vAtk+0TAXTuKUeGS8H7HCAmAGwQJgBsECYAbBAmAGwQJgBsECYAbBAmAGwQJgBsECYAbBSsG+ffv05JNPqqioSIFAQDt27HA9EuBrBCsF3d3deuihh/TRRx+5HgXICVxLmIKqqipVVVW5HgPIGQQri+LxuOLxeN/PsVjM4TSAPewSZlEkElEoFOp7hcNh1yMBphCsLKqvr1c0Gu17dXZ2uh4JMIVdwizyPE+e57keAzCLFRYAM1hhpeDKlSs6efJk38+nT5/Wjz/+qPz8fN11110OJwP8KZBwce9an2hpadHcuXNv2L5kyRJ99tln//PzsVhMoVCIWyRniKtbJGf775lLWGGl4PHHH3fyLyKQqziGBcAMggXADIIFwAyCBcAMggXADIIFwAyCBcAMggXADE4cvQmEQqGs/r5cOes829/z+pULyBxWWADMIFgAzCBYAMwgWADMIFgAzCBYAMwgWADMIFgAzCBYAMwgWEmKRCKaNm2agsGgCgoKVF1drePHj7seC/A1gpWk1tZW1dbWqq2tTc3Nzbp69aoqKyvV3d3tejTAt3hqTppcvHhRBQUFam1t1Zw5c4b0GVfXnnEtYWa4egpSLuHi5zSJRqOSpPz8/EHfE4/HFY/H+36OxWIZnwvwE3YJ0yCRSKiurk6zZs1SaWnpoO+LRCIKhUJ9r3A4nMUpAfvYJUyD2tpaffXVVzpw4ICKi4sHfd9AKywX0WKXMDPYJcw8dglTtGLFCu3atUv79u37x1hJkud58jwvS5MB/kOwkpRIJLRixQpt375dLS0tKikpcT0S4HsEK0m1tbXavHmzdu7cqWAwqHPnzkn6/7uHjh492vF0gD9xDCtJgx2TaWpq0tKlS4f0v8FpDZnFMSz/YYWVJDoPZB+nNQAwg2ABMINgATCDYAEwg2ABMINgATCDYAEwg2ABMIMTR28C2T4zOhfOOpfcfE9kFissAGYQLABmECwAZhAsAGYQLABmECwAZhAsAGYQLABmECwAZhCsJDU0NGjKlCnKy8tTXl6eKioqtHv3btdjAb5GsJJUXFysdevW6dChQzp06JCeeOIJLVy4UMeOHXM9GuBbPDUnjfLz8/XBBx/opZdeGtL7XT1lhWsJM4un5mQOFz+nQW9vrz7//HN1d3eroqJi0PcN9Kh6AEPHLmEKjh49qltvvVWe56mmpkbbt2/X5MmTB31/JBJRKBTqe4XD4SxOC9jHLmEKenp61NHRocuXL+uLL77QJ598otbW1kGjNdAKKxwOs0uYIewS+g/BSqN58+Zp4sSJ+vjjj4f0fo5hZRbB8h92CdMokUj0W0EBSC8OuifpzTffVFVVlcLhsLq6urRlyxa1tLRoz549rkcDfItgJen8+fNavHixzp49q1AopClTpmjPnj2aP3++69EA3+IYlkMcw8osjmH5D8ewAJhBsACYQbAAmEGwAJhBsACYQbAAmEGwAJjBiaM3gVAolNXflyvnRGX7e14/rw6ZwwoLgBkEC4AZBAuAGQQLgBkEC4AZBAuAGQQLgBkEC4AZBAuAGQQrTSKRiAKBgFatWuV6FMC3CFYatLe3q7GxUVOmTHE9CuBrBCtFV65c0fPPP68NGzbo9ttvdz0O4GsEK0W1tbVasGCB5s2b53oUwPe4W0MKtmzZoh9++EHt7e1Dev9Aj6oHMHSssJLU2dmpV155RZs2bdKoUaOG9JlIJKJQKNT3CofDGZ4S8BeeS5ikHTt26KmnntLw4cP7tvX29ioQCGjYsGGKx+P9/pk08ArLRbS4H1ZmuHrOZC5hlzBJ//nPf3T06NF+21588UXdf//9euONN26IlSR5nifP87I1IuA7BCtJwWBQpaWl/baNGTNGY8eOvWE7gPTgGBYAM1hhpVFLS4vrEQBfY4UFwAyCBcAMggXADIIFwAyCBcAMggXADIIFwAyCBcAMThy9CWT7YtlcuBBZcvM9kVmssACYQbAAmEGwAJhBsACYQbAAmEGwAJhBsACYQbAAmEGwAJhBsJK0Zs0aBQKBfq877rjD9ViAr3FpTgoeeOAB7d27t+/ngR7tBSB9CFYKRowYwaoKyCJ2CVNw4sQJFRUVqaSkRM8++6xOnTrleiTA11hhJWn69OnauHGj7rvvPp0/f17vvPOOZsyYoWPHjmns2LEDfmagR9UDGLpAwsV9P3you7tbEydO1Ouvv666uroB37NmzRqtXbv2hu3cXiYzXN1eJtt/z1zCLmGajBkzRg8++KBOnDgx6Hvq6+sVjUb7Xp2dnVmcELCPXcI0icfj+uWXXzR79uxB3+N5njzPy+JUgL+wwkrSa6+9ptbWVp0+fVrff/+9nn76acViMS1ZssT1aIBvscJK0h9//KHnnntOly5d0vjx4/Xoo4+qra1NEyZMcD0a4FsEK0lbtmxxPQKQc9glBGAGwQJgBsECYAbBAmAGwQJgBsECYAbBAmAGwQJgBieO3gRCoVBWf1+u3Dkh298zFotl/W+Za1hhATCDYAEwg2ABMINgATCDYAEwg2ABMINgATCDYAEwg2ABMINgpeDPP//UCy+8oLFjx+qWW27Rww8/rMOHD7seC/AtLs1J0t9//62ZM2dq7ty52r17twoKCvTbb7/ptttucz0a4FsEK0nvvfeewuGwmpqa+rbdfffd7gYCcgC7hEnatWuXysvLtWjRIhUUFOiRRx7Rhg0bXI8F+BrBStKpU6fU0NCge++9V998841qamq0cuVKbdy4cdDPxONxxWKxfi8AQxdIuLjXiA+MHDlS5eXlOnjwYN+2lStXqr29Xd99992An1mzZo3Wrl2brREHxe1lMuP67WWi0ajy8vKy+rtzBSusJN15552aPHlyv22TJk1SR0fHoJ+pr69XNBrte3V2dmZ6TMBXOOiepJkzZ+r48eP9tv3666//+Kh6z/PkeV6mRwN8ixVWkl599VW1tbXp3Xff1cmTJ7V582Y1NjaqtrbW9WiAb3EMKwVffvml6uvrdeLECZWUlKiurk4vv/zykD/v6pa6HMPKDI5hZR7BcohgZRbB8h92CQGYQbAAmEGwAJhBsACYQbAAmEGwAJhBsACYQbAAmMG1hDeBbJ9omAsncUpuvicyixUWADMIFgAzCBYAMwgWADMIFgAzCBYAMwgWADMIFgAzCBYAMwhWCu6++24FAoEbXjyIAsgMLs1JQXt7u3p7e/t+/vnnnzV//nwtWrTI4VSAfxGsFIwfP77fz+vWrdPEiRP12GOPOZoI8Dd2CdOkp6dHmzZt0rJly7joFsgQVlhpsmPHDl2+fFlLly4d9D3xeFzxeLzv51gsloXJAP9ghZUmn376qaqqqlRUVDToeyKRiEKhUN8rHA5ncULAPh6kmga///677rnnHm3btk0LFy4c9H0DrbDC4TD3w8oQV7vmPEg1c9glTIOmpiYVFBRowYIF//g+z/PkeV6WpgL8h13CFF27dk1NTU1asmSJRoyg/0AmEawU7d27Vx0dHVq2bJnrUQDfY0mQosrKSifHZ4BcxAoLgBkEC4AZBAuAGQQLgBkEC4AZBAuAGQQLgBmch+XQ9fO3cuGuDbnwHa/jvLzMIVgOdXV1SVJO3LUhFAq5HiFrurq6cur7ZhN3a3Do2rVrOnPmjILB4L+6s8D1uzx0dnb6+q4A1r5nIpFQV1eXioqKNGwYR1sygRWWQ8OGDVNxcXHSn8/LyzPxL3KqLH1PVlaZxX8GAJhBsACYQbAM8jxPb731lu9vBpgr3xNDx0F3AGawwgJgBsECYAbBAmAGwQJgBsEyaP369SopKdGoUaNUVlam/fv3ux4prSKRiKZNm6ZgMKiCggJVV1fr+PHjrsfCTYBgGbN161atWrVKq1ev1pEjRzR79mxVVVWpo6PD9Whp09raqtraWrW1tam5uVlXr15VZWWluru7XY8GxzitwZjp06dr6tSpamho6Ns2adIkVVdXKxKJOJwscy5evKiCggK1trZqzpw5rseBQ6ywDOnp6dHhw4dVWVnZb3tlZaUOHjzoaKrMi0ajkqT8/HzHk8A1gmXIpUuX1Nvbq8LCwn7bCwsLde7cOUdTZVYikVBdXZ1mzZql0tJS1+PAMe7WYNB/34omkUj8q9vTWLJ8+XL99NNPOnDggOtRcBMgWIaMGzdOw4cPv2E1deHChRtWXX6wYsUK7dq1S/v27UvpNjzwD3YJDRk5cqTKysrU3Nzcb3tzc7NmzJjhaKr0SyQSWr58ubZt26Zvv/1WJSUlrkfCTYIVljF1dXVavHixysvLVVFRocbGRnV0dKimpsb1aGlTW1urzZs3a+fOnQoGg30rylAopNGjRzueDi5xWoNB69ev1/vvv6+zZ8+qtLRUH374oa/+7/7Bjsc1NTVp6dKl2R0GNxWCBcAMjmEBMINgATCDYAEwg2ABMINgATCDYAEwg2ABMINgATCDYAEwg2ABMINgATDj/wBiWuS8WXG9vQAAAABJRU5ErkJggg==", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.figure(figsize = (3,3))\n", "plt.imshow(image, cmap = plt.cm.gray);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "While you probably did not have a problem with the matrix representation of our boring image, you should have one now, because the x-axis was the longer one.\n", "\n", "The problem comes from the different way data can be stored.\n", "\n", "## Data Storage Conventions\n", "\n", "In microscopy, we are used to first go right and then down, like you read a text in English. This may originate in the fact that images from scanning microscopes start at top left, go horizontally first and then down line by line.\n", "\n", "So our perception requires the first index to be horizontally (the column index to be first) and the row index to be the second.\n", "\n", "In mathematics, a matrix index starts with a row index and column indices are second. Exactly opposite to what we are used in microscopy.\n", "\n", "\n", "$\n", "\\begin{bmatrix}\n", " x_{11} & x_{12} & x_{13} & \\dots & x_{1n} \\\\\n", " x_{21} & x_{22} & x_{23} & \\dots & x_{2n} \\\\\n", " \\vdots & \\vdots & \\vdots & \\ddots & \\vdots \\\\\n", " x_{d1} & x_{d2} & x_{d3} & \\dots & x_{dn}\n", "\\end{bmatrix}\n", "$\n", "\n", "So we now have to choose, what kind of internal representation we use. And we need to consider what kind of internal representation the used python-packages choose. You will notice that most examples on the internet get around this problem by using square matrices and images, which leads sometimes to errors in non-square data, and leads often to subtle problems in image analysis.\n", "\n", "As we see numpy uses the mathematical convention and most popular packages are compatible with numpy and use the same convention. If we chose to internally stay with the fast direction as row in the numpy array, it gets confusing with switching x and y directions constantly. Therefore, ``pyTEMlib``, ``pycroscopy``, and ``pyNSID`` are using the storage method of slow axis first storage convention.\n", "\n", "In other words, in the notebooks of this course, we will rotate output and stay with mathematics indexing internally. This makes the computation consistent with all numpy based packages and there are many. The [scipy](https://www.scipy.org/), [scikit-image](https://scikit-image.org/), and [scikit-learn](https://scikit-learn.org/stable/) are the most used (collection of) packages used in this notebook-lecture series. We stay very ``pythonic`` with this convention.\n", "\n", "*Turning* the image can be accomplished by a ``.T`` command of numpy arrays, which is the transposed of a matrix $M^T$. Please note, that numpy is smart enough to leave the stored data alone and just change the way the data are read (look up strides and numpy for more information)." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(8, 4)\n" ] }, { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "1e56738759eb4b85990b7af6d2716e18", "version_major": 2, "version_minor": 0 }, "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAlHUlEQVR4nO3df2xX9b348ddn/ChcR2sAW0qoiFfH+CGKrVfKhpt6V1d2idwZr8vdRbxzu+mCOm1IHOjN3O62mmz3Bs0UhlM2x/VqbiqOXRDpzWxxV7gTblHikMsyZrmkFXHaKrm2gp/vHwvNrfwQv6OfI5/345GcZJ/Tc+zr5F3WJ+fzg1w+n88HAADJ+EjWAwAAUFgCEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMQIQACAxAhAAIDECEAAgMUURgK+//nosWLAgysrKoqysLBYsWBBvvPHGCc+54YYbIpfLDdhmzZpVmIEBADI0NOsBToW//uu/jv/5n/+JDRs2RETE3/3d38WCBQvi5z//+QnP++xnPxurVq3qfzx8+PBBnRMA4MPgtA/AnTt3xoYNG2LLli1x6aWXRkTEAw88ELW1tbFr166YPHnycc8tKSmJcePGFWpUAIAPhdM+ADdv3hxlZWX98RcRMWvWrCgrK4tnn332hAHY2toa5eXlceaZZ8anPvWp+M53vhPl5eXHPb63tzd6e3v7H7/77rvx+9//PsaMGRO5XO7UXBAAMKjy+Xy8+eabMX78+PjIR4ri1XAf2GkfgF1dXceMtvLy8ujq6jruefX19XHttdfGxIkTY8+ePfH3f//3ccUVV8S2bduipKTkmOc0NTXFN7/5zVM2OwCQnb1798aECROyHiMTH9oAvOuuu943tp577rmIiGPefcvn8ye8K3fdddf1/+/p06dHTU1NTJw4MdatWxef//znj3nOkiVLorGxsf9xd3d3nH322SecsVh1d3dnPUImysrKsh4hE9Y7LdY7LSmud09PT1RVVcWoUaOyHiUzH9oAvOmmm+ILX/jCCY8555xz4oUXXohXXnnlqK+9+uqrUVFRcdLfr7KyMiZOnBi7d+8+7jElJSXHvTuYmtLS0qxHoICsd1qsd1pSXu+UX771oQ3AsWPHxtixY9/3uNra2uju7o5f/epX8Wd/9mcREfGf//mf0d3dHbNnzz7p7/faa6/F3r17o7Ky8v97ZgCA08Fp/8rHKVOmxGc/+9n4yle+Elu2bIktW7bEV77ylfiLv/iLAW8A+fjHPx5r1qyJiIi33norFi9eHJs3b47f/e530draGvPmzYuxY8fGX/7lX2Z1KQAABXHaB2BExD//8z/HBRdcEHV1dVFXVxczZsyIn/70pwOO2bVrV//rHIYMGRI7duyIq6++Oj72sY/FwoUL42Mf+1hs3rw56dcDAABpyOXz+XzWQ5yuenp6kn3RcKo/Nqm+XsR6p8V6pyXF9T7y+7u7uzvZ10AWxR1AAABOngAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEhMUQXg/fffH5MmTYoRI0ZEdXV1PPPMMyc8vq2tLaqrq2PEiBFx7rnnxooVKwo0KQBAdoomAB977LG49dZb44477oj29vaYM2dO1NfXR0dHxzGP37NnT8ydOzfmzJkT7e3tsXTp0rjllluiubm5wJMDABRWLp/P57Me4lS49NJL4+KLL47ly5f375syZUrMnz8/mpqajjr+9ttvj7Vr18bOnTv79zU0NMTzzz8fmzdvPqnv2dPTE2VlZX/88KehIvmx+cByuVzWI2TCeqfFeqclxfU+8vu7u7s7SktLsx4nE0VxB7Cvry+2bdsWdXV1A/bX1dXFs88+e8xzNm/efNTxV111VWzdujXeeeedY57T29sbPT09AzYAgNNNUQTggQMH4vDhw1FRUTFgf0VFRXR1dR3znK6urmMef+jQoThw4MAxz2lqaoqysrL+raqq6tRcAABAARVFAB7x3tv3+Xz+hLf0j3X8sfYfsWTJkuju7u7f9u7d+0dODABQeEOzHuBUGDt2bAwZMuSou3379+8/6i7fEePGjTvm8UOHDo0xY8Yc85ySkpIoKSk5NUMDAGSkKO4ADh8+PKqrq6OlpWXA/paWlpg9e/Yxz6mtrT3q+I0bN0ZNTU0MGzZs0GYFAMhaUQRgRERjY2P86Ec/ioceeih27twZt912W3R0dERDQ0NE/OHp2+uvv77/+IaGhnj55ZejsbExdu7cGQ899FA8+OCDsXjx4qwuAQCgIIriKeCIiOuuuy5ee+21+Na3vhWdnZ0xffr0WL9+fUycODEiIjo7Owd8JuCkSZNi/fr1cdttt8V9990X48ePj3vvvTeuueaarC4BAKAgiuZzALPgcwDT43PC0mK902K90+FzAIvoKWAAAE6OAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASIwABABIjAAEAEiMAAQASExRBeD9998fkyZNihEjRkR1dXU888wzxz22tbU1crncUdtLL71UwIkBAAqvaALwsccei1tvvTXuuOOOaG9vjzlz5kR9fX10dHSc8Lxdu3ZFZ2dn/3b++ecXaGIAgGwUTQD+0z/9U9x4443x5S9/OaZMmRLLli2LqqqqWL58+QnPKy8vj3HjxvVvQ4YMKdDEAADZGJr1AKdCX19fbNu2Lb7+9a8P2F9XVxfPPvvsCc+dOXNmvP322zF16tS488474/LLLz/usb29vdHb29v/uKen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Kisr48orr4ynn376hMf29vZGT0/PgA0A4HSTy+fz+ayHOJXy+XxcffXV8frrr8czzzxz3ON27doVmzZtiurq6ujt7Y2f/vSnsWLFimhtbT3uXcO77rorvvnNbx61v7u7O0pLS0/ZNZwOcrlc1iNkosj+uJw0650W652WVNc7Is3f30cUXQAuWrQo1q1bF7/85S9jwoQJH+jcefPmRS6Xi7Vr1x7z6729vdHb29v/uKenJ6qqqpL8AUr1/zCK7I/LSbPeabHeaUl1vSPSDsCiegr45ptvjrVr18bTTz/9geMvImLWrFmxe/fu4369pKQkSktLB2wAAKebongTSD6fj5tvvjnWrFkTra2tMWnSpP+v/057e3tUVlae4ukAAD5ciiIAFy1aFI888kj87Gc/i1GjRkVXV1dERJSVlcXIkSMjImLJkiWxb9++ePjhhyMiYtmyZXHOOefEtGnToq+vL1avXh3Nzc3R3Nyc2XUAABRCUQTg8uXLIyLi05/+9ID9q1atihtuuCEiIjo7O6Ojo6P/a319fbF48eLYt29fjBw5MqZNmxbr1q2LuXPnFmpsAIBMFN2bQAqpp6cnysrKknwRaaovGk71j4v1Tov1Tkuq6x3hTSAAACREAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJEYAAgAkRgACACRGAAIAJKYoAnD58uUxY8aMKC0tjdLS0qitrY0nn3zyhOe0tbVFdXV1jBgxIs4999xYsWJFgaYFAMhWUQTghAkT4u67746tW7fG1q1b44orroirr746XnzxxWMev2fPnpg7d27MmTMn2tvbY+nSpXHLLbdEc3NzgScHACi8XD6fz2c9xGAYPXp0fO9734sbb7zxqK/dfvvtsXbt2ti5c2f/voaGhnj++edj8+bNJ/09enp6oqysLLq7u6O0tPSUzH26yOVyWY+QiSL94/K+rHdarHdaUl3viEjy9/cRRXEH8P86fPhwPProo3Hw4MGora095jGbN2+Ourq6Afuuuuqq2Lp1a7zzzjvH/W/39vZGT0/PgA0A4HRTNAG4Y8eO+OhHPxolJSXR0NAQa9asialTpx7z2K6urqioqBiwr6KiIg4dOhQHDhw47vdoamqKsrKy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", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "print(image.shape)\n", "plt.figure()\n", "plt.imshow(image.T, cmap = plt.cm.gray);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Using the ``Pythonic`` Convention\n", "\n", "This convention chosen allows us to address the image content naturally, here we select the pixel at x-axis 4 and y-axis 1\n", "\n", "In the example below, also a line is plotted which needs the ``x`` coordinates first and the ``y`` coordinates (as a list ``[ ... ]`` or numpy ``array``).\n", "\n", "The same coordinates are used to put markers in the image." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "9003992e4d9f49738158c2abb80c1df9", "version_major": 2, "version_minor": 0 }, "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAApWUlEQVR4nO3df3RU9Z3/8ddIYIJKQvmRkJSExLXGEEQxsTJafskaDZYFYV1tXcT665sCKqb5cgi6p9jVhvNd1o2sEoiLpJhVONsIwoJAdmsCLcmWhOTAKqR4RJKmE1NUEknLROB+/4hMGfMDgpm5yf08H+fc09w7nwvve8Zz+uTOj7gsy7IEAAAAY1xh9wAAAAAILQIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYRwTg559/rnnz5ikyMlKRkZGaN2+eTp482e05Dz/8sFwuV8A2ceLE0AwMAABgozC7B+gNP/zhD/X73/9eO3fulCQ98cQTmjdvnrZt29bteXfffbfWr1/v3x80aFBQ5wQAAOgL+n0AHj58WDt37lRFRYVuvfVWSdJrr70mj8ej2tpaJSUldXmu2+3WqFGjQjUqAABAn9DvA7C8vFyRkZH++JOkiRMnKjIyUvv27es2AEtLSxUVFaWhQ4dqypQpevHFFxUVFdXlep/PJ5/P598/d+6cPvvsMw0fPlwul6t3LggAAASVZVn64osvFBsbqyuucMS74Xqs3wdgY2Njp9EWFRWlxsbGLs/LyMjQfffdpzFjxujYsWP6h3/4B91xxx2qqqqS2+3u9Jzc3Fw9//zzvTY7AACwT319vUaPHm33GLboswG4fPnyi8bW/v37JanTu2+WZXV7V+7+++/3/zxu3DilpaVpzJgx2r59u+bMmdPpOTk5OcrKyvLvNzc3Kz4+vtsZnWrp0qV2j2CLFStW2D2CLXi+zcLzbRYTn2+fz6d/+Zd/0ZAhQ+wexTZ9NgAXLVqkBx54oNs1CQkJOnjwoD755JMOj/3xj39UdHT0Jf99MTExGjNmjI4ePdrlGrfb3eXdQdOEh4fbPQJCiOfbLDzfZjH5+Tb57Vt9NgBHjBihESNGXHSdx+NRc3Ozfvvb3+q73/2uJOl//ud/1NzcrNtuu+2S/75PP/1U9fX1iomJueyZAQAA+oN+/87H5ORk3X333Xr88cdVUVGhiooKPf744/r+978f8AGQ66+/Xps3b5YknTp1StnZ2SovL9fHH3+s0tJSzZw5UyNGjNC9995r16UAAACERL8PQEn693//d91www1KT09Xenq6xo8frzfeeCNgTW1trZqbmyVJAwYM0KFDhzRr1ixdd911mj9/vq677jqVl5cb/X4AAABghj77EnBPDBs2TEVFRd2usSzL//PgwYO1a9euYI8FAADQJzniDiAAAAAuHQEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwYXYPgMtxhaRJkmIkeSXtlXTO1okAAED/4ag7gKtXr1ZiYqLCw8OVmpqqvXv3dru+rKxMqampCg8P1zXXXKM1a9aEaNJv4l5JH0sqlfTWV//78VfHAQAALs4xAbhp0yYtXrxYzz77rKqrqzVp0iRlZGSorq6u0/XHjh3TjBkzNGnSJFVXV2vZsmV66qmnVFxcHOLJe+JeSb+U9O2vHf/2V8eJQAAAcHGOCcCXXnpJjz76qB577DElJycrLy9PcXFxys/P73T9mjVrFB8fr7y8PCUnJ+uxxx7TI488opUrV4Z48kt1haSXL/j5649JUl4njwEAAARyRC20tbWpqqpK6enpAcfT09O1b9++Ts8pLy/vsP6uu+5SZWWlvvzyy07P8fl8amlpCdhCZ5KkOJ1/yooXz9HKB3+i70/YpsgrT351PP6rdQAAAF1zxIdATpw4obNnzyo6OjrgeHR0tBobGzs9p7GxsdP1Z86c0YkTJxQTE9PhnNzcXD3//PO9N3iP/GWe2G81aM4tmyVJP5nxks6dc6n6+ASVHp6q0g/OaW+t1Pwnm8YEAAB9niMC8DyXyxWwb1lWh2MXW9/Z8fNycnKUlZXl329paVFcXNzljttDXv9PzX+K1AP/+pamji3V1ORSXR9bq9TEA0pNPKCfzJDOnZOqj0ulh6XSD0QQAgCAAI4IwBEjRmjAgAEd7vY1NTV1uMt33qhRozpdHxYWpuHDh3d6jtvtltvt7p2he2yvpHpJ31ar72ptqnhAmyoekCTFDP2DpiS/p6nJOzQ1+U0lxUqpie0bQQgAAL7OEQE4aNAgpaamqqSkRPfe+5dPwpaUlGjWrFmdnuPxeLRt27aAY7t371ZaWpoGDhwY1HkvzzlJT6v9077ndOHbN70nR2lj+Q+0sbz9E8wxQ6UpydLUrzaCEAAAXMgRAShJWVlZmjdvntLS0uTxeFRQUKC6ujplZmZKan/5tqGhQRs2bJAkZWZm6pVXXlFWVpYef/xxlZeXa926dXrrrbfsvIyL2Czpb9X+aeALX3r+vaTFXz0ueU9KG8vbN4kgBAAAgRwTgPfff78+/fRT/exnP5PX69W4ceO0Y8cOjRkzRpLk9XoDvhMwMTFRO3bs0DPPPKNXX31VsbGxWrVqlebOnWvXJVyizZLeUU9+EwhBCAAALuSYAJSkBQsWaMGCBZ0+VlhY2OHYlClTdODAgSBPFQznJJVd9tm9EYQAAKD/clQA4vJcThA2tq3V8T8n6OM/J+j4n+PlOzfYzksAAAA9QACig0sJwthwr2LDvfJ8q1yWJXl9MQQhAAD9BAGIi+osCP/1ublKuPJjjRn8sUYM+pQgBACgHyEA0WPek9L/nrpB/3vqBknS1QNalDD4OEEIAEA/QQDiGzt1NoIgBACgHyEA0esIQgAA+jYCEEFHEAIA0LcQgAg5ghAAAHsRgLAdQQgAQGgRgOhzCEIAAIKLAESfRxACANC7CED0OwQhAADfDAGIfo8gBACgZwhAOA5BCABA9whAOB5BCABAIAIQxvkmQVg5QdpbKzX/yeaLAADgGyAAYbyeBOG2bOncOan6uFR6WCr9gCAEAPQ/BCDwNd0F4dWtVUqKlVIT27efzCAIAQD9DwEIXMSFQbh8eZVihkpTkqWpX20EIQCgvyEAgR7ynpQ2lrdvkghCAEC/c4XdA/Sm1atXKzExUeHh4UpNTdXevXu7XFtaWiqXy9VhO3LkSAgnhhOcD8LM16Xr/68Uu1D6wSvS2v+Wav8gXXHFX2JwW7b02Vqp8gVp5YPS9ydIkVfafQUAANM45g7gpk2btHjxYq1evVq333671q5dq4yMDH3wwQeKj4/v8rza2lpFRET490eOHBmKceFg3CEEAPR1jgnAl156SY8++qgee+wxSVJeXp527dql/Px85ebmdnleVFSUhg4dGqIpYSKCEADQ1zgiANva2lRVVaWlS5cGHE9PT9e+ffu6PXfChAk6ffq0xo4dq+eee07Tpk3rcq3P55PP5/Pvt7S0SJKWLl2q8PDwb3AF/c/y5cvtHsEWvXndjZI2tkpXf9Txa2cuDMK+8MXUpj7flmXZPYItXC6X3SPYwtT/zk29btM5IgBPnDihs2fPKjo6OuB4dHS0GhsbOz0nJiZGBQUFSk1Nlc/n0xtvvKHp06ertLRUkydP7vSc3NxcPf/8870+P8zGbyoBAISaIwLwvK//q9WyrC7/JZuUlKSkpCT/vsfjUX19vVauXNllAObk5CgrK8u/39LSori4uF6YHPgLghAAEGyOCMARI0ZowIABHe72NTU1dbgr2J2JEyeqqKioy8fdbrfcbvdlzwlcDoIQANDbHBGAgwYNUmpqqkpKSnTvvff6j5eUlGjWrFmX/OdUV1crJiYmGCMCvYYgBAB8U44IQEnKysrSvHnzlJaWJo/Ho4KCAtXV1SkzM1NS+8u3DQ0N2rBhg6T2TwknJCQoJSVFbW1tKioqUnFxsYqLi+28DKDHCEIAQE85JgDvv/9+ffrpp/rZz34mr9ercePGaceOHRozZowkyev1qq6uzr++ra1N2dnZamho0ODBg5WSkqLt27drxowZdl0C0CsIQgDAxTgmACVpwYIFWrBgQaePFRYWBuwvWbJES5YsCcFUgL16IwgBAM7iqAAEcHGXE4R3vsAXUwOAkxCAgOEuJQj5TSUA4CwEIIAAnQVh5Y6X+NV1AOAgBCCAbp06G8HvMgYAhyEAAfSI96QIQgDo5whAAN8IQQgA/Q8BCKBXEYQA0PcRgACCiiAEgL6HAAQQUgQhANiPAARgK4IQAEKPAATQpxCEABB8BCCAPo0gBIDeRwAC6FcIQgD45ghAAP0aQQgAPUcAAnAUghAALo4ABOBo3yQI9fttUtQkadBQ+y4AAIKAAARglJ4Eofb8jSSX9K0JUvRUKWoqQQjAEQhAAEbrLgj/z+zrpC9+J31+oH078pIIQgBOQAACwAUuDML/s65W+tMfpKYyqalU+qSUIATgCAQgAHTnylgp4QftmxT0IDx7Vtq7V/J6pZgYadIkacCAXr8qAIa7wu4BesuePXs0c+ZMxcbGyuVyacuWLRc9p6ysTKmpqQoPD9c111yjNWvWBH9QAP3b+SD87lppZq00u0G67U3p2iekIddJsv4Sg3v+RvrlMOndVOnAT9o/VNJ2sss/+u23pYQEado06Yc/bP/fhIT24wDQmxxzB7C1tVU33nijfvSjH2nu3LkXXX/s2DHNmDFDjz/+uIqKivSb3/xGCxYs0MiRIy/pfACQ1Gt3CN9+W/rbv5UsK/CPb2hoP/7LX0pz5oT0ygA4mGMCMCMjQxkZGZe8fs2aNYqPj1deXp4kKTk5WZWVlVq5ciUBCODyXUYQWt+aoBO7p+qem6Zqb+0kNf9pqP+PsyzJ5ZIWL5ZmzeLlYAC9wzEB2FPl5eVKT08POHbXXXdp3bp1+vLLLzVw4MAO5/h8Pvl8Pv9+S0tL0OcE0M9dQhC6Pj+gJyYf0BOTX9K5cy5VH5+g0sNT9f+2LVFTS7QsS6qvb39v4NSpNl4LAMdwzHsAe6qxsVHR0dEBx6Kjo3XmzBmdOHGi03Nyc3MVGRnp3+Li4kIxKgAn6eQ9hPv0ptb+9xOq/cN1uuIKS6mJB7T47jz5zrgDTvV6bZoZgOMYewdQklwuV8C+9dWbb75+/LycnBxlZWX591taWohAAN/MlbFqi/2BMl9vv0MYM/QPmpJcpmujPwx4KVhq/1QwAPQGYwNw1KhRamxsDDjW1NSksLAwDR8+vNNz3G633G53p48BwOWaNEkaPbr9Ax/ek7HaWP6DgMddrvbHJ02yaUAAjmPsS8Aej0clJSUBx3bv3q20tLRO3/8HAMEyYID08svtP3/9BYjz+3l5fAAEQO9xTACeOnVKNTU1qqmpkdT+NS81NTWqq6uT1P7y7UMPPeRfn5mZqePHjysrK0uHDx/W66+/rnXr1ik7O9uO8QEYbs6c9q96+fa3A4+PHs1XwADofY55CbiyslLTpk3z759/r978+fNVWFgor9frj0FJSkxM1I4dO/TMM8/o1VdfVWxsrFatWsVXwACwzZw57V/1wm8CARBsjgnAqVOn+j/E0ZnCwsIOx6ZMmaIDBw4EcSoA6JkBA/iqFwDB55iXgAEAAHBpCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAzjmADcs2ePZs6cqdjYWLlcLm3ZsqXb9aWlpXK5XB22I0eOhGZgAAAAm4TZPUBvaW1t1Y033qgf/ehHmjt37iWfV1tbq4iICP/+yJEjgzEeAABAn+GYAMzIyFBGRkaPz4uKitLQoUN7fyAAAIA+yjEBeLkmTJig06dPa+zYsXruuec0bdq0Ltf6fD75fD7/fktLiyRpxYoVQZ+zr1m+fLndI9iC6zaLy+WyewRbmPp8c93mOH36tJH/330hx7wHsKdiYmJUUFCg4uJivf3220pKStL06dO1Z8+eLs/Jzc1VZGSkf4uLiwvhxAAAAL3D2DuASUlJSkpK8u97PB7V19dr5cqVmjx5cqfn5OTkKCsry7/f0tJCBAIAgH7H2DuAnZk4caKOHj3a5eNut1sREREBGwAAQH9DAF6gurpaMTExdo8BAAAQVI55CfjUqVP68MMP/fvHjh1TTU2Nhg0bpvj4eOXk5KihoUEbNmyQJOXl5SkhIUEpKSlqa2tTUVGRiouLVVxcbNclAAAAhIRjArCysjLgE7zn36s3f/58FRYWyuv1qq6uzv94W1ubsrOz1dDQoMGDByslJUXbt2/XjBkzQj47AABAKDkmAKdOnSrLsrp8vLCwMGB/yZIlWrJkSZCnAgAA6Ht4DyAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAzjiADMzc3VLbfcoiFDhigqKkqzZ89WbW3tRc8rKytTamqqwsPDdc0112jNmjUhmBYAAMBejgjAsrIyLVy4UBUVFSopKdGZM2eUnp6u1tbWLs85duyYZsyYoUmTJqm6ulrLli3TU089peLi4hBODgAAEHphdg/QG3bu3Bmwv379ekVFRamqqkqTJ0/u9Jw1a9YoPj5eeXl5kqTk5GRVVlZq5cqVmjt3brBHBgAAsI0j7gB+XXNzsyRp2LBhXa4pLy9Xenp6wLG77rpLlZWV+vLLLzs9x+fzqaWlJWADAADobxwXgJZlKSsrS9/73vc0bty4Ltc1NjYqOjo64Fh0dLTOnDmjEydOdHpObm6uIiMj/VtcXFyvzg4AABAKjgvARYsW6eDBg3rrrbcuutblcgXsW5bV6fHzcnJy1Nzc7N/q6+u/+cAAAAAh5oj3AJ735JNPauvWrdqzZ49Gjx7d7dpRo0apsbEx4FhTU5PCwsI0fPjwTs9xu91yu929Ni8AAIAdHHEH0LIsLVq0SG+//bZ+9atfKTEx8aLneDwelZSUBBzbvXu30tLSNHDgwGCNCgAAYDtHBODChQtVVFSkN998U0OGDFFjY6MaGxv15z//2b8mJydHDz30kH8/MzNTx48fV1ZWlg4fPqzXX39d69atU3Z2th2XAAAAEDKOCMD8/Hw1Nzdr6tSpiomJ8W+bNm3yr/F6vaqrq/PvJyYmaseOHSotLdVNN92kf/zHf9SqVav4ChgAAOB4jngP4PkPb3SnsLCww7EpU6bowIEDQZgIAACg73LEHUAAAABcOgIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDOCIAc3Nzdcstt2jIkCGKiorS7NmzVVtb2+05paWlcrlcHbYjR46EaGoAAAB7OCIAy8rKtHDhQlVUVKikpERnzpxRenq6WltbL3pubW2tvF6vf/vOd74TgokBAADsE2b3AL1h586dAfvr169XVFSUqqqqNHny5G7PjYqK0tChQ4M4HQAAQN/iiDuAX9fc3CxJGjZs2EXXTpgwQTExMZo+fbree++9btf6fD61tLQEbAAAAP2Ny7Isy+4hepNlWZo1a5Y+//xz7d27t8t1tbW12rNnj1JTU+Xz+fTGG29ozZo1Ki0t7fKu4fLly/X88893OL506VKFh4f32jX0B8uXL7d7BFtw3Wbhus3CdZunublZERERdo9hC0e8BHyhRYsW6eDBg/r1r3/d7bqkpCQlJSX59z0ej+rr67Vy5couAzAnJ0dZWVn+/ZaWFsXFxfXO4AAAACHiqJeAn3zySW3dulXvvfeeRo8e3ePzJ06cqKNHj3b5uNvtVkRERMAGAADQ3zjiDqBlWXryySe1efNmlZaWKjEx8bL+nOrqasXExPTydAAAAH2LIwJw4cKFevPNN/XOO+9oyJAhamxslCRFRkZq8ODBktpfvm1oaNCGDRskSXl5eUpISFBKSora2tpUVFSk4uJiFRcX23YdAAAAoeCIAMzPz5ckTZ06NeD4+vXr9fDDD0uSvF6v6urq/I+1tbUpOztbDQ0NGjx4sFJSUrR9+3bNmDEjVGMDAADYwhEBeCkfZC4sLAzYX7JkiZYsWRKkiQAAAPouR30IBAAAABdHAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBhHBGB+fr7Gjx+viIgIRUREyOPx6N133+32nLKyMqWmpio8PFzXXHON1qxZE6JpAQAA7OWIABw9erRWrFihyspKVVZW6o477tCsWbP0/vvvd7r+2LFjmjFjhiZNmqTq6motW7ZMTz31lIqLi0M8OQAAQOiF2T1Ab5g5c2bA/osvvqj8/HxVVFQoJSWlw/o1a9YoPj5eeXl5kqTk5GRVVlZq5cqVmjt3bihGBgAAsI0j7gBe6OzZs9q4caNaW1vl8Xg6XVNeXq709PSAY3fddZcqKyv15Zdfdvln+3w+tbS0BGwAAAD9jWMC8NChQ7r66qvldruVmZmpzZs3a+zYsZ2ubWxsVHR0dMCx6OhonTlzRidOnOjy78jNzVVkZKR/i4uL69VrAAAACAXHBGBSUpJqampUUVGhH//4x5o/f74++OCDLte7XK6AfcuyOj1+oZycHDU3N/u3+vr63hkeAAAghBzxHkBJGjRokK699lpJUlpamvbv36+XX35Za9eu7bB21KhRamxsDDjW1NSksLAwDR8+vMu/w+12y+129+7gAAAAIeaYO4BfZ1mWfD5fp495PB6VlJQEHNu9e7fS0tI0cODAUIwHAABgG0cE4LJly7R37159/PHHOnTokJ599lmVlpbqwQcflNT+0u1DDz3kX5+Zmanjx48rKytLhw8f1uuvv65169YpOzvbrksAAAAIGUe8BPzJJ59o3rx58nq9ioyM1Pjx47Vz507deeedkiSv16u6ujr/+sTERO3YsUPPPPOMXn31VcXGxmrVqlV8BQwAADCCIwJw3bp13T5eWFjY4diUKVN04MCBIE0EAADQdzniJWAAAABcOgIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDOCIA8/PzNX78eEVERCgiIkIej0fvvvtul+tLS0vlcrk6bEeOHAnh1AAAAPYIs3uA3jB69GitWLFC1157rSTpF7/4hWbNmqXq6mqlpKR0eV5tba0iIiL8+yNHjgz6rAAAAHZzRADOnDkzYP/FF19Ufn6+Kioqug3AqKgoDR06NMjTAQAA9C2OCMALnT17Vv/xH/+h1tZWeTyebtdOmDBBp0+f1tixY/Xcc89p2rRp3a73+Xzy+Xz+/ebmZv9xmOH06dN2j4AQ4vk2C8+3eSzLsnsE+1gOcfDgQeuqq66yBgwYYEVGRlrbt2/vcu2RI0esgoICq6qqytq3b5/14x//2HK5XFZZWVm3f8dPf/pTSxIbGxsbGxubA7b6+vrezpF+w2VZzsjftrY21dXV6eTJkyouLta//du/qaysTGPHjr2k82fOnCmXy6WtW7d2uebrdwDPnTunzz77TMOHD5fL5frG19ATLS0tiouLU319fcD7GJ2O6+a6TcB1c90msPO6LcvSF198odjYWF1xhSM+D9tjjnkJeNCgQf4PgaSlpWn//v16+eWXtXbt2ks6f+LEiSoqKup2jdvtltvtDjhm93sIz3/y2TRct1m4brNw3Wax67ojIyND/nf2JY7NXsuyevTevOrqasXExARxIgAAgL7BEXcAly1bpoyMDMXFxemLL77Qxo0bVVpaqp07d0qScnJy1NDQoA0bNkiS8vLylJCQoJSUFLW1tamoqEjFxcUqLi628zIAAABCwhEB+Mknn2jevHnyer2KjIzU+PHjtXPnTt15552SJK/Xq7q6Ov/6trY2ZWdnq6GhQYMHD1ZKSoq2b9+uGTNm2HUJPeZ2u/XTn/60w0vSTsd1c90m4Lq5bhOYet19hWM+BAIAAIBL49j3AAIAAKBzBCAAAIBhCEAAAADDEIAAAACGIQD7odWrVysxMVHh4eFKTU3V3r177R4p6Pbs2aOZM2cqNjZWLpdLW7ZssXukkMjNzdUtt9yiIUOGKCoqSrNnz1Ztba3dYwVdfn6+xo8f7/+CWI/Ho3fffdfusUIqNzdXLpdLixcvtnuUoFu+fLlcLlfANmrUKLvHComGhgb9/d//vYYPH64rr7xSN910k6qqquweK6gSEhI6PN8ul0sLFy60ezSjEID9zKZNm7R48WI9++yzqq6u1qRJk5SRkRHwNTdO1NraqhtvvFGvvPKK3aOEVFlZmRYuXKiKigqVlJTozJkzSk9PV2trq92jBdXo0aO1YsUKVVZWqrKyUnfccYdmzZql999/3+7RQmL//v0qKCjQ+PHj7R4lZFJSUuT1ev3boUOH7B4p6D7//HPdfvvtGjhwoN5991198MEH+ud//mfbf8NUsO3fvz/guS4pKZEk3XfffTZPZha+BqafufXWW3XzzTcrPz/ffyw5OVmzZ89Wbm6ujZOFjsvl0ubNmzV79my7Rwm5P/7xj4qKilJZWZkmT55s9zghNWzYMP3TP/2THn30UbtHCapTp07p5ptv1urVq/XCCy/opptuUl5ent1jBdXy5cu1ZcsW1dTU2D1KSC1dulS/+c1vjHgVpzuLFy/Wf/7nf+ro0aNyuVx2j2MM7gD2I21tbaqqqlJ6enrA8fT0dO3bt8+mqRBKzc3NktpjyBRnz57Vxo0b1draKo/HY/c4Qbdw4ULdc889+uu//mu7Rwmpo0ePKjY2VomJiXrggQf00Ucf2T1S0G3dulVpaWm67777FBUVpQkTJui1116ze6yQOv/buB555BHiL8QIwH7kxIkTOnv2rKKjowOOR0dHq7Gx0aapECqWZSkrK0vf+973NG7cOLvHCbpDhw7p6quvltvtVmZmpjZv3qyxY8faPVZQbdy4UQcOHDDmbv55t956qzZs2KBdu3bptddeU2Njo2677TZ9+umndo8WVB999JHy8/P1ne98R7t27VJmZqaeeuop/68tNcGWLVt08uRJPfzww3aPYhxH/Co403z9X0mWZfEvJwMsWrRIBw8e1K9//Wu7RwmJpKQk1dTU6OTJkyouLtb8+fNVVlbm2Aisr6/X008/rd27dys8PNzucUIqIyPD//MNN9wgj8ejv/qrv9IvfvELZWVl2ThZcJ07d05paWn6+c9/LkmaMGGC3n//feXn5+uhhx6yebrQWLdunTIyMhQbG2v3KMbhDmA/MmLECA0YMKDD3b6mpqYOdwXhLE8++aS2bt2q9957T6NHj7Z7nJAYNGiQrr32WqWlpSk3N1c33nijXn75ZbvHCpqqqio1NTUpNTVVYWFhCgsLU1lZmVatWqWwsDCdPXvW7hFD5qqrrtINN9ygo0eP2j1KUMXExHT4B01ycrLjP9R33vHjx/Vf//Vfeuyxx+wexUgEYD8yaNAgpaam+j8xdV5JSYluu+02m6ZCMFmWpUWLFuntt9/Wr371KyUmJto9km0sy5LP57N7jKCZPn26Dh06pJqaGv+WlpamBx98UDU1NRowYIDdI4aMz+fT4cOHFRMTY/coQXX77bd3+Fqn3/3udxozZoxNE4XW+vXrFRUVpXvuucfuUYzES8D9TFZWlubNm6e0tDR5PB4VFBSorq5OmZmZdo8WVKdOndKHH37o3z927Jhqamo0bNgwxcfH2zhZcC1cuFBvvvmm3nnnHQ0ZMsR/9zcyMlKDBw+2ebrgWbZsmTIyMhQXF6cvvvhCGzduVGlpqXbu3Gn3aEEzZMiQDu/tvOqqqzR8+HDHv+czOztbM2fOVHx8vJqamvTCCy+opaVF8+fPt3u0oHrmmWd022236ec//7n+7u/+Tr/97W9VUFCggoICu0cLunPnzmn9+vWaP3++wsJIEVtY6HdeffVVa8yYMdagQYOsm2++2SorK7N7pKB77733LEkdtvnz59s9WlB1ds2SrPXr19s9WlA98sgj/v/GR44caU2fPt3avXu33WOF3JQpU6ynn37a7jGC7v7777diYmKsgQMHWrGxsdacOXOs999/3+6xQmLbtm3WuHHjLLfbbV1//fVWQUGB3SOFxK5duyxJVm1trd2jGIvvAQQAADAM7wEEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBhCEAAAADDEIAAAACGIQABAAAMQwACAAAYhgAEAAAwDAEIAABgGAIQAADAMAQgAACAYQhAAAAAwxCAAAAAhiEAAQAADEMAAgAAGIYABAAAMAwBCAAAYBgCEAAAwDAEIAAAgGEIQAAAAMMQgAAAAIYhAAEAAAxDAAIAABiGAAQAADAMAQgAAGAYAhAAAMAwBCAAAIBh/j94RPsDvp/RpAAAAABJRU5ErkJggg==", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "image[4,1] = 2\n", "\n", "plt.figure()\n", "plt.imshow(image.T, cmap = plt.cm.gray)\n", "plt.plot([0,4],[0,1], color='orange')\n", "plt.scatter([0,4],[0,1],color='blue');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Adding a Scale\n", "\n", "Adding a scale to the image is accomplished by setting the extent parameters in matplotlib. \n", "\n", "### Relative Scale\n", "Generally, it is recommended to use the field of view (length of axis times pixel-size in that direction) as the extent and the starting point is zero. \n", "\n", "The difference to most online code is that we set the field of view (FOV) of the y-axis first, to start the top left at 0 as it is custom in microscopy.\n", "\n", "The pixel size is accurate in that way. Addressing and plotting other parameters on top of the image will be in the scale expressed with the extent parameters.\n", "\n", "However, that there is a slight problem with the origin and the coordinate reference of a pixel, which will be discussed in the next subsection.\n" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "array([[0., 1., 0., 1., 0., 1., 0., 1.],\n", " [1., 0., 1., 0., 2., 0., 1., 0.],\n", " [0., 1., 0., 1., 0., 1., 0., 1.],\n", " [1., 0., 1., 0., 1., 0., 1., 0.]])" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "image.T" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "e9f82b46966b44bcbc5408d0f97b38a0", "version_major": 2, "version_minor": 0 }, "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAqpElEQVR4nO3df3RU9Z3/8dcIMoAkUaDJzJQQgwQFEWvBQqhC0JI1ZfmKtHvWH7VwPOvaii5Z2gXB7TGsmCC7ZXUPNVXbw+pRGs6uYHGrlLiagAfZRiQ1jRbxGDHtJmS1kAk/nBzD5/sHZsokRNFk5ib3/XycM+c0dybp58N7wn0yvww455wAAABgxjleLwAAAACpRQACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwACAAAYQwAC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qODpgsGggsFgt+MZGRmmfnE6paens29D2Lct7NsWq/s+5xxfvxXiU/ly59dee63q6upUW1sbv0ybNk233HKLamtrNW7cOIVCIVVWVsa/p729XdXV1Zo5c6aHKwcAAEg+Xz4CmJaWpsmTJyccO++88zRq1Kj48eLiYpWWliovL095eXkqLS3V8OHDdfPNN3uxZAAAgJTxZQCejeXLl+vEiRO68847dfjwYU2fPl07duxQWlraWf+MYDCo++6774xPC/sZ+2bfFrBv9m0B+7a179MFnOX3QAMAABjky9cAAgAAoGcEIAAAgDEEIAAAgDEEIAAAgDEE4Bf0yCOPKDc3V0OHDtXUqVO1a9cur5fU53bu3Kn58+crEokoEAjo2WefTbjeOaeSkhJFIhENGzZMBQUFqq+v92axfaSsrExXXnml0tLSlJmZqQULFsQ/OLyTH/ddXl6uKVOmxD8MNj8/Xy+88EL8ej/u+UzKysoUCARUXFwcP+bHvZeUlCgQCCRcQqFQ/Ho/7rnTH//4R33nO9/RqFGjNHz4cH3lK1/R3r1749f7ce8XXnhht3kHAgEtWbJEkj/3LEkff/yx/vEf/1G5ubkaNmyYxo0bp3/6p3/SyZMn47fx697PisPnVlFR4c4991z3+OOPuzfffNMtXbrUnXfeee7gwYNeL61PPf/88+7ee+91zzzzjJPktm7dmnD92rVrXVpamnvmmWdcXV2d++u//msXDoddNBr1ZsF94C/+4i/cxo0b3e9+9ztXW1vr5s2b58aOHeuOHj0av40f971t2zb3q1/9yu3fv9/t37/frVq1yp177rnud7/7nXPOn3vu6je/+Y278MIL3ZQpU9zSpUvjx/249/vuu89deumlrqmpKX5paWmJX+/HPTvn3J/+9CeXk5PjFi9e7P7nf/7HNTQ0uBdffNG988478dv4ce8tLS0Js66srHSS3Msvv+yc8+eenXNuzZo1btSoUe6//uu/XENDg/uP//gPN2LECPfQQw/Fb+PXvZ8NAvAL+NrXvua+973vJRy75JJL3D333OPRipKvawCePHnShUIht3bt2vixjz76yGVkZLif/vSnHqwwOVpaWpwkV11d7Zyzs2/nnLvgggvcz372MxN7bmtrc3l5ea6ystLNnj07HoB+3ft9993nLr/88jNe59c9O+fcihUr3FVXXdXj9X7e++mWLl3qLrroInfy5Elf73nevHnutttuSzi2cOFC953vfMc5Z2fePeEp4M+pvb1de/fuVWFhYcLxwsJC7d6926NVpV5DQ4Oam5sT/hyCwaBmz57tqz+H1tZWSYr/B8Mt7Lujo0MVFRU6duyY8vPzTex5yZIlmjdvnr7xjW8kHPfz3g8cOKBIJKLc3FzdeOONevfddyX5e8/btm3TtGnT9Fd/9VfKzMzUFVdcoccffzx+vZ/33qm9vV1PPfWUbrvtNgUCAV/v+aqrrtJ///d/6+2335Yk/fa3v9Urr7yib37zm5JszPvTmP0vgXxRH3zwgTo6OpSVlZVwPCsrS83NzR6tKvU693qmP4eDBw96saQ+55zTsmXLdNVVV8X/E4J+3nddXZ3y8/P10UcfacSIEdq6dasmTZoU/4vQj3uWpIqKCr3++uuqqanpdp1f5z19+nQ9+eSTmjBhgg4dOqQ1a9Zo5syZqq+v9+2eJendd99VeXm5li1bplWrVuk3v/mN/u7v/k7BYFDf/e53fb33Ts8++6yOHDmixYsXS/LvfVySVqxYodbWVl1yySUaNGiQOjo69MADD+imm26S5O+9nw0C8AsKBAIJXzvnuh2zwM9/DnfddZfeeOMNvfLKK92u8+O+L774YtXW1urIkSN65plntGjRIlVXV8ev9+OeGxsbtXTpUu3YsUNDhw7t8XZ+23tRUVH8f1922WXKz8/XRRddpCeeeEIzZsyQ5L89S9LJkyc1bdo0lZaWSpKuuOIK1dfXq7y8XN/97nfjt/Pj3jv9/Oc/V1FRkSKRSMJxP+558+bNeuqpp7Rp0yZdeumlqq2tVXFxsSKRiBYtWhS/nR/3fjZ4CvhzGj16tAYNGtTt0b6WlpZu/4rws853DPr1z+Huu+/Wtm3b9PLLL2vMmDHx437e95AhQzR+/HhNmzZNZWVluvzyy/Xwww/7es979+5VS0uLpk6dqsGDB2vw4MGqrq7Wv/3bv2nw4MHx/flx76c777zzdNlll+nAgQO+nnc4HNakSZMSjk2cOFHvv/++JH//fkvSwYMH9eKLL+pv/uZv4sf8vOd/+Id/0D333KMbb7xRl112mW699Vb9/d//vcrKyiT5e+9ngwD8nIYMGaKpU6eqsrIy4XhlZaVmzpzp0apSLzc3V6FQKOHPob29XdXV1QP6z8E5p7vuuktbtmzRSy+9pNzc3ITr/brvM3HOKRaL+XrP1157rerq6lRbWxu/TJs2Tbfccotqa2s1btw43+79dLFYTG+99ZbC4bCv5/31r3+928c6vf3228rJyZHk/9/vjRs3KjMzU/PmzYsf8/Oejx8/rnPOScycQYMGxT8Gxs97PyvevPdkYOv8GJif//zn7s0333TFxcXuvPPOc++9957XS+tTbW1tbt++fW7fvn1Oklu/fr3bt29f/ONu1q5d6zIyMtyWLVtcXV2du+mmmwb82+e///3vu4yMDFdVVZXwsQnHjx+P38aP+165cqXbuXOna2hocG+88YZbtWqVO+ecc9yOHTucc/7cc09Ofxewc/7c+w9+8ANXVVXl3n33Xbdnzx73l3/5ly4tLS3+d5gf9+zcqY/6GTx4sHvggQfcgQMH3NNPP+2GDx/unnrqqfht/Lr3jo4ON3bsWLdixYpu1/l1z4sWLXJf/vKX4x8Ds2XLFjd69Gi3fPny+G38uvezQQB+QT/5yU9cTk6OGzJkiPvqV78a/5gQP3n55ZedpG6XRYsWOedOvYX+vvvuc6FQyAWDQTdr1ixXV1fn7aJ76Uz7leQ2btwYv40f933bbbfF789f+tKX3LXXXhuPP+f8ueeedA1AP+6987POzj33XBeJRNzChQtdfX19/Ho/7rnTc8895yZPnuyCwaC75JJL3GOPPZZwvV/3/utf/9pJcvv37+92nV/3HI1G3dKlS93YsWPd0KFD3bhx49y9997rYrFY/DZ+3fvZCDjnnCcPPQIAAMATvAYQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAGAIQAADAmP8Pno4Xw/AqyL0AAAAASUVORK5CYII=", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "image[4,1] = 1\n", "\n", "scale_x = scale_y = 10\n", "FOV_x = image.shape[0]* scale_x\n", "FOV_y = image.shape[1]* scale_y\n", "image_extent = [0,FOV_x,FOV_y, 0]\n", "\n", "plt.figure()\n", "plt.imshow(image.T, extent = image_extent, cmap = plt.cm.gray)\n", "\n", "plt.plot(np.array([0,4])*scale_x, np.array([0,1])*scale_y, color='orange')\n", "## while above coordinates are translated from pixel, next we use directly image coordinates\n", "plt.scatter([0,40],[0,10],color='blue');" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Correct Absolute Scale\n", "\n", "We can see that in the image above the relative scale, which means the size of the pixel, is accurate and the y-axis is numbered as we are used to. \n", "\n", "Plotting a line from pixel [0,0] to pixel [4,1] however reveals that the origin of the pixels moved from the center to the top left corner. \n", "\n", "This is usually not a problem however it can lead to problems in plotting of parameters with subpixel accuracy, where the origin of the matrix pixel is regarded ``at the center``.\n", "\n", "The correct scale needs to be shifted by half a pixel:\n" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "application/vnd.jupyter.widget-view+json": { "model_id": "d880823c01a846ef9100311720ce5987", "version_major": 2, "version_minor": 0 }, "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoAAAAHgCAYAAAA10dzkAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjguMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy81sbWrAAAACXBIWXMAAA9hAAAPYQGoP6dpAAAppElEQVR4nO3df3BV9Z3/8dcF5AqSXASa3HtNDKmiggiLYCFUJNjCmHYpSOtsddeFcepKF12z2BWh0zHsVoLslF13UeqPflkdS5PZCpbOCpp+NYEOZgwYxixYSsegURNTLOTGYG8G8vn+gblfbn4Iktx7kvN+PmbuaM69iZ/DO4fz9Nx7k4BzzgkAAABmDPF6AQAAAEgvAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYAhAAAMAYswE4fvx4BQKBpNtDDz3k9bIAAABSbpjXC/DSP//zP+vuu+9OfDxq1CgPVwMAAJAepgMwIyND4XDY62UAAACkVcA557xehBfGjx+veDyu9vZ25ebm6rbbbtM//dM/afjw4b1+TjweVzweT3zc0dGhP/3pTxo7dqwCgUA6lg0AAPrIOafW1lZFo1ENGWLz1XBmrwDef//9uv7663XppZfqjTfe0OrVq1VfX69nnnmm188pLS3V2rVr07hKAACQKg0NDcrJyfF6GZ7w1RXAkpKScwZaTU2NZsyY0W37Cy+8oO985zs6duyYxo4d2+Pndr0C2NLSossvv7xvix6kWlpavF6CJ0KhkNdL8ATztoV522Jx3rFYTLm5uTpx4oTZufsqAI8dO6Zjx4597mPGjx+viy++uNv2Dz74QDk5OaqurtbMmTPP678Xi8XMfuP46NvmC7H6VD/ztoV522Jx3p3n75aWFmVmZnq9HE/46ingcePGady4cRf0ubW1tZKkSCTSn0sCAAAYcHwVgOfr9ddfV3V1tebNm6dQKKSamhr94z/+o771rW+ZfUoXAADYYTIAg8GgysvLtXbtWsXjceXl5enuu+/Wgw8+6PXSAAAAUs5XrwFMN14DaA+vEbKFedvCvO3gNYCGfxUcAACAVQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMcO8XgAuxBBJcyRFJDVK2iOpw9MVAQCAwcP8FcAnnnhC+fn5uvjiizV9+nTt2bPH6yWdw62SjkqqlPSLz/559LPtAAAA52Y6AMvLy1VcXKwf/vCHqq2t1Zw5c1RUVKT33nvP66X14lZJv5R0WZftl322nQgEAADnFnDOOa8X4ZWZM2fq+uuv1+bNmxPbJk6cqMWLF6u0tPScnx+LxRQKhVK5xLMM0ZkrfZep527vkPS+pHyl4+lgq982gUDA6yV4gnnbwrxtsTjvzvN3S0uLMjMzvV6OJ8y+BrC9vV379+/XQw89lLR9wYIF2rt3b4+fE4/HFY/HEx/HYrGUrjHZHEm5iY9eKF6i+j/mq/JQofYcnqOWk6MlXf7Z46rSuC4AADDYmA3AY8eO6fTp08rOzk7anp2draamph4/p7S0VGvXrk3H8noQSfxb9NIPtOSG7ZKkB76xUR0dAdW+O02Vbxeq8lCH9hyWWk56tEwAADDgmQ3ATl0v+Tvnen0aYPXq1Vq5cmXi41gsptzc3B4f2/8aE//WcjKk7/7nL1Q4qVKFEyt1TfSwpue/qen5b+qBb0gdHVLtu1Ll21LlIRGEAAAgidkAHDdunIYOHdrtal9zc3O3q4KdgsGggsFgOpbXgz2SGiRdprb4KJVXf1fl1d+VJEVGf6i5E19T4cSXVDhxq66OStPzz9wIQgAA0JX5N4FMnz5dTzzxRGLbpEmTtGjRogH4JhDp/78LWEp+I0jnmz6+I2m7IqOluROlws9uV0eTv0p/BKHVbxteJG4L87aFedvBm0CMB2B5ebnuvPNO/fSnP1VBQYGeeuopPf300zp48KDy8vLO+fnpD0DpTAQ+prPfECK9J6lY0vYePyMVQWj124YThC3M2xbmbQcBaDwApTM/CHrDhg1qbGzU5MmT9W//9m+66aabzutzvQlAqa+/CaQ/gtDqtw0nCFuYty3M2w4CkADsE+8CsH9dSBCeaLP5bcMJwhbmbQvztoMAJAD7xC8B2NX5BOGQsddL2YVSVqGUNUcaPjr9C/UAJwhbmLctzNsOApAA7BO/BmBX5wpCKSBdOs1EEHKCsIV528K87SAACcA+sRKAXUVGSx/WbpWaK6WPKqXW33d5hH+DkBOELczbFuZtBwFIAPaJ1QCUuvyFcfJDqbnKRBBygrCFedvCvO0gAAnAPiEAe+HjIOQEYQvztoV520EAEoB9QgCeJx8FIScIW5i3LczbDgKQAOwTAvACDeIg5ARhC/O2hXnbQQASgH1CAPaTQRSEnCBsYd62MG87CEACsE8IwBQZwEHICcIW5m0L87aDACQA+4QATJMBFIScIGxh3rYwbzsIQAKwTwhAj3gYhJwgbGHetjBvOwhAArBPCMABIo1ByAnCFuZtC/O2gwAkAPuEABygUhiEnCBsYd62MG87CEACsE8IwEGiH4OQE4QtzNsW5m0HAUgA9gkBOEj1IQg5QdjCvG1h3nYQgARgnxCAPvEFgnDh9zZqz2Gp5aQH6/SQr+b9BRAEtjBvOwhAArBPCECfOkcQdnRIte9KlW9LlYdkIgh9Pe/PQRDYwrztIAAJwD4hAI04KwgP735KV0eT77YQhKbmfRaCwBbmbQcBSAD2CQFoTyAQUGS0NHeiVPjZzUIQWp63RczbFovzJgAJwD4hAO3p6QRhIQiZty3M2xaL8yYADQdgSUmJ1q5dm7QtOztbTU1N5/01CEB7zucE4ccgZN62MG9bLM6bAJSGeb0AL1177bX6zW9+k/h46NChHq4GftF4Qip7/cxN6jkIp+efuT3wjcEZhACAwc10AA4bNkzhcNjrZcDnCEIAwEBjOgCPHDmiaDSqYDComTNnat26dfryl7/c6+Pj8bji8Xji41gsJkkmLyHzVEk/6vJjZ4a0/j4pCPvzdxlfKOZtC/O2xeq8rTP7GsCdO3fq5MmTuuqqq/TRRx/pxz/+sX73u9/p4MGDGjt2bI+f09PrBiUC0JK0HC4p/F3GF4p528K8bbE6b8nm+buT2QDsqq2tTVdccYUefPBBrVy5ssfH9HQFMDc31+Q3kNW/MDw5XAZAEDJvW5i3LVbnLdkOQNNPAZ/tkksu0XXXXacjR470+phgMKhgMJjGVQGSRkal8befuUk9B+HxN8/cfrdRA+EpYwDAwEYAfiYej+vtt9/WnDlzvF4K8PkIQgBAH5l9CvgHP/iBFi5cqMsvv1zNzc368Y9/rKqqKtXV1SkvL++8voblnyNk9SmDQXG4pOApY+ZtC/O2xeq8JZ4CNun999/X7bffrmPHjulLX/qSZs2aperq6vOOP2DA4gohAOAczF4B7A9cAbTHF4fLBVwhDAQvTfsyBwJfzPsCcHzbYnXeku0rgARgHxCA9vjycDmPINxf70z+YGpfzvs8cHzbYnXeEgFo8zu+HxCA9pg4XM4RhJZ+U4mJefeA49sWq/OWCECb3/H9gAC0x+ThcvJD3f71y5J+dd3Z/ByEJuctjm9rrM5bIgBtfsf3AwLQHquHy9nz7ul3GZ/NT0HIvG1h3vZYPH93IgD7gAC0x+rh8nnz9nMQMm9bmLc9Fs/fnQjAPiAA7bF6uHyRefspCJm3LczbHovn704EYB8QgPZYPVz6Mu/BHITM2xbmbY/F83cnArAPCEB7rB4u/TnvwRSEzNsW5m2PxfN3JwKwDwhAe6weLqmc90AOQuZtC/O2x+L5uxMB2AcEoD1WD5d0znsgBSHztoV522Px/N2JAOwDAtAeq4eLl/P2MgiZty3M2x6L5+9OBGAfEID2WD1cBtK80xmEzNsW5m2PxfN3JwKwDwhAe6weLgN53qkMQuZtC/O2x+L5uxMB2AcEoD1WD5fBNO/+DELmbQvztsfi+bsTAdgHBKA9Vg+XwTzvvgQh87aFedtj8fzdiQDsAwLQHquHi5/m/UWC8IH1O6SsOdLw0V4s1TN+mvcXwfFtj8XzdycCsA8IQHusHi5+nve5glAKSJdOk7ILpaxCE0Ho53l/Ho5veyyevzsRgH1AANpj9XCxNO+zg/CexVdJrb/v8gj/B6GleZ+N49sei+fvTgRgHxCA9lg9XEzP++SHUnOV1FwpfVRpIghNz9sgq/OWCECb3/H9gAC0x+rhwrzPkuIgPH1a2rNHamyUIhFpzhxp6NAL3oULwrxtsTpvyXYADvF6Aamye/duLVy4UNFoVIFAQC+++GLS/c45lZSUKBqNasSIESosLNTBgwe9WSyAwWNkVBp/u/SVJ6WFh6XFH0izt0pX/p2UcZUkJx1/U/rdRmn3t6RfjpF2TpfefEB6/9dS+4lev/S2bdL48dK8edIdd5z55/jxZ7YDQH/ybQC2tbVp6tSp2rRpU4/3b9iwQRs3btSmTZtUU1OjcDis+fPnq7W1Nc0rBTCo9VMQbtsmfec70vvvJ3/5Dz44s50IBNCfTDwFHAgEtH37di1evFjSmat/0WhUxcXFWrVqlSQpHo8rOztbjz76qO65557z+ro8BWyPgcOlR8y7D87jKWN36TQ9/atC/fqNQu05PEctJ0cnPyIg5eRI9fXpeTqYedtidd6S7aeATQbgO++8oyuuuEJvvvmmpk2blnjcokWLNHr0aD377LM9fp14PK54PJ74OBaLKTc31+Q3kNW/MAwcLj1i3v3oHEHY0RFQ7bvTVPl2oTb8+kE1x7IT9732mlRY2P9L6op522J13pLtAPTtU8Cfp6mpSZKUnZ2dtD07OztxX09KS0sVCoUSt9zc3JSuE4AP9fCU8V5t1ZP/9+90+MOrNGSI0/T8N1V8y78rfiqY9KmNjR6tGYDvDPN6AV7q+n89zrnP/T+h1atXa+XKlYmPO68AAsAFGxlVe/R2Lf8/t0uSIqM/1NyJVboy+w/dngqORDxYHwBfMhmA4XBY0pkrgZGz/kZtbm7udlXwbMFgUMFgsNf7AeBCzJlz5jV+H3wgNZ6Iquz125Pu73wN4Jw5Hi0QgO+YfAo4Pz9f4XBYFRUViW3t7e2qqqrS7NmzPVwZAIuGDpUee+zMv3d9EqLz43//9/T/PEAA/uXbAPzkk0904MABHThwQJJUX1+vAwcO6L333lMgEFBxcbHWrVun7du363//93+1bNkyjRw5UnfccYe3Cwdg0pIl0i9/KV12WfL2nJwz25cs8WZdAPzJt+8Crqys1Lx587ptX7p0qf7rv/5LzjmtXbtWTz75pI4fP66ZM2fq8ccf1+TJk8/7v8GPgbHHp4fLOTHv9OE3gXiH49sei+fvTr4NwHQgAO2xergwb1uYty1W5y3ZDkDfPgUMAACAnhGAAAAAxhCAAAAAxhCAAAAAxhCAAAAAxhCAAAAAxhCAAAAAxhCAAAAAxhCAAAAAxhCAAAAAxhCAAAAAxhCAAAAAxhCAAAAAxhCAAAAAxhCAAAAAxhCAAAAAxhCAAAAAxhCAAAAAxhCAAAAAxhCAAAAAxvg2AHfv3q2FCxcqGo0qEAjoxRdfTLp/2bJlCgQCSbdZs2Z5s1gAAIA08m0AtrW1aerUqdq0aVOvj7nlllvU2NiYuL300ktpXCEAAIA3hnm9gFQpKipSUVHR5z4mGAwqHA6naUUAAAADg28D8HxUVlYqKytLo0eP1ty5c/XII48oKyur18fH43HF4/HEx7FYTJIUCoVSvtaBxjnn9RI8EQgEvF6CJ5i3LczbFovzjsViJs/dZ/PtU8DnUlRUpJ///Od69dVX9ZOf/EQ1NTW6+eabkwKvq9LSUoVCocQtNzc3jSsGAADoHwFnIP0DgYC2b9+uxYsX9/qYxsZG5eXlqaysTEuWLOnxMT1dAbQagQa+bXrEFQJbmLctzNuOziuALS0tyszM9Ho5njD9FPDZIpGI8vLydOTIkV4fEwwGFQwG07gqAACA/mf2KeCuPv74YzU0NCgSiXi9FAAAgJTy7RXATz75RH/4wx8SH9fX1+vAgQMaM2aMxowZo5KSEn37299WJBLR0aNHtWbNGo0bN0633nqrh6sGAABIPd8G4L59+zRv3rzExytXrpQkLV26VJs3b1ZdXZ2ee+45nThxQpFIRPPmzVN5ebkyMjK8WjIAAEBamHgTSKpYfhu51W8bXiRuC/O2hXnbwZtAeA0gAACAOQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMQQgAACAMb4NwNLSUt1www3KyMhQVlaWFi9erMOHDyc9xjmnkpISRaNRjRgxQoWFhTp48KBHKwYAAEgP3wZgVVWVVqxYoerqalVUVOjUqVNasGCB2traEo/ZsGGDNm7cqE2bNqmmpkbhcFjz589Xa2urhysHAABIrYBzznm9iHT44x//qKysLFVVVemmm26Sc07RaFTFxcVatWqVJCkejys7O1uPPvqo7rnnnnN+zVgsplAolOqlD0hGvm26CQQCXi/BE8zbFuZti8V5d56/W1palJmZ6fVyPOHbK4BdtbS0SJLGjBkjSaqvr1dTU5MWLFiQeEwwGNTcuXO1d+/eHr9GPB5XLBZLugEAAAw2JgLQOaeVK1fqxhtv1OTJkyVJTU1NkqTs7Oykx2ZnZyfu66q0tFShUChxy83NTe3CAQAAUsBEAN57771666239Itf/KLbfV0v+Tvnen0aYPXq1WppaUncGhoaUrJeAACAVBrm9QJS7b777tOOHTu0e/du5eTkJLaHw2FJZ64ERiKRxPbm5uZuVwU7BYNBBYPB1C4YAAAgxXx7BdA5p3vvvVfbtm3Tq6++qvz8/KT78/PzFQ6HVVFRkdjW3t6uqqoqzZ49O93LBQAASBvfXgFcsWKFtm7dql/96lfKyMhIvK4vFAppxIgRCgQCKi4u1rp16zRhwgRNmDBB69at08iRI3XHHXd4vHoAAIDU8e2PgentdXxbtmzRsmXLJJ25Srh27Vo9+eSTOn78uGbOnKnHH3888UaRc+HHwNjDj4mwhXnbwrzt4MfA+DgA04EAtIcThC3M2xbmbQcB6OPXAAIAAKBnBCAAAIAxBCAAAIAxBCAAAIAxBCAAAIAxBCAAAIAxBCAAAIAxBCAAAIAxBCAAAIAxBCAAAIAxBCAAAIAxBCAAAIAxBCAAAIAxBCAAAIAxBCAAAIAxBCAAAIAxBCAAAIAxBCAAAIAxBCAAAIAxBCAAAIAxvg3A0tJS3XDDDcrIyFBWVpYWL16sw4cPJz1m2bJlCgQCSbdZs2Z5tGIAAID08G0AVlVVacWKFaqurlZFRYVOnTqlBQsWqK2tLelxt9xyixobGxO3l156yaMVAwAApMcwrxeQKrt27Ur6eMuWLcrKytL+/ft10003JbYHg0GFw+F0Lw8AAMAzvr0C2FVLS4skacyYMUnbKysrlZWVpauuukp33323mpube/0a8XhcsVgs6QYAADDYBJxzzutFpJpzTosWLdLx48e1Z8+exPby8nKNGjVKeXl5qq+v149+9COdOnVK+/fvVzAY7PZ1SkpKtHbt2m7bW1palJmZmdJ9GGgCgYDXS/CEgcOlR8zbFuZti9V5SzbP351MBOCKFSv0P//zP/rtb3+rnJycXh/X2NiovLw8lZWVacmSJd3uj8fjisfjiY9jsZhyc3NNfgNZ/QvDwOHSI+ZtC/O2xeq8JdsB6NvXAHa67777tGPHDu3evftz40+SIpGI8vLydOTIkR7vDwaDPV4ZBAAAGEx8G4DOOd13333avn27KisrlZ+ff87P+fjjj9XQ0KBIJJKGFQIAAHjDt28CWbFihZ5//nlt3bpVGRkZampqUlNTkz799FNJ0ieffKIf/OAHev3113X06FFVVlZq4cKFGjdunG699VaPVw8AAJA6vn0NYG+vadiyZYuWLVumTz/9VIsXL1Ztba1OnDihSCSiefPm6V/+5V+Um5t7Xv+NWCymUChk8jUEVl8z4tPD5ZyYty3M2xar85Z4DaAvnetAHjFihF5++eU0rQYAAGDg8O1TwAAAAOgZAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGCMbwNw8+bNmjJlijIzM5WZmamCggLt3Lkzcb9zTiUlJYpGoxoxYoQKCwt18OBBD1cMAACQHr4NwJycHK1fv1779u3Tvn37dPPNN2vRokWJyNuwYYM2btyoTZs2qaamRuFwWPPnz1dra6vHKwcAAEitgHPOeb2IdBkzZoz+9V//VXfddZei0aiKi4u1atUqSVI8Hld2drYeffRR3XPPPef19WKxmEKhkFpaWpSZmZnKpQ84gUDA6yV4wtDhkoR528K8bbE6b0kmz9+dfHsF8GynT59WWVmZ2traVFBQoPr6ejU1NWnBggWJxwSDQc2dO1d79+7t9evE43HFYrGkGwAAwGDj6wCsq6vTqFGjFAwGtXz5cm3fvl2TJk1SU1OTJCk7Ozvp8dnZ2Yn7elJaWqpQKJS45ebmpnT9AAAAqeDrALz66qt14MABVVdX6/vf/76WLl2qQ4cOJe7vetnbOfe5l8JXr16tlpaWxK2hoSFlawcAAEiVYV4vIJWGDx+uK6+8UpI0Y8YM1dTU6LHHHku87q+pqUmRSCTx+Obm5m5XBc8WDAYVDAZTu2gAAIAU8/UVwK6cc4rH48rPz1c4HFZFRUXivvb2dlVVVWn27NkerhAAACD1fHsFcM2aNSoqKlJubq5aW1tVVlamyspK7dq1S4FAQMXFxVq3bp0mTJigCRMmaN26dRo5cqTuuOMOr5cOAACQUr4NwI8++kh33nmnGhsbFQqFNGXKFO3atUvz58+XJD344IP69NNP9fd///c6fvy4Zs6cqVdeeUUZGRkerxwAACC1TP0cwP7GzwG0x+rhwrxtYd62WJ23xM8BBAAAgCEEIAAAgDEEIAAAgDEEIAAAgDEEIAAAgDEEIAAAgDEEIAAAgDEEIAAAgDEEIAAAgDEEIAAAgDEEIAAAgDEEIAAAgDEEIAAAgDEEIAAAgDEEIAAAgDEEIAAAgDEEIAAAgDEEIAAAgDEEIAAAgDEEIAAAgDG+DcDNmzdrypQpyszMVGZmpgoKCrRz587E/cuWLVMgEEi6zZo1y8MVAwAApMcwrxeQKjk5OVq/fr2uvPJKSdKzzz6rRYsWqba2Vtdee60k6ZZbbtGWLVsSnzN8+HBP1goAAJBOvg3AhQsXJn38yCOPaPPmzaqurk4EYDAYVDgc9mJ5AAAAnvFtAJ7t9OnT+u///m+1tbWpoKAgsb2yslJZWVkaPXq05s6dq0ceeURZWVm9fp14PK54PJ74uKWlRZIUi8VSt3gMKMzaFuZtC/O2xznn9RI8E3A+3vu6ujoVFBToz3/+s0aNGqWtW7fqG9/4hiSpvLxco0aNUl5enurr6/WjH/1Ip06d0v79+xUMBnv8eiUlJVq7dm06dwEAAKRIQ0ODcnJyvF6GJ3wdgO3t7Xrvvfd04sQJvfDCC3rmmWdUVVWlSZMmdXtsY2Oj8vLyVFZWpiVLlvT49bpeAezo6NCf/vQnjR07VoFAIGX70ZNYLKbc3Fw1NDQoMzMzrf9tL7Hf7LcF7Df7bYGX++2cU2trq6LRqIYM8e37YT+Xr58CHj58eOJNIDNmzFBNTY0ee+wxPfnkk90eG4lElJeXpyNHjvT69YLBYLerg6NHj+7XNX9Rne9ytob9toX9toX9tsWr/Q6FQmn/bw4kprLXOZd0Be9sH3/8sRoaGhSJRNK8KgAAgPTy7RXANWvWqKioSLm5uWptbVVZWZkqKyu1a9cuffLJJyopKdG3v/1tRSIRHT16VGvWrNG4ceN06623er10AACAlPJtAH700Ue688471djYqFAopClTpmjXrl2aP3++Pv30U9XV1em5557TiRMnFIlENG/ePJWXlysjI8PrpZ+XYDCohx9+uNc3rPgV+81+W8B+s98WWN3vgcLXbwIBAABAd6ZeAwgAAAACEAAAwBwCEAAAwBgCEAAAwBgCcBB64oknlJ+fr4svvljTp0/Xnj17vF5Sv9u9e7cWLlyoaDSqQCCgF198Mel+55xKSkoUjUY1YsQIFRYW6uDBg94stp+UlpbqhhtuUEZGhrKysrR48WIdPnw46TF+3O/NmzdrypQpiR8GW1BQoJ07dybu9+M+96S0tFSBQEDFxcWJbX7c95KSEgUCgaRbOBxO3O/Hfe70wQcf6G/+5m80duxYjRw5Un/xF3+h/fv3J+73476PHz++27wDgYBWrFghyZ/7PFgQgINMeXm5iouL9cMf/lC1tbWaM2eOioqK9N5773m9tH7V1tamqVOnatOmTT3ev2HDBm3cuFGbNm1STU2NwuGw5s+fr9bW1jSvtP9UVVVpxYoVqq6uVkVFhU6dOqUFCxaora0t8Rg/7ndOTo7Wr1+vffv2ad++fbr55pu1aNGixEnAj/vcVU1NjZ566ilNmTIlabtf9/3aa69VY2Nj4lZXV5e4z6/7fPz4cX31q1/VRRddpJ07d+rQoUP6yU9+kvTbpPy47zU1NUmzrqiokCTddtttkvy5z4OGw6Dyla98xS1fvjxp2zXXXOMeeughj1aUepLc9u3bEx93dHS4cDjs1q9fn9j25z//2YVCIffTn/7UgxWmRnNzs5PkqqqqnHN29ts55y699FL3zDPPmNjn1tZWN2HCBFdRUeHmzp3r7r//fuecf+f98MMPu6lTp/Z4n1/32TnnVq1a5W688cZe7/fzvp/t/vvvd1dccYXr6Ogws88DFVcAB5H29nbt379fCxYsSNq+YMEC7d2716NVpV99fb2ampqS/hyCwaDmzp3rqz+HlpYWSdKYMWMk2djv06dPq6ysTG1tbSooKDCxzytWrNA3v/lNff3rX0/a7ud9P3LkiKLRqPLz8/Xd735X77zzjiR/7/OOHTs0Y8YM3XbbbcrKytK0adP09NNPJ+738753am9v1/PPP6+77rpLgUDAxD4PZATgIHLs2DGdPn1a2dnZSduzs7PV1NTk0arSr3Nf/fzn4JzTypUrdeONN2ry5MmS/L3fdXV1GjVqlILBoJYvX67t27dr0qRJvt5nSSorK9Obb76p0tLSbvf5dd9nzpyp5557Ti+//LKefvppNTU1afbs2fr44499u8+S9M4772jz5s2aMGGCXn75ZS1fvlz/8A//oOeee06Sf+d9thdffFEnTpzQsmXLJNnY54HMt78Kzs8CgUDSx865btss8POfw7333qu33npLv/3tb7vd58f9vvrqq3XgwAGdOHFCL7zwgpYuXaqqqqrE/X7c54aGBt1///165ZVXdPHFF/f6OL/te1FRUeLfr7vuOhUUFOiKK67Qs88+q1mzZkny3z5LUkdHh2bMmKF169ZJkqZNm6aDBw9q8+bN+tu//dvE4/y4751+9rOfqaioSNFoNGm7n/d5IOMK4CAybtw4DR06tNv/GTU3N3f7Pyg/63zHoF//HO677z7t2LFDr732mnJychLb/bzfw4cP15VXXqkZM2aotLRUU6dO1WOPPebrfd6/f7+am5s1ffp0DRs2TMOGDVNVVZX+4z/+Q8OGDUvsnx/3/WyXXHKJrrvuOh05csTX845EIpo0aVLStokTJybewOfnfZekd999V7/5zW/0ve99L7HN7/s80BGAg8jw4cM1ffr0xLuoOlVUVGj27NkerSr98vPzFQ6Hk/4c2tvbVVVVNaj/HJxzuvfee7Vt2za9+uqrys/PT7rfr/vdE+ec4vG4r/f5a1/7murq6nTgwIHEbcaMGfrrv/5rHThwQF/+8pd9u+9ni8fjevvttxWJRHw9769+9avdfqzT73//e+Xl5Uny//G9ZcsWZWVl6Zvf/GZim9/3ecDz6M0nuEBlZWXuoosucj/72c/coUOHXHFxsbvkkkvc0aNHvV5av2ptbXW1tbWutrbWSXIbN250tbW17t1333XOObd+/XoXCoXctm3bXF1dnbv99ttdJBJxsVjM45VfuO9///suFAq5yspK19jYmLidPHky8Rg/7vfq1avd7t27XX19vXvrrbfcmjVr3JAhQ9wrr7zinPPnPvfm7HcBO+fPfX/ggQdcZWWle+edd1x1dbX7y7/8S5eRkZH4O8yP++ycc2+88YYbNmyYe+SRR9yRI0fcz3/+czdy5Ej3/PPPJx7j130/ffq0u/zyy92qVau63efXfR4MCMBB6PHHH3d5eXlu+PDh7vrrr0/8mBA/ee2115ykbrelS5c65878yISHH37YhcNhFwwG3U033eTq6uq8XXQf9bS/ktyWLVsSj/Hjft91112J7+cvfelL7mtf+1oi/pzz5z73pmsA+nHf/+qv/spFIhF30UUXuWg06pYsWeIOHjyYuN+P+9zp17/+tZs8ebILBoPummuucU899VTS/X7d95dfftlJcocPH+52n1/3eTAIOOecJ5ceAQAA4AleAwgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGAMAQgAAGDM/wNudxgOEearDQAAAABJRU5ErkJggg==", "text/html": [ "\n", "
\n", "
\n", " Figure\n", "
\n", " \n", "
\n", " " ], "text/plain": [ "Canvas(toolbar=Toolbar(toolitems=[('Home', 'Reset original view', 'home', 'home'), ('Back', 'Back to previous …" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "image[4,1] = 1\n", "\n", "scale_x = scale_y = 10\n", "FOV_x = image.shape[0]* scale_x\n", "FOV_y = image.shape[1]* scale_y\n", "\n", "## Set correct image extent\n", "image_extent = (np.array([0,image.shape[0],image.shape[1], 0])-0.5)*(scale_x,scale_x,scale_y,scale_y)\n", "\n", "plt.figure()\n", "plt.imshow(image.T, extent = image_extent, cmap = plt.cm.gray)\n", "\n", "plt.plot(np.array([0,4])*scale_x, np.array([0,1])*scale_y, color='orange')\n", "## while above coordinates are translated from pixel here we use directly image coordinates\n", "plt.scatter([0,40],[0,10],color='blue'); " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Summary\n", "\n", "So internally we use the mathematical convention of matrices and all we have to take care of is that the output plot of the image is the right kind around. \n", "\n", "For absolute pixel positions we need to shift the ``grid`` by half a pixel to keep the pixel origin in the center of the pixels.\n", "\n", "The advantage of this approach is that no other effort has to be spent to keep track on what axis is where, which can get cumbersome in multidimensional datasets." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Navigation\n", "- **Back [Installation and Prerequisites](CH1_02-Prerequisites.ipynb))** \n", "- **Next: [Open a (DM) file ](CH1_04-Open_File.ipynb)** \n", "- **Chapter 1: [Introduction](CH1_00-Introduction.ipynb)** \n", "- **List of Content: [Front](../_MSE672_Intro_TEM.ipynb)** \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.7" }, "toc": { "base_numbering": "4", "nav_menu": {}, "number_sections": true, "sideBar": true, "skip_h1_title": false, "title_cell": "Table of Contents", "title_sidebar": "Contents", "toc_cell": false, "toc_position": {}, "toc_section_display": true, "toc_window_display": true }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": true }, "vscode": { "interpreter": { "hash": "838e0debddb5b6f29d3d8c39ba50ae8c51920a564d3bac000e89375a158a81de" } } }, "nbformat": 4, "nbformat_minor": 4 }