{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "### Informacja o wyświetlaniu w notebooku\n", "Można sprawdzić działanie kilku trybów wyświetlania `%matplotlib` i sprawdzić co wygodniejsze (i co działa...)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# lista (teoretycznie) dostępnych backendów:\n", "%matplotlib --list" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Zmiana może (gdy komunikat o nie udanej zmianie back-endu) wymagać restartu (menu: Kernel/Restart) " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Sprawdź co wygodniejsze:\n", "%matplotlib inline\n", "# czy:\n", "# %matplotlib tk\n", "import matplotlib.pyplot as plt\n", "import skimage.data\n", "print(skimage.data.astronaut().shape)\n", "plt.imshow(skimage.data.astronaut(), interpolation='nearest')" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.figimage(skimage.data.astronaut()) # powinno być bez skalowania (może nie działać przy %matplotlib inline)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ćwiczenie\n", "Wczytaj obrazek `\"components/objects/fig.png\"` (obrazki były spakowane razem z pierwszmi ćwiczeniami), poetykietuj go (`skimage.measure.label`) i wyświetl (np. po zamianie na kolorowy obrazek przy użyciu `skimage.color.label2rgb`)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ćwiczenie\n", "Dla każdego obiektu oblicz jego pole powierzchnii (liczbę pikseli) używając operacji na tablicach NumPy i funkcji np. `np.min`).\n", "Potem użyj funkcji `skimage.measure.regionprops` i wypisz pole powierzchni każdego obiektu." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ćwiczenie\n", "Znajdz kontury obiektów (`skimage.measure.find_contours`) i je narysuj." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "contours = skimage.measure.find_contours(...)\n", "\n", "# Display the image and plot all contours found\n", "fig, ax = plt.subplots()\n", "ax.imshow(img, interpolation='nearest', cmap=plt.cm.gray)\n", "\n", "for n, contour in enumerate(contours):\n", " ax.plot(contour[:, 1], contour[:, 0], linewidth=2)\n", "\n", "ax.axis('image')\n", "ax.set_xticks([])\n", "ax.set_yticks([])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ćwiczenie\n", "Rozpoznaj na obrazkach `\"fig.png\"` oraz `\"fig2.png\"` kształt każdego obiektu (koło, kwadrat, trójkąt). Użyj funkcji `skimage.measure.approximate_polygon`.\n", "\n", "Czy opracowana metoda jest odporna na dodatnie jeszcze jakiś zniekształceń (np. szumu)?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Ćwiczenie\n", "Uogólnij poniższą funkcję tak aby generowała obrazek z prostokątem o zadanych wymiarach (zamiast kwadratu) podzielonym w poziomie wzdłuż losowej linii (zamiast ustaloną łamaną)." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "import skimage.draw\n", "def gen():\n", " img = np.zeros((110,110), np.uint8)\n", " img[5:-5,5:-5] = 255\n", " \n", " poly = np.array([[55,5],[40,30],[60,40],[45,80],[55,105]])\n", " \n", " def drawpolyline(img, poly):\n", " for p1,p2 in zip(poly[:-1],poly[1:]):\n", " yy,xx = skimage.draw.line(p1[0],p1[1],p2[0],p2[1])\n", " img[yy,xx] = 0\n", " \n", " drawpolyline(img, poly)\n", "\n", " return img \n", "\n", "plt.imshow(gen())" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python [conda env:piro]", "language": "python", "name": "conda-env-piro-py" }, "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.4" } }, "nbformat": 4, "nbformat_minor": 1 }