#matlab #image-processing #detection
#matlab #обработка изображений #обнаружение
Вопрос:
Дана двоичная маска с объектом в Matlab. Я собираюсь найти точку вогнутости границы объекта. Точка вогнутости, которую я имею в виду здесь, является самой глубокой точкой вогнутости относительно евклидова расстояния до хорд выпуклой оболочки K_1, K_2 и K_3 в областях вогнутости B_1, B_2, B_3 соответственно. Красная точка указывает точку вогнутости, которую я хочу найти, где в области вогнутости B_1 я рисую три линии, перпендикулярные хорде K_1, самая глубокая точка вогнутости — средняя, поскольку она имеет наибольшую длину.
У кого-нибудь есть эффективный способ / код для этого? Спасибо.
На другом рисунке ниже приведен пример с выпуклой оболочкой, где красная точка указывает допустимую точку вогнутости.
Комментарии:
1. Не могли бы вы сначала показать нам, что вы уже сделали? Возможно, вам следует добавить больше информации о том, что вы подразумеваете под «точкой вогнутости». Я думаю, я понимаю, что вы имеете в виду, но без математики все теряется при переводе.
2. Я думаю, нужно найти точку, которая имеет наибольшее расстояние до соответствующей хорды в области вогнутости. Но как эффективно найти его с точки зрения вычислительного времени.
Ответ №1:
Эффективность относительна…
Как насчет вычисления выпуклой оболочки (для этого существуют стандартные алгоритмы), а затем сжимать ее до тех пор, пока она полностью не окажется внутри границ объекта. Последняя точка касания — это ваша желаемая точка вогнутости.
Альтернативная стратегия:
- вычислить выпуклую оболочку
- найдите все различия между выпуклой оболочкой и границей объекта (должны быть прямые линии, K1 K2 K3 в вашем случае)
- для каждой строки поверните изображение так, чтобы линия была горизонтальной
- возьмите самый нижний пиксель границы объекта ниже линии