Определение областей изображения узких мест с помощью scipy

Я занимаюсь обработкой изображений и математической морфологией, используя scipy .ndimage и действительно наслаждаюсь этим. Наша работа включает моделирование зарядов, движущихся через различные пленки, и мы пытаемся использовать инструменты анализа изображений, чтобы оценить, почему разные морфологии работают лучше, чем другие.

Я быстро смог использовать ndimage.label и distance_transform_edt, чтобы найти подключенные компоненты и определить их размеры. Я также реализовал поиск в ширину, чтобы найти минимальные пути между компонентами и краями, которые представляют собой электроды.

Теперь я хотел бы определить регионы «узкого места» или «узкого канала». Я даже не уверен, что ищу правильные ключевые слова, поскольку я не особо разбираюсь в обработке изображений. Я привел два примера ниже. Я хочу найти такие особенности, как красные кружки, посчитать их и определить их распределение по размерам. (Учтите, что зарядкам будет легче проходить через более широкие узкие места.)

Проблема в том, что я не могу обозначить их, поскольку они не являются независимыми компонентами. Преобразование расстояния дает мне маленькие числа по краям ... Я хочу что-то вроде наименьшего расстояния через эти узкие места.

Есть совет, где искать или общие стратегии?

введите описание изображения здесь введите описание изображения здесь


person Geoff Hutchison    schedule 01.04.2014    source источник
comment
Вы можете использовать open / close, а затем вычесть полученное изображение из оригинала. Если вы дали ссылку на свои исходные изображения (без красного цвета), у меня могло бы быть время опубликовать пример в качестве ответа.   -  person tom10    schedule 01.04.2014
comment
Я думаю, мне нужно что-то вроде скелета или средней оси (из снимка), а затем посмотреть на распределение расстояний по ненулевым элементам результирующего массива.   -  person Geoff Hutchison    schedule 01.04.2014
comment
dropbox.com/s/1nq2zvvlvhiwzu1/2.png   -  person Geoff Hutchison    schedule 01.04.2014
comment
Решение beedot кажется мне хорошим, поэтому я не буду беспокоиться о другом (и, по сути, лучше, чем мое предложение, поскольку оно решает полную проблему, а не просто находит узкие места). Разве это не совсем то, что вы ищете?   -  person tom10    schedule 02.04.2014


Ответы (1)


Можно использовать преобразование средней оси для вычисления радиуса посадки шара в каждой точке набора для получения углов на изображении. В следующем примере мы используем водораздел функции расстояния, взвешенный самой функцией расстояния, чтобы получить контуры, которые разделяют минимумы (белые компоненты на изображении). Таким образом, получается путь, взвешенный по максимальному значению функции расстояния, разделяющей 2 белые компоненты. Я сделал это в Matlab, но я думаю, что это легко воспроизвести в панели инструментов изображений Scikit.

Изображение1:

введите описание изображения здесь

Заполнение отверстий, поскольку они не являются путями:

введите описание изображения здесь

Функция расстояния: (тепловая карта)

введите описание изображения здесь

Функция водораздела расстояния (пути):

введите описание изображения здесь

Водораздел, взвешенный функцией Distance (конечные пути):

введите описание изображения здесь

Изображение 2:

введите описание изображения здесь

Функция расстояния:

введите описание изображения здесь

Функция водораздела расстояния (пути):

введите описание изображения здесь

Водораздел, взвешенный функцией Distance (конечные пути):

введите описание изображения здесь

Таким образом, как показано, мы рассчитали технический скелет по зонам влияния (СКИЗ), используя водораздел функции расстояния (здесь использован городской квартал). Следует также отметить, что отверстия на границах не заполняются, поскольку заполнитель игнорирует отверстия на границах. Если его нужно заполнить, можно добавить рамку вокруг, чтобы можно было использовать imfill, чтобы заполнить их позже.

person beedot    schedule 02.04.2014
comment
Это очень похоже на то, чем я закончил. В моем случае заполнение отверстий - плохая идея, потому что они могут повлиять на производительность. Кроме того, я использовал преобразование медиальной оси вместо водораздела. Как вы видите на своих изображениях, водораздел течет не во все регионы. - person Geoff Hutchison; 04.04.2014
comment
Вместо этого преобразование средней оси для получения гребня преобразования расстояния было идеальным. Затем я снимаю гири на расстоянии. Спасибо за ваши предложения! - person Geoff Hutchison; 04.04.2014