2023-04-03 13:08:49 +02:00
|
|
|
{
|
|
|
|
"cells": [
|
|
|
|
{
|
|
|
|
"cell_type": "markdown",
|
|
|
|
"metadata": {},
|
|
|
|
"source": [
|
|
|
|
"Exercise 1b: Read a binary file which contains pixel data and apply\n",
|
|
|
|
"transformations"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2023-04-11 13:16:53 +02:00
|
|
|
"execution_count": 1,
|
2023-04-03 13:08:49 +02:00
|
|
|
"metadata": {},
|
|
|
|
"outputs": [],
|
|
|
|
"source": [
|
|
|
|
"import numpy as np\n",
|
|
|
|
"import matplotlib.pyplot as plt"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2023-04-11 13:16:53 +02:00
|
|
|
"execution_count": 2,
|
2023-04-03 13:08:49 +02:00
|
|
|
"metadata": {},
|
2023-04-11 13:16:53 +02:00
|
|
|
"outputs": [
|
|
|
|
{
|
|
|
|
"name": "stdout",
|
|
|
|
"output_type": "stream",
|
|
|
|
"text": [
|
|
|
|
"(2, 59520)\n"
|
|
|
|
]
|
|
|
|
}
|
|
|
|
],
|
2023-04-03 13:08:49 +02:00
|
|
|
"source": [
|
|
|
|
"# load figure as 2D array \n",
|
|
|
|
"data = np.load('horse.npy')\n",
|
|
|
|
"print(data.shape)"
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
"cell_type": "code",
|
2023-04-11 13:16:53 +02:00
|
|
|
"execution_count": 3,
|
2023-04-03 13:08:49 +02:00
|
|
|
"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",
|
2023-04-11 13:16:53 +02:00
|
|
|
"execution_count": 4,
|
2023-04-03 13:08:49 +02:00
|
|
|
"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",
|
2023-04-11 13:16:53 +02:00
|
|
|
"execution_count": 5,
|
2023-04-03 13:08:49 +02:00
|
|
|
"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",
|
2023-04-11 13:16:53 +02:00
|
|
|
"execution_count": 6,
|
2023-04-03 13:08:49 +02:00
|
|
|
"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",
|
2023-04-11 13:16:53 +02:00
|
|
|
"execution_count": 7,
|
2023-04-03 13:08:49 +02:00
|
|
|
"metadata": {},
|
2023-04-11 13:16:53 +02:00
|
|
|
"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"
|
|
|
|
}
|
|
|
|
],
|
2023-04-03 13:08:49 +02:00
|
|
|
"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
|
|
|
|
}
|