Спосіб обробки зображень для шипового вибору


11

У мене є вхід у вигляді 3D-бінарного зображення та бажаний вихід нижче:

Вхід:

ВХОД

Бажаний вихід:

ВИХІД

На які способи обробки зображень слід звернути увагу, якщо у мене залишаться лише колючі об'єкти, як і бажаний вихід вище?


Що ви маєте на увазі під 3D бінарним зображенням? Чи можете ви легко сегментувати зображення на окремі частини?
Бьорнц

За допомогою 3D я маю на увазі це томографічне зображення.
Карл

1
Чи можете ви пояснити, що таке spikyоб’єкт? Що насправді називає це колючим? які ключові характеристики для виявлення колючих предметів?
Діпан Мехта

Колючий предмет в цьому випадку - це тривимірна область, яка не є гладкою і має ці шипи, як фігури по всьому.
Карл

Відповіді:


19

На кордонах вашого "колючого предмета" є більше кутів, тому одним із підходів було б налаштувати для цього кутовий детектор .

Наприклад, я обчислив визначник тензору структури (код 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}]

Дуже класна відповідь! =)
Phonon

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