Идентифицируйте фигуры с помощью Matlab

Я создал код MATLAB, который находит некоторые фигуры на изображении с помощью функций regionpros и bwbounaries.

У меня есть:

STATS = regionprops(L, 'all');

и из STATS я мог легко найти все свои фигуры Площадь и Периметр. Моя проблема заключается в следующем: я хочу найти «квадратные» формы и делаю для всех фигур следующий расчет 16 * area / (perimeter * perimeter), если это значение близко к единице, то я «могу» иметь квадрат. Но и другие формы, такие как круги или прямоугольники, тоже близки к единице. (Также некоторые квадраты могли быть повернуты на изображении).

Есть ли лучший способ различать формы (например, круги, треугольники...)?


person Johnathan Fr.    schedule 26.03.2011    source источник


Ответы (1)


В матлабе есть функция

procrustes(X,Y)

который будет вычислять расстояние между двумя фигурами на основе типов преобразований, необходимых для перемещения точек, определенных X, в точки, определенные Y. Для многих задач классификации фигур минимизация этого расстояния является полезным способом категоризации зашумленных экземпляров фигур. Если ваша задача имеет «идеальные» формы, это должно работать очень хорошо. Просто зафиксируйте Y как идеальный квадрат, и каждый раз, когда линейное преобразование от X к Y является чистым масштабированием, вы знаете, что X также является квадратом. Вы можете выполнить простую логическую проверку, чтобы выбрать только фигуры, удовлетворяющие такому свойству.

person ely    schedule 26.05.2011
comment
Пакет Python PyGeometry имеет аналогичную функцию оптимизации Procrustes, если вы когда-либо делали это в Python. - person ely; 22.12.2011