Виявлення Кутів і Плям
Виявлення кутів
Виявлення кутів використовується для ідентифікації різких змін інтенсивності у місцях перетину двох граней. Це допомагає у співставленні ознак, відстеженні об'єктів та розпізнаванні структури.
Популярні методи:
- Детектор кутів Харріса (
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]
Параметри:
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)
Параметри:
image
: вхідне зображення у відтінках сірого;maxCorners
: максимальна кількість кутів для виявлення;qualityLevel
: мінімальна якість виявлених кутів (діапазон:0.01 - 0.1
);minDistance
: мінімальна відстань між виявленими кутами.
Параметри методу 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)
Параметри:
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
.
Рішення
Дякуємо за ваш відгук!
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат
Awesome!
Completion rate improved to 3.45
Виявлення Кутів і Плям
Свайпніть щоб показати меню
Виявлення кутів
Виявлення кутів використовується для ідентифікації різких змін інтенсивності у місцях перетину двох граней. Це допомагає у співставленні ознак, відстеженні об'єктів та розпізнаванні структури.
Популярні методи:
- Детектор кутів Харріса (
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]
Параметри:
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)
Параметри:
image
: вхідне зображення у відтінках сірого;maxCorners
: максимальна кількість кутів для виявлення;qualityLevel
: мінімальна якість виявлених кутів (діапазон:0.01 - 0.1
);minDistance
: мінімальна відстань між виявленими кутами.
Параметри методу 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)
Параметри:
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
.
Рішення
Дякуємо за ваш відгук!
single