Segmentace s využitím barevných světel

Import knihoven a konfigurace

%run ./library.ipynb

Pomocné funkce

Z následujících funkcí je potřeba vybírat ty vhodné pro splnění úkolu.

Seznam funkcí pro přehlednost:

Úkol

Vaším úkolem bude spočítat množství červených, zelených nebo modrých korálků v krabičce. Korálky nasnímejte monochromatickou kamerou, při snímání použijte různá světla a experimentujte s nimi, tak aby byl následný segmentační algoritmus co možná nejjednodušší.

Pro volbu vhodné iluminační techniky a vhodného osvětlení můžete konzultovat přehledový dokument Volba vhodného osvětlení v kombinaci s kamerou, nebo přednášku Kamerový systém a zpracování obrazu.

No description has been provided for this image

1) Načtení dat

img = load_image("./data/red_light.jpg")
img = crop(img, 650, 600, 1700, 1600) # optional, může se hodit
# Případné další předzpracování
img = to_gray(img)
plot_images(img)
No description has been provided for this image

2) Výběr prahů pro segmentaci

S využitím slideru najděte prahy pro segmentaci vámi zvolených korálků ve vámi zvoleném obrázku.

@interact(value=create_slider(min=0, max=255, description='Value'))
def _(value):
    mask = segmentation_two_thresholds(img, value[0], value[1]) ###
    plot_images(mask, img, titles=['Segmentation', 'Original'])
interactive(children=(IntRangeSlider(value=(0, 255), continuous_update=False, description='Value\xa0\xa0\xa0\x…

3) Segmentace

Vysegmentujte zvolené korálky a spočtěte je.

def count_objects(mask, min_area, max_area):
    segmented, count, _ = find_contours(mask, min_area, max_area)
    return segmented, count
selected_color = 'red'

mask = segmentation_two_thresholds(img, 176, 255) # Zisk masky segmentací
segmented, count = count_objects(mask, 200, 50000)

print(f'In total {count} {selected_color} objects found.')
plot_images(img, segmented) # Poronvání původního obrázku s výsledkem segmentace
In total 4 red objects found.
No description has been provided for this image

4) Bonusová část - opakujte postup pro alespoň jednu další barvu

img = load_image("./data/green_light.jpg")
img = crop(img, 800, 600, 1800, 1600) # optional, může se hodit
# Případné další předzpracování
img = to_gray(img)
plot_images(img)
No description has been provided for this image
@interact(value=create_slider(min=0, max=255, description='Value'))
def _(value):
    mask = segmentation_two_thresholds(img, value[0], value[1]) ###
    plot_images(mask, img, titles=['Segmentation', 'Original'])
interactive(children=(IntRangeSlider(value=(0, 255), continuous_update=False, description='Value\xa0\xa0\xa0\x…
selected_color = 'green'

mask = segmentation_two_thresholds(img, 100, 108) # Zisk masky segmentací
segmented, count = count_objects(mask, 300, 50000)

print(f'In total {count} {selected_color} objects found.')
plot_images(img, segmented) # Poronvání původního obrázku s výsledkem segmentace
In total 7 green objects found.
No description has been provided for this image