|
|
{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "Exercise 1b: Read a binary file which contains pixel data and apply\n", "transformations" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(2, 59520)\n" ] } ], "source": [ "# load figure as 2D array \n", "data = np.load('horse.npy')\n", "print(data.shape)" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": [ "# just scale the data by a factor and shift by trans\n", "trans = np.ones(data.shape)\n", "trans[0,:] *=0.6\n", "trans[1,:] *=0.4\n", "factor = 0.5 \n", "data_scale = data * factor + trans" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "#compression in x and y \n", "sx = 0.4\n", "sy = 0.9\n", "t = np.array([[sx,0],[0,sy]])\n", "data_comp = t@data" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "#rotation by an angle theta\n", "theta = 0.5\n", "data_rot = np.array([[np.cos(theta),-np.sin(theta)],[np.sin(theta), np.cos(theta)]])@data" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [], "source": [ "#spiegelung an der x Achse\n", "tx = np.array([[1,0],[0,-1]]) # mirror x axis\n", "ty = np.array([[-1,0],[0,1]]) # mirror y axis\n", "tp = np.array([[-1,0],[0,-1]]) # mirror (0,0)\n", "data_mirror = tp@data" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(-1.2, 1.2, -1.2, 1.2)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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 "text/plain": [ "<Figure size 1000x1000 with 4 Axes>" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# create figure for the transformations\n", "plt.figure(figsize=(10.0,10.0),dpi=100,facecolor='lightgrey')\n", "plt.suptitle('Plot Transformations')\n", "plt.subplot(2,2,1)\n", "plt.title('original picture')\n", "plt.plot(data[0,:],data[1,:],'.')\n", "plt.axis([-1.2,1.2,-1.2,1.2])\n", "plt.subplot(2,2,2)\n", "plt.title('scaling and translation')\n", "plt.plot(data_scale[0,:],data_scale[1,:],'.')\n", "plt.axis([-1.2,1.2,-1.2,1.2])\n", "plt.subplot(2,2,3)\n", "plt.title('compression')\n", "plt.plot(data_comp[0,:],data_comp[1,:],'.')\n", "plt.axis([-1.2,1.2,-1.2,1.2])\n", "plt.subplot(2,2,4)\n", "plt.title('rotation and mirror at p(0,0)')\n", "plt.plot(data_rot[0,:],data_rot[1,:],'.')\n", "plt.plot(data_mirror[0,:],data_mirror[1,:],'.')\n", "plt.axis([-1.2,1.2,-1.2,1.2])" ] } ], "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.8.16" } }, "nbformat": 4, "nbformat_minor": 4 }
|