Если вы намереваетесь обнаруживать формы, отличные от кругов (и по изображению, которое, я полагаю, вы делаете), я бы порекомендовал Соответствие фаски для быстрого запуска, особенно если у вас хороший контраст.
Основная предпосылка, объясненная простыми словами, следующая:
- Вы выполняете обнаружение края (например,
cvCanny
в opencv) - Вы создаетедистанционное изображение, где значение каждого пикселя означает расстояние от ближайшего края.
- Вы берете фигуры, которые хотите обнаружить, определяете точки выборки по краям фигуры и пытаетесь сопоставить эти точкина расстоянии изображения.По сути, вы просто добавляете значения на изображении расстояния, которые находятся «под» координатами точек выборки, с учетом конкретной позиции ваших объектов.
- Найдите хороший алгоритм минимизации, эффективность которого зависит от вашего приложения.
Этот базовый подход является общим решением, обычно работает хорошо, но без дальнейших улучшений он очень медленный.
Обычно хорошей идеей является сначала разделить объекты, представляющие интерес., поэтому вам не нужно всегда выполнять полный поиск по всему изображению.Найдите хороший threshold
, чтобы вы могли отделить предметы.Вы до сих пор не знаете, какой это объект, но вам нужно выполнить сопоставление только в непосредственной близости от этого объекта.
Еще одна хорошая идея, вместо того, чтобы выполнять полный поиск по изображению высокого разрешения,сначала сделайте это с очень низким разрешением.Результат будет не очень точным, но вы можете знать общие области, в которых стоит выполнить поиск с более высоким разрешением, чтобы не тратить время на области, где нет ничего интересного.
Существует ряд более продвинутых техник, но все же стоит взглянуть на базовое сопоставление фасок, поскольку оно является основой большого числа техник.