Randen detecteren (2)
Randen detecteren kan langs meerdere assen gebeuren en daarna worden gecombineerd tot één randwaarde. Voor 2D-afbeeldingen kun je de horizontale en verticale "edge maps" combineren met de stelling van Pythagoras:
$$z = \sqrt{x^2 + y^2}$$
Een populaire randdetector is het Sobel-filter. Het Sobel-filter geeft extra gewicht aan de middelste pixels van de detector:
weights = [[ 1, 2, 1],
[ 0, 0, 0],
[-1, -2, -1]]
Verbeter in deze oefening je vorige detectiepoging door de resultaten van twee Sobel-gefilterde afbeeldingen samen te voegen tot één samengestelde edge map.
Deze oefening maakt deel uit van de cursus
Biomedische beeldanalyse met Python
Oefeninstructies
- Pas
ndi.sobel()toe opimlangs de eerste en tweede as. - Bereken de totale randgrootte met de stelling van Pythagoras. Gebruik
np.sqrt()ennp.square(). - Toon de magnitude-afbeelding. Gebruik een grijswaarden-colormap en zet
vmaxop75.
Interactieve oefening met praktijkervaring
Probeer deze oefening door deze voorbeeldcode aan te vullen.
# Apply Sobel filter along both axes
sobel_ax0 = ndi.sobel(____, axis=____)
sobel_ax1 = ____
# Calculate edge magnitude
edges = ____
# Plot edge magnitude
plt.imshow(____, ____, ____)
format_and_render_plot()