Секція 1. Розділ 11
single
Виявлення Кутів і Плям
Свайпніть щоб показати меню
Виявлення кутів
Виявлення кутів використовується для ідентифікації різких змін інтенсивності у місцях перетину двох країв. Це допомагає у зіставленні ознак, відстеженні об'єктів та розпізнаванні структури.
Популярні методи:
- Детектор кутів Харріса (
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.
Рішення
Все було зрозуміло?
Дякуємо за ваш відгук!
Секція 1. Розділ 11
single
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат