Middle — Senior
27
Как отличить треугольник от круга на изображении?
Компании, где спрашивали
АТОМ
Ответ от нейросети
sobes.tech AI
Для отличия треугольника от круга на изображении можно использовать методы компьютерного зрения и машинного обучения.
Подходы:
-
Обработка контуров:
- Найти контуры объектов на изображении (например, с помощью алгоритма 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('Круг найден')