Если вы хотите «свернуть свои собственные», я бы предложил следующие шаги:
Сначала скелетонизируйте (прореживайте изображение до тех пор, пока все линии не станут толщиной в один пиксель).Есть много способов сделать это, и это хорошо изученная проблема.Google для получения дополнительной информации.
Теперь, начиная с черного пикселя, пройдите и проследите контур изображения, по одному пикселю за раз.Вы добавляете каждый из этих сегментов в список сегментов, очерчивающих форму (каждый сегмент будет простой линией от одного пикселя до соседнего пикселя).Теперь у вас есть контур вашей фигуры в виде многогранного многоугольника.
(Возможный шаг на этом этапе: сгладьте контур, потянув каждую вершину ближе к среднему значению ее соседей)
Теперь, вы используете алгоритм обнаружения углов, чтобы найти углы (посмотрите здесь: http://visual.ipan.sztaki.hu/corner/node7.html).
Этого должно быть достаточно, чтобы определить фигуры, которые вы перечислили.
Если вы хотите стать умнее, вы можететакже определите типы ребер, которые существуют между углами. Если отрезок между двумя углами остается в пределах некоторого порога прямой линии между ними, вы рассматриваете его как край "прямой линии". Если это не так, вы рассматриваете его какизгиб.
С углами + прямой / изогнутый край, вы, вероятно, сможете обнаружить любую форму, которую вы ищете, очень хорошо.