Распознавание образа python
то, что я хочу сделать, - это распознавание образов для простого приложения:
- заданное изображение (500 x 500) pxs (1 цвет фона)
- изображение будет иметь только 1 геометрическую фигуру (треугольник или квадрат или smaleyface:)) (50x50) пикселей.
- python будет распознавать фигуру и отображать, что такое геометрическая фигура.
любые ссылки? любые подсказки? любой API? спасибоs:)
Ответы
Ответ 1
Типичная цепочка инструментов python:
дифференцируя фигуры, я бы получил свой силуэт, посмотрев на форму фона. Затем я определял количество углов, используя алгоритм угол обнаружения (например, Harris). Треугольник имеет 3 угла, квадрат 4, а смайлик - нет.
Здесь python реализация определения угла Харриса с помощью Scipy.
Edit:
Как вы отметили в комментариях, сообщение в блоге не представило функцию, которая создает гауссовское ядро, необходимое в алгоритме. Вот пример такой функции из Scipy Cookbook (большой ресурс кстати):
def gauss_kern(size, sizey=None):
""" Returns a normalized 2D gauss kernel array for convolutions """
size = int(size)
if not sizey:
sizey = size
else:
sizey = int(sizey)
x, y = mgrid[-size:size+1, -sizey:sizey+1]
g = exp(-(x**2/float(size)+y**2/float(sizey)))
return g / g.sum()
Ответ 2
OpenCV имеет инструменты анализа blob, он даст вам показатели о форме, которую вы можете подавать для вашего любимого алгоритма распознавания образов: ) Например. прямоугольник имеет отношение 1,0 к области/(высота * ширина), когда отношение круга составляет около 0,78.
Ответ 3
Вы указываете геометрическую фигуру 50x50 px. Если размер и ориентация геометрических фигур фиксированный, у вас есть классическая проблема соответствия шаблонов, подходящая для метод корреляции. Вы можете применить соответствие шаблонов на исходном изображении или на выходе границы.
В противном случае, если размер (масштаб) и/или ориентация произвольны, можно применить Дескрипторы Фурье. Эти дескрипторы являются инвариантами вращения и масштаба.
Все эти методы могут быть закодированы с использованием OpenCV, NumPy или SciPy.
Ответ 4
Если вы знаете пространство состояний ваших данных, вы можете использовать основной компонентный анализ. С помощью PCA все объекты должны быть помещены (в центре экрана). PCA не будет обнаруживать, но он будет разделять объекты на уникальные слои, в которых вы можете идентифицировать себя как треугольник и т.д. Также обратите внимание: это не масштаб или инвариант вращения.
[Я не могу вспомнить, как называется этот метод, но он похож на то, как почтовый отдел выполняет ручную запись]
Если вы можете обрабатывать только не изогнутые криволинейные поверхности, вы можете выполнить обнаружение кромок, а затем выполнить выборку на пересечениях, чтобы получить приближение сходства.