Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Виявлення Контурів | Обробка Зображень з OpenCV
Основи комп'ютерного зору

bookВиявлення Контурів

Виявлення контурів

Контури відображають різкі зміни яскравості пікселів, які зазвичай відповідають межам об'єктів. Виявлення контурів допомагає у розпізнаванні форм і сегментації.

Виявлення контурів методом Собеля

Оператор Собеля обчислює градієнти (зміни яскравості) у X та Y напрямках, що дозволяє знаходити горизонтальні та вертикальні контури.

# Convert to grayscale
image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

# Apply Sobel filter
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=5)  # Detects vertical edges
sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=5)  # Detects horizontal edges
sobel_combined = cv2.magnitude(sobel_x, sobel_y)  # Combines both directions
Note
Примітка

Ключові параметри:

  • src: вхідне зображення (має бути у відтінках сірого);
  • ddepth: глибина вихідного зображення (наприклад, cv2.CV_64F);
  • dx: порядок похідної у напрямку X (встановити 1 для горизонтальних контурів);
  • dy: порядок похідної у напрямку Y (встановити 1 для вертикальних контурів);
  • ksize: розмір ядра (має бути непарним, наприклад, 3, 5, 7).

Виявлення контурів методом Кенні

Детектор контурів Кенні — це багатоступенева процедура, яка забезпечує більш точне виявлення контурів шляхом:

  1. Застосування гаусового розмиття для видалення шуму.
  2. Пошуку градієнтів яскравості за допомогою фільтрів Собеля.
  3. Придушення слабких контурів.
  4. Використання подвійного порогового значення та відстеження контурів.
# Apply Canny Edge Detector 
canny_image = cv2.Canny(image, threshold1, threshold2, apertureSize, L2gradient)  
Note
Примітка
  • image: вхідне зображення у відтінках сірого;
  • threshold1: нижній поріг для виявлення країв (наприклад, 50);
  • threshold2: верхній поріг для виявлення країв (наприклад, 150);
  • apertureSize (необов'язково): розмір ядра Собеля (типово: 3, має бути непарним);
  • L2gradient (необов'язково): використання більш точної обчислення градієнта за нормою L2 (типово: False).

Порівняння методів виявлення країв:

порівняння виявлення країв
Завдання

Swipe to start coding

Вам надано image:

  • Перетворіть зображення у відтінки сірого та збережіть у gray_image;
  • Застосуйте фільтр Собеля по напрямках X та Y (глибина вихідного зображення cv2.CV_64F, розмір ядра 3) та збережіть у sobel_x, sobel_y відповідно;
  • Об'єднайте напрямки, оброблені фільтром Собеля, у sobel_img;
  • Застосуйте фільтр Кенні з порогами від 200 до 300 та збережіть у canny_img.

Рішення

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 7
single

single

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Suggested prompts:

What are the main differences between Sobel and Canny edge detection?

Can you explain when to use Sobel versus Canny edge detection?

Can you provide more details on how the Canny edge detector works?

close

Awesome!

Completion rate improved to 3.45

bookВиявлення Контурів

Свайпніть щоб показати меню

Виявлення контурів

Контури відображають різкі зміни яскравості пікселів, які зазвичай відповідають межам об'єктів. Виявлення контурів допомагає у розпізнаванні форм і сегментації.

Виявлення контурів методом Собеля

Оператор Собеля обчислює градієнти (зміни яскравості) у X та Y напрямках, що дозволяє знаходити горизонтальні та вертикальні контури.

# Convert to grayscale
image = cv2.cvtColor(image, cv2.COLOR_RGB2GRAY)

# Apply Sobel filter
sobel_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=5)  # Detects vertical edges
sobel_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=5)  # Detects horizontal edges
sobel_combined = cv2.magnitude(sobel_x, sobel_y)  # Combines both directions
Note
Примітка

Ключові параметри:

  • src: вхідне зображення (має бути у відтінках сірого);
  • ddepth: глибина вихідного зображення (наприклад, cv2.CV_64F);
  • dx: порядок похідної у напрямку X (встановити 1 для горизонтальних контурів);
  • dy: порядок похідної у напрямку Y (встановити 1 для вертикальних контурів);
  • ksize: розмір ядра (має бути непарним, наприклад, 3, 5, 7).

Виявлення контурів методом Кенні

Детектор контурів Кенні — це багатоступенева процедура, яка забезпечує більш точне виявлення контурів шляхом:

  1. Застосування гаусового розмиття для видалення шуму.
  2. Пошуку градієнтів яскравості за допомогою фільтрів Собеля.
  3. Придушення слабких контурів.
  4. Використання подвійного порогового значення та відстеження контурів.
# Apply Canny Edge Detector 
canny_image = cv2.Canny(image, threshold1, threshold2, apertureSize, L2gradient)  
Note
Примітка
  • image: вхідне зображення у відтінках сірого;
  • threshold1: нижній поріг для виявлення країв (наприклад, 50);
  • threshold2: верхній поріг для виявлення країв (наприклад, 150);
  • apertureSize (необов'язково): розмір ядра Собеля (типово: 3, має бути непарним);
  • L2gradient (необов'язково): використання більш точної обчислення градієнта за нормою L2 (типово: False).

Порівняння методів виявлення країв:

порівняння виявлення країв
Завдання

Swipe to start coding

Вам надано image:

  • Перетворіть зображення у відтінки сірого та збережіть у gray_image;
  • Застосуйте фільтр Собеля по напрямках X та Y (глибина вихідного зображення cv2.CV_64F, розмір ядра 3) та збережіть у sobel_x, sobel_y відповідно;
  • Об'єднайте напрямки, оброблені фільтром Собеля, у sobel_img;
  • Застосуйте фільтр Кенні з порогами від 200 до 300 та збережіть у canny_img.

Рішення

Switch to desktopПерейдіть на комп'ютер для реальної практикиПродовжуйте з того місця, де ви зупинились, використовуючи один з наведених нижче варіантів
Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 2. Розділ 7
single

single

some-alt