Informacja o wyświetlaniu w notebooku

Można sprawdzić działanie kilku trybów wyświetlania %matplotlib i sprawdzić co wygodniejsze (i co działa...)

In [ ]:
# lista (teoretycznie) dostępnych backendów:
%matplotlib --list

Zmiana może (gdy komunikat o nie udanej zmianie back-endu) wymagać restartu (menu: Kernel/Restart)

In [ ]:
# Sprawdź co wygodniejsze:
%matplotlib inline
# czy:
# %matplotlib tk
import matplotlib.pyplot as plt
import skimage.data
print(skimage.data.astronaut().shape)
plt.imshow(skimage.data.astronaut(), interpolation='nearest')
In [ ]:
plt.figimage(skimage.data.astronaut()) # powinno być bez skalowania (może nie działać przy %matplotlib inline)

Ćwiczenie

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).

Ćwiczenie

Dla każdego obiektu oblicz jego pole powierzchnii (liczbę pikseli) używając operacji na tablicach NumPy i funkcji np. np.min). Potem użyj funkcji skimage.measure.regionprops i wypisz pole powierzchni każdego obiektu.

Ćwiczenie

Znajdz kontury obiektów (skimage.measure.find_contours) i je narysuj.

In [ ]:
contours = skimage.measure.find_contours(...)

# Display the image and plot all contours found
fig, ax = plt.subplots()
ax.imshow(img, interpolation='nearest', cmap=plt.cm.gray)

for n, contour in enumerate(contours):
    ax.plot(contour[:, 1], contour[:, 0], linewidth=2)

ax.axis('image')
ax.set_xticks([])
ax.set_yticks([])

Ćwiczenie

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.

Czy opracowana metoda jest odporna na dodatnie jeszcze jakiś zniekształceń (np. szumu)?

Ćwiczenie

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ą).

In [ ]:
import numpy as np
import skimage.draw
def gen():
    img = np.zeros((110,110), np.uint8)
    img[5:-5,5:-5] = 255
    
    poly = np.array([[55,5],[40,30],[60,40],[45,80],[55,105]])
    
    def drawpolyline(img, poly):
        for p1,p2 in zip(poly[:-1],poly[1:]):
            yy,xx = skimage.draw.line(p1[0],p1[1],p2[0],p2[1])
            img[yy,xx] = 0
            
    drawpolyline(img, poly)

    return img 

plt.imshow(gen())