Metoda przetwarzania obrazu dla kolczastego wyboru

11

Mam dane wejściowe jako obraz binarny 3D, a preferowane dane wyjściowe poniżej:

Wejście:

WEJŚCIE

Preferowana wydajność:

WYNIK

Jakich metod przetwarzania obrazu powinienem szukać, jeśli mam pozostać tylko kolczasty obiekt (obiekty), tak jak preferowane wyjście powyżej?

Karl
źródło
Co rozumiesz przez binarny obraz 3D ? Czy możesz łatwo podzielić obraz na poszczególne części?
bjoernz
Przez 3D mam na myśli, że jest to obraz tomograficzny.
Karl
1
Czy możesz wyjaśnić, co jest spikyprzedmiotem? Co tak naprawdę nazywa to kolczastym? jakie są kluczowe cechy, aby dostrzec kolczaste obiekty?
Dipan Mehta
Kolczasty obiekt w tym przypadku to obszar 3D, który nie jest gładki i ma na sobie te kształty przypominające kolce.
Karl

Odpowiedzi:

19

Na rogach „kolczastego obiektu” znajduje się więcej rogów, więc jednym z podejść byłoby dostrojenie detektora narożnego .

Na przykład obliczyłem wyznacznik tensora struktury (kod Mathematica poniżej) obrazu przekształconego na odległość:

wprowadź opis zdjęcia tutaj

Binaryzacja z histerezą daje ten obraz, który powinien być dobrym punktem wyjścia dla wybranego algorytmu segmentacji:

wprowadź opis zdjęcia tutaj

Kod Mathematica ( srcto opublikowany obraz źródłowy)

Najpierw obliczam transformację odległości obrazu wejściowego. Stwarza to kontrasty na całym obszarze obiektu (zamiast samej granicy), dzięki czemu można wykryć cały obiekt.

dist = ImageData[DistanceTransform[src]];

Następnie przygotowuję elementy tensora konstrukcji . Rozmiar filtra dla pochodnych gaussowskich, jeśli 5, rozmiar okna wynosi 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];   

Aby obliczyć filtr narożny dla każdego piksela, po prostu podłączam je do symbolicznego wyznacznika tensora struktury:

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

Co jest w zasadzie takie samo jak:

corners = gx2 * gy2 - gxy * gxy;

Przekształcenie tego w obraz i skalowanie do zakresu 0..1 daje obraz detektora narożnego powyżej.

Wreszcie, binaryzacja za pomocą odpowiednich progów daje końcowy, binarny obraz:

MorphologicalBinarize[Image[corners], {0.025, 0.1}]
Niki Estner
źródło
Bardzo fajna odpowiedź! =)
Phonon
Twoje odpowiedzi są niesamowite, wiele się od nich uczę.
Andrey Rubshtein,