Sobes.tech
Middle — Senior
27

Как отличить треугольник от круга на изображении?

Компании, где спрашивали
АТОМ

Ответ от нейросети

sobes.tech AI

Для отличия треугольника от круга на изображении можно использовать методы компьютерного зрения и машинного обучения.

Подходы:

  1. Обработка контуров:

    • Найти контуры объектов на изображении (например, с помощью алгоритма Canny для выделения границ).
    • Аппроксимировать контур многоугольником (например, алгоритмом Дугласа-Пекера).
    • Если количество вершин аппроксимированного многоугольника равно 3 — это треугольник.
    • Если контур гладкий и близок к окружности (например, соотношение площади к площади вписанной окружности близко к 1), то это круг.
  2. Фичи формы:

    • Вычислить коэффициент округлости: 4π * (площадь) / (периметр^2). Для круга он близок к 1, для треугольника значительно меньше.
  3. Машинное обучение:

    • Использовать классификатор (например, 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('Круг найден')