Méthode de traitement d'image pour la sélection hérissée


11

J'ai une entrée sous forme d'image binaire 3D et la sortie préférée ci-dessous:

Contribution:

CONTRIBUTION

Sortie préférée:

PRODUCTION

Quelles méthodes de traitement d'image devrais-je rechercher si je ne souhaite conserver que les objets hérissés, tout comme la sortie préférée ci-dessus?


Qu'entendez-vous par image binaire 3D ? Pouvez-vous facilement segmenter l'image en parties individuelles?
bjoernz

Par 3D, je veux dire que c'est une image tomographique.
Karl

1
Pouvez-vous expliquer ce qu'est un spikyobjet? Qu'est-ce qui l'appelle vraiment épineux? quelles sont les principales caractéristiques pour repérer les objets hérissés?
Dipan Mehta

Un objet hérissé dans ce cas est une zone 3D qui n'est pas lisse et a ces formes épineuses partout.
Karl

Réponses:


19

Il y a plus de coins sur les bords de votre "objet hérissé", donc une approche serait de régler un détecteur de coin pour cela.

Par exemple, j'ai calculé le déterminant du tenseur de structure (code Mathematica ci-dessous) d'une image transformée en distance:

entrez la description de l'image ici

La binarisation avec hystérésis donne cette image, qui devrait être un bon point de départ pour l'algorithme de segmentation de votre choix:

entrez la description de l'image ici

Code Mathematica ( srcest l'image source que vous avez publiée)

Dans un premier temps, je calcule une transformation de distance de l'image d'entrée. Cela crée des contrastes sur toute la zone de l'objet (au lieu de simplement la bordure), de sorte que l'objet entier peut être détecté.

dist = ImageData[DistanceTransform[src]];

Je prépare ensuite les composants du tenseur de structure . La taille du filtre pour les dérivées gaussiennes si 5, la taille de la fenêtre est 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];   

Pour calculer le filtre d'angle à chaque pixel, je les branche simplement au déterminant symbolique du tenseur de structure:

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

Ce qui est essentiellement le même que:

corners = gx2 * gy2 - gxy * gxy;

La conversion en une image et sa mise à l'échelle dans une plage de 0..1 donne l'image du détecteur de coin ci-dessus.

Enfin, la binariser avec les bons seuils donne l'image binaire finale:

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

Réponse très cool! =)
Phonon

Vos réponses sont incroyables, j'apprends beaucoup d'eux.
Andrey Rubshtein
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.