Початок роботи з порогуванням

Обробка зображень у Python

Rebeca Gonzalez

Data Engineer

Порогування

Розбиття зображення на передній план і тло

Робимо його чорно-білим

Для цього задаємо кожному пікселю:

  • 255 (білий), якщо піксель $\gt$ порога
  • 0 (чорний), якщо піксель $\lt$ порога

Пороговане зображення чоловіка з камерою

Обробка зображень у Python

Порогування

Найпростіший метод сегментації зображення

  • Відокремити об'єкти
    • Виявлення об'єктів
    • Виявлення облич
    • Тощо

Пороговане зображення фішок доміно

Обробка зображень у Python

Порогування

Лише для відтінків сірого

Кроки порогування, показано на фішках доміно: спочатку оригінал RGB-3, далі сіре, потім пороговане

Обробка зображень у Python

Застосуймо це

# Obtain the optimal threshold value
thresh = 127

# Apply thresholding to the image binary = image > thresh
# Show the original and thresholded show_image(image, 'Original') show_image(binary, 'Thresholded')

Пороговане зображення чоловіка з камерою

Обробка зображень у Python

Інверсне порогування

# Obtain the optimal threshold value
thresh = 127

# Apply thresholding to the image inverted_binary = image <= thresh
# Show the original and thresholded show_image(image, 'Original') show_image(inverted_binary, 'Inverted thresholded')

Інверсно пороговане зображення чоловіка з камерою

Обробка зображень у Python

Категорії

  • Глобальне (за гістограмою): добре для рівномірного тла

  • Локальне (адаптивне): для нерівномірного освітлення тла

Порівняння глобального та локального порогування

Обробка зображень у Python

Спробуйте більше алгоритмів порогування

from skimage.filters import try_all_threshold

# Obtain all the resulting images fig, ax = try_all_threshold(image, verbose=False)
# Showing resulting plots show_plot(fig, ax)
Обробка зображень у Python

Спробуйте більше алгоритмів порогування

Усі глобальні методи порогування, перевірені на сірому зображенні сторінки з текстом

Обробка зображень у Python

Оптимальне значення порога

Глобальне

Рівномірне тло
# Import the otsu threshold function
from skimage.filters import threshold_otsu

# Obtain the optimal threshold value thresh = threshold_otsu(image)
# Apply thresholding to the image binary_global = image > thresh
Обробка зображень у Python

Оптимальне значення порога

Глобальне

# Show the original and binarized image
show_image(image, 'Original')
show_image(binary_global, 'Global thresholding')

Оригінальне зображення чоловіка з камерою, його порогована версія та гістограма з червоною лінією на оптимальному порозі

Обробка зображень у Python

Оптимальне значення порога

Локальне

Нерівномірне тло
# Import the local threshold function
from skimage.filters import threshold_local

# Set the block size to 35 block_size = 35
# Obtain the optimal local thresholding local_thresh = threshold_local(text_image, block_size, offset=10)
# Apply local thresholding and obtain the binary image binary_local = text_image > local_thresh
Обробка зображень у Python

Оптимальне значення порога

Локальне

# Show the original and binarized image
show_image(text_image, 'Original')
show_image(binary_local, 'Local thresholding')

Локально пороговане зображення сторінки з текстом

Обробка зображень у Python

Давайте потренуємось!

Обробка зображень у Python

Preparing Video For Download...