Я написал алгоритм для обработки захвата камеры и извлечения двоичного изображения двух интересующих меня функций. Я пытаюсь найти лучший (самый быстрый) способ обнаружения, когда две функции пересекаются и где самая низкая (координата y) наибольший) точка есть (это будет пересечение).
Я не хочу использовать метод на основе findContours (), так как он слишком медленный и, на мой взгляд, не нужен. Я также думаю, что библиотеки обнаружения BLOB-объектов слишком раздуты для этого.
У меня есть два образца изображения (извините за низкое качество):
(не трогая: http://i.imgur.com/7bQ9qMo.jpg)
(Касание: http://i.imgur.com/tuSmKw7.jpg)
Из-за того, как создаются эти изображения, в правом верхнем углу часто появляется шум, который выглядит как неровные линии, но такие методы, как расширение и эрозия, теряют разрешение вокруг объектов, которые я пытаюсь найти.
Моей первоначальной мыслью было бы использовать прямой доступ к пикселям для формирования фильтра ширины и фильтра высоты. Поэтому самая низкая точка на изображении — это пересечение.
Я понятия не имею, как определить, когда они касаются … логически я вижу, что треугольник образуется, когда они пересекаются, и в противном случае нет черной области. Могу ли я заполнить изображение, начиная с угла, скажем, красным, а затем рассчитать, сколько изображения все еще остается черным?
У кого-нибудь есть предложения?
Спасибо
Ваше предложение намного медленнее, чем поиск контуров. Для двоичных изображений найти контур очень просто и быстро, потому что вам просто нужно найти черный пиксель, за которым следует белый пиксель или наоборот.
В любом случае, если вы не хотите использовать его, вы можете использовать вертикальную проекцию или вертикальный профиль, где вы увидите, что объекты пересекаются или нет.
Например, на следующем рисунке проверьте букву «n», которая мало похожа на непересекающийся объект, и букву «o», которая похожа на пересекающиеся объекты:
Анализируя гистограммы, вы можете определить, какая из них пересекается или нет.
Других решений пока нет …