Метод обработки изображений для выделения колючего


11

У меня есть вход в виде трехмерного двоичного изображения и предпочтительный вывод ниже:

Входные данные:

ВХОД

Предпочитаемый вывод:

ВЫХОД

Какие методы обработки изображений я должен искать, чтобы у меня остались только остроконечные объекты, как и в приведенном выше предпочтительном выводе?


Что вы подразумеваете под бинарным трехмерным изображением? Вы можете легко разделить изображение на отдельные части?
bjoernz

Под 3D я подразумеваю, что это томографическое изображение.
Карл

1
Можете ли вы объяснить, что такое spikyобъект? Что на самом деле называет это остроконечным? Каковы основные характеристики для обнаружения колючих объектов?
Дипан Мехта

В этом случае остроконечный объект - это трехмерная область, которая не является гладкой и имеет похожие на них шиповидные формы.
Карл

Ответы:


19

На границах вашего «остроконечного объекта» больше углов, поэтому один из подходов - настроить детектор углов для этого.

Например, я вычислил определитель тензора структуры (код Mathematica ниже) изображения с преобразованием расстояния:

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

Бинаризация с гистерезисом дает это изображение, которое должно стать хорошей отправной точкой для алгоритма сегментации по вашему выбору:

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

Код Mathematica ( srcисходное изображение, которое вы разместили)

Сначала я вычисляю преобразование расстояния входного изображения. Это создает контрасты по всей области объекта (а не только по границе), поэтому весь объект может быть обнаружен.

dist = ImageData[DistanceTransform[src]];

Далее я готовлю компоненты структуры тензора . Размер фильтра для гауссовых производных, если 5, размер окна равен 20.

gx = GaussianFilter[dist, 5, {1, 0}];
gy = GaussianFilter[dist, 5, {0, 1}];
gx2 = GaussianFilter[gx^2, 20];
gxy = GaussianFilter[gx*gy, 20];
gy2 = GaussianFilter[gy^2, 20];   

Чтобы вычислить угловой фильтр для каждого пикселя, я просто подключаю их к символическому определителю тензора структуры:

corners = Det[{{dx2, dxy}, {dxy, dy2}}] /. {dx2 -> gx2, dxy -> gxy, dy2 -> gy2};

Что в основном так же, как:

corners = gx2 * gy2 - gxy * gxy;

Преобразование этого в изображение и масштабирование его до диапазона 0..1 дает изображение детектора угла выше.

Наконец, бинаризация с правильными порогами дает окончательное двоичное изображение:

MorphologicalBinarize[Image[corners], {0.025, 0.1}]

Очень классный ответ! =)
Фонон

Ваши ответы потрясающие, я многому у них учусь.
Андрей Рубштейн
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.