Нахождение пикселя / точки вогнутости в двоичной карте с использованием Matlab

#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 в вашем случае)
  • для каждой строки поверните изображение так, чтобы линия была горизонтальной
  • возьмите самый нижний пиксель границы объекта ниже линии