Metodo di elaborazione delle immagini per la selezione appuntita


11

Ho un input come immagine binaria 3D e l'output preferito di seguito:

Ingresso:

INGRESSO

Uscita preferita:

PRODUZIONE

Quali metodi di elaborazione delle immagini dovrei cercare se devo avere solo gli oggetti appuntiti, proprio come l'output preferito sopra?


Cosa intendi per immagine binaria 3D ? Riesci a segmentare facilmente l'immagine in singole parti?
bjoernz

Per 3D, intendo dire che è un'immagine tomografica.
Karl

1
Puoi spiegare cos'è l' spikyoggetto? Cosa lo chiama davvero appuntito? quali sono le caratteristiche chiave per individuare oggetti appuntiti?
Dipan Mehta

Un oggetto appuntito in questo caso è un'area 3D che non è liscia e ha queste spine come forme dappertutto.
Karl

Risposte:


19

Ci sono più angoli ai bordi del tuo "oggetto appuntito", quindi un approccio sarebbe quello di mettere a punto un rilevatore d'angolo per questo.

Ad esempio, ho calcolato il determinante del tensore di struttura (codice Mathematica di seguito) di un'immagine trasformata a distanza:

inserisci qui la descrizione dell'immagine

La binarizzazione con l'isteresi produce questa immagine, che dovrebbe essere un buon punto di partenza per l'algoritmo di segmentazione di tua scelta:

inserisci qui la descrizione dell'immagine

Codice Mathematica ( srcè l'immagine sorgente che hai pubblicato)

Inizialmente, calcolo una trasformazione di distanza dell'immagine di input. Ciò crea contrasti sull'intera area dell'oggetto (anziché solo sul bordo), in modo che l'intero oggetto possa essere rilevato.

dist = ImageData[DistanceTransform[src]];

Quindi preparo i componenti del tensore della struttura . La dimensione del filtro per i derivati ​​gaussiani se 5, la dimensione della finestra è 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];   

Per calcolare il filtro d'angolo su ciascun pixel, li inserisco semplicemente nel determinante simbolico del tensore della struttura:

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

Che è sostanzialmente lo stesso di:

corners = gx2 * gy2 - gxy * gxy;

La conversione in un'immagine e il ridimensionamento a 0..1 produce l'immagine del rivelatore d'angolo sopra.

Infine, binarizzandolo con le soglie giuste si ottiene l'immagine binaria finale:

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

Risposta molto interessante! =)
Phonon

Le tue risposte sono incredibili, ho imparato molto da loro.
Andrey Rubshtein,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.