35

, что я хочу сделать, это распознавание образов для простого приложения:питона

  1. данного изображения (500 х 500) PXS (1 цвета фон)
  2. изображения будет иметь только один геометрический рисунок (треугольник или квадрат или smaleyface :)) (50x50) пикселей.
  3. python будет распознавать фигуру и отображать, что такое геометрическая фигура.

любые ссылки? любые подсказки? любой API? thxs :)

ответ

30

Типичный инструмент питона цепь будет:

  • читать ваши изображения с PIL
  • превратить их в Numpy массивы
  • использование Scipy «s фильтры изображения (linear and rank, morphological) для осуществления Ваше решение

Как далеко , дифференцируя фигуры, я бы получил свой силуэт, посмотрев на форму фона. Затем я обнаружил бы число углов, используя алгоритм corner detection (например, Harris). Треугольник имеет 3 угла, квадрат 4, а смайлик - нет. Вот питон implementation of the Harris corner detection with Scipy.

Edit:

Как вы упоминаете в комментариях, сообщение в блоге не представляет функцию, которая производит гауссово ядро, необходимое в алгоритме. Вот пример такой функции от Scipy Cookbook (большой ресурс BTW):

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() 
+0

+1, хороший намек, Scipy, похоже, еще один ключ, im работает пример Harris :) – panchicore

+0

нет, я не могу запустить этот пример Harris, код кажется неполным :( – panchicore

+0

строка-код: gauss = filtertools.gauss_kernel (3) ... gauss_kernel def не существует :( – panchicore

2

Если вы знаете пространство состояний ваших данных, вы можете использовать Основной анализ компонентов. С помощью PCA все объекты должны быть помещены (в центре экрана). PCA не будет обнаруживать, но он будет разделять объекты на уникальные слои, в которых вы можете идентифицировать себя как треугольник и т. Д. Также обратите внимание: это не масштаб или инвариант вращения.

[Я не помню, как называется этот метод, но похоже на то, как почтовый отдел выполняет ручную перемотку rec] Если вы можете обрабатывать только не изогнутые криволинейные поверхности, вы можете выполнить обнаружение кромок, а затем выполнить выборку на пересечениях для получения приближения сходства.

+0

ОК, но ... геометрическая фигура будет не только сосредоточена :) – panchicore

10

OpenCV имеет инструменты анализа blob, он даст вам показатели о форме, которую вы можете подавать для вашего любимого алгоритма распознавания образов :) Например. прямоугольник имеет коэффициент 1,0 для области/(высота * ширина), когда отношение круга составляет около 0,78.

+0

+1, хороший намек, openCv кажется ключом, im googling для некоторого практического примера ... – panchicore

+2

Соотношение 0.78 не всегда guarente что это будет круг. Могло быть много других шаблонов, которые соответствовали бы значению 0,78. – monksy

+1

Это правда, вы должны выбрать набор функций, которые наиболее значимы для набора объектов, которые вы пытаетесь распознать. Коэффициент заполнения - это только одна особенность. – Harriv

3

Вы указываете геометрическая фигура 50x50 пикс. Если размер и ориентация из геометрических фигур исправлено, у вас есть классический вопрос соответствия шаблона, подходит для correlation method. Вы можете применить соответствие шаблонов на исходном изображении или на выходе границы.

В противном случае, если размер (масштаб) и/или ориентация произвольны, Можно использовать дескрипторы Фурье. Эти дескрипторы являются инвариантами вращения и масштаба.

Все эти методы могут быть закодированы с использованием OpenCV, NumPy или SciPy.

Смежные вопросы