Middle — Senior
37
Kako razlikovati trougao od kruga na slici?
Компаније где су питане
АТОМ
Одговор од АИ
sobes.tech АИ
Для отличия треугольника от круга на изображении можно использовать методы компьютерного зрения и машинного обучения.
Подходы:
-
Обработка контуров:
- Найти контуры объектов на изображении (например, с помощью алгоритма Canny для выделения границ).
- Аппроксимировать контур многоугольником (например, алгоритмом Дугласа-Пекера).
- Если количество вершин аппроксимированного многоугольника равно 3 — это треугольник.
- Если контур гладкий и близок к окружности (например, соотношение площади к площади вписанной окружности близко к 1), то это круг.
-
Фичи формы:
- Вычислить коэффициент округлости:
4π * (площадь) / (периметр^2). Для круга он близок к 1, для треугольника значительно меньше.
- Вычислить коэффициент округлости:
-
Машинное обучение:
- Использовать классификатор (например, SVM, Random Forest или нейросеть), обученный на признаках формы (контуры, гистограммы направлений границ и т.п.) или на исходных изображениях.
Пример на OpenCV (Python) для определения треугольника:
import cv2
import numpy as np
image = cv2.imread('shape.png', 0)
_, thresh = cv2.threshold(image, 127, 255, cv2.THRESH_BINARY)
contours, _ = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
for cnt in contours:
epsilon = 0.04 * cv2.arcLength(cnt, True)
approx = cv2.approxPolyDP(cnt, epsilon, True)
if len(approx) == 3:
print('Треугольник найден')
else:
# Проверка на круг
area = cv2.contourArea(cnt)
perimeter = cv2.arcLength(cnt, True)
circularity = 4 * np.pi * area / (perimeter * perimeter)
if 0.8 < circularity <= 1.0:
print('Круг найден')