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

bookВиявлення Кутів і Плям

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

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

Популярні методи:

  • Детектор кутів Харріса (cv2.cornerHarris): виявляє кути на основі змін градієнта;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Convert to float32
gray = np.float32(gray)

# Apply Harris Corner Detection
harris_corners = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
harris_corners = cv2.dilate(harris_corners, None)  # Improve visibility

# Mark detected corners in red
image[harris_corners > 0.01 * harris_corners.max()] = [0, 0, 255]
Note
Примітка

Параметри:

  • src: вхідне зображення у відтінках сірого (має бути float32);
  • blockSize: розмір локального вікна для обчислення градієнтів;
  • ksize: розмір апертури оператора Собеля (непарне, напр., 3, 5, 7);
  • k: вільний параметр детектора Харріса (типові значення: 0.04 - 0.06).
  • Детектор кутів Ші-Томасі (cv2.goodFeaturesToTrack): обирає найсильніші кути на зображенні;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Detect corners
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)

# Draw detected corners in blue
for corner in corners:
    x, y = np.int32(corner[0])
    cv2.circle(image, (x, y), 5, (255, 0, 0), -1)
Note
Примітка

Параметри:

  • image: вхідне зображення у відтінках сірого;
  • maxCorners: максимальна кількість кутів для виявлення;
  • qualityLevel: мінімальна якість виявлених кутів (діапазон: 0.01 - 0.1);
  • minDistance: мінімальна відстань між виявленими кутами.
Note
Дізнайтеся більше

Параметри методу cv2.circle() для виділення об'єктів:

  • image: зображення, на якому потрібно намалювати коло;
  • center_coordinates: координати центру кола, представлені як кортеж з двох значень: (X, Y);
  • radius: радіус кола;
  • color: колір контуру кола у форматі BGR, передається як кортеж (наприклад, (255, 0, 0) для синього);
  • thickness: товщина контуру кола у пікселях. Значення -1 заповнить усе коло вказаним кольором.

Виявлення плям (Blob Detection)

Виявлення плям знаходить області зі схожою інтенсивністю на зображенні, що корисно для виявлення та відстеження об'єктів.

Одним із популярних методів виявлення плям є SimpleBlobDetector

  • cv2.SimpleBlobDetector: виявляє ключові точки, що представляють плями, на основі розміру, форми та інтенсивності.
# Set up SimpleBlobDetector parameters
params = cv2.SimpleBlobDetector_Params()

# Adjust parameters for better detection
params.minThreshold = 5
params.maxThreshold = 255
params.filterByArea = True
params.minArea = 100
params.maxArea = 5000
params.filterByCircularity = True
params.minCircularity = 0.02
params.filterByConvexity = True
params.minConvexity = 0.5
params.filterByInertia = True
params.minInertiaRatio = 0.001

# Create detector and detect blobs
detector = cv2.SimpleBlobDetector_create(params)
keypoints = detector.detect(gray)

# Draw blobs on the image
image_with_blobs = cv2.drawKeypoints(image, keypoints, None, (0, 255, 0),
                                     cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
Note
Примітка

Параметри:

  • minThreshold, maxThreshold: діапазон інтенсивності для виявлення блобів;
  • filterByArea: увімкнення фільтрації за розміром блобів;
    • minArea, maxArea: визначає обмеження розміру для виявлених блобів;
  • filterByCircularity: увімкнення фільтрації за округлістю;
    • minCircularity: менші значення дозволяють знаходити витягнуті блоби;
  • filterByConvexity: увімкнення фільтрації за опуклістю;
    • minConvexity: менші значення дозволяють знаходити увігнуті форми;
  • filterByInertia: увімкнення фільтрації за витягнутістю;
    • minInertiaRatio: менші значення дозволяють знаходити витягнуті блоби.
Завдання

Swipe to start coding

Вам надано зображення фабрики (factory) та соняшників (sunflowers):

  • Перетворіть зображення factory у відтінки сірого та збережіть у змінній gray_factory;
  • Перетворіть зображення sunflowers у відтінки сірого та збережіть у змінній gray_sunflowers;
  • Для детектора Харріса необхідно перетворити матрицю зображення у формат float32, зробіть це та збережіть у gray_float;
  • Застосуйте детектор кутів Харріса та збережіть результат у harris_corners (рекомендовані параметри: blockSize=2, ksize=3, k=0.04);
  • Використайте dilate() для покращення видимості harris_corners;
  • Застосуйте детектор кутів Ші-Томасі до зображення та збережіть у shi_tomasi_corners (рекомендовані параметри: gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Створіть об'єкт SimpleBlobDetector_Params для ініціалізації параметрів та збережіть у params;
  • Створіть детектор блобів із заданими параметрами та збережіть у detector;
  • Виявлені ключові точки блобів збережіть у keypoints.

Рішення

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

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

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

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

single

Запитати АІ

expand

Запитати АІ

ChatGPT

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

close

Awesome!

Completion rate improved to 3.45

bookВиявлення Кутів і Плям

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

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

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

Популярні методи:

  • Детектор кутів Харріса (cv2.cornerHarris): виявляє кути на основі змін градієнта;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Convert to float32
gray = np.float32(gray)

# Apply Harris Corner Detection
harris_corners = cv2.cornerHarris(gray, blockSize=2, ksize=3, k=0.04)
harris_corners = cv2.dilate(harris_corners, None)  # Improve visibility

# Mark detected corners in red
image[harris_corners > 0.01 * harris_corners.max()] = [0, 0, 255]
Note
Примітка

Параметри:

  • src: вхідне зображення у відтінках сірого (має бути float32);
  • blockSize: розмір локального вікна для обчислення градієнтів;
  • ksize: розмір апертури оператора Собеля (непарне, напр., 3, 5, 7);
  • k: вільний параметр детектора Харріса (типові значення: 0.04 - 0.06).
  • Детектор кутів Ші-Томасі (cv2.goodFeaturesToTrack): обирає найсильніші кути на зображенні;
# Load image and convert to grayscale
image = cv2.imread("image.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# Detect corners
corners = cv2.goodFeaturesToTrack(gray, maxCorners=100, qualityLevel=0.01, minDistance=10)

# Draw detected corners in blue
for corner in corners:
    x, y = np.int32(corner[0])
    cv2.circle(image, (x, y), 5, (255, 0, 0), -1)
Note
Примітка

Параметри:

  • image: вхідне зображення у відтінках сірого;
  • maxCorners: максимальна кількість кутів для виявлення;
  • qualityLevel: мінімальна якість виявлених кутів (діапазон: 0.01 - 0.1);
  • minDistance: мінімальна відстань між виявленими кутами.
Note
Дізнайтеся більше

Параметри методу cv2.circle() для виділення об'єктів:

  • image: зображення, на якому потрібно намалювати коло;
  • center_coordinates: координати центру кола, представлені як кортеж з двох значень: (X, Y);
  • radius: радіус кола;
  • color: колір контуру кола у форматі BGR, передається як кортеж (наприклад, (255, 0, 0) для синього);
  • thickness: товщина контуру кола у пікселях. Значення -1 заповнить усе коло вказаним кольором.

Виявлення плям (Blob Detection)

Виявлення плям знаходить області зі схожою інтенсивністю на зображенні, що корисно для виявлення та відстеження об'єктів.

Одним із популярних методів виявлення плям є SimpleBlobDetector

  • cv2.SimpleBlobDetector: виявляє ключові точки, що представляють плями, на основі розміру, форми та інтенсивності.
# Set up SimpleBlobDetector parameters
params = cv2.SimpleBlobDetector_Params()

# Adjust parameters for better detection
params.minThreshold = 5
params.maxThreshold = 255
params.filterByArea = True
params.minArea = 100
params.maxArea = 5000
params.filterByCircularity = True
params.minCircularity = 0.02
params.filterByConvexity = True
params.minConvexity = 0.5
params.filterByInertia = True
params.minInertiaRatio = 0.001

# Create detector and detect blobs
detector = cv2.SimpleBlobDetector_create(params)
keypoints = detector.detect(gray)

# Draw blobs on the image
image_with_blobs = cv2.drawKeypoints(image, keypoints, None, (0, 255, 0),
                                     cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
Note
Примітка

Параметри:

  • minThreshold, maxThreshold: діапазон інтенсивності для виявлення блобів;
  • filterByArea: увімкнення фільтрації за розміром блобів;
    • minArea, maxArea: визначає обмеження розміру для виявлених блобів;
  • filterByCircularity: увімкнення фільтрації за округлістю;
    • minCircularity: менші значення дозволяють знаходити витягнуті блоби;
  • filterByConvexity: увімкнення фільтрації за опуклістю;
    • minConvexity: менші значення дозволяють знаходити увігнуті форми;
  • filterByInertia: увімкнення фільтрації за витягнутістю;
    • minInertiaRatio: менші значення дозволяють знаходити витягнуті блоби.
Завдання

Swipe to start coding

Вам надано зображення фабрики (factory) та соняшників (sunflowers):

  • Перетворіть зображення factory у відтінки сірого та збережіть у змінній gray_factory;
  • Перетворіть зображення sunflowers у відтінки сірого та збережіть у змінній gray_sunflowers;
  • Для детектора Харріса необхідно перетворити матрицю зображення у формат float32, зробіть це та збережіть у gray_float;
  • Застосуйте детектор кутів Харріса та збережіть результат у harris_corners (рекомендовані параметри: blockSize=2, ksize=3, k=0.04);
  • Використайте dilate() для покращення видимості harris_corners;
  • Застосуйте детектор кутів Ші-Томасі до зображення та збережіть у shi_tomasi_corners (рекомендовані параметри: gray_factory, maxCorners=100, qualityLevel=0.01, minDistance=10)
  • Створіть об'єкт SimpleBlobDetector_Params для ініціалізації параметрів та збережіть у params;
  • Створіть детектор блобів із заданими параметрами та збережіть у detector;
  • Виявлені ключові точки блобів збережіть у keypoints.

Рішення

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

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

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

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

single

some-alt