Método de procesamiento de imagen para selección puntiaguda


11

Tengo una entrada como imagen binaria 3D y la salida preferida a continuación:

Entrada:

ENTRADA

Salida preferida:

SALIDA

¿Qué métodos de procesamiento de imágenes debo buscar si quiero que solo queden los objetos puntiagudos, al igual que el resultado preferido anterior?


¿Qué quieres decir con imagen binaria 3D ? ¿Se puede segmentar fácilmente la imagen en partes individuales?
bjoernz

Por 3D quiero decir que es una imagen tomográfica.
Karl

1
¿Puedes explicar qué es el spikyobjeto? ¿Qué lo llama realmente puntiagudo? ¿Cuáles son las características clave para detectar objetos puntiagudos?
Dipan Mehta

Un objeto puntiagudo en este caso es un área 3D que no es suave y tiene estas formas espinosas por todas partes.
Karl

Respuestas:


19

Hay más esquinas en los bordes de su "objeto puntiagudo", por lo que un enfoque sería ajustar un detector de esquinas para esto.

Por ejemplo, calculé el determinante del tensor de estructura (código de Mathematica a continuación) de una imagen transformada a distancia:

ingrese la descripción de la imagen aquí

La binarización con histéresis produce esta imagen, que debería ser un buen punto de partida para el algoritmo de segmentación que elija:

ingrese la descripción de la imagen aquí

Código de Mathematica ( srces la imagen fuente que publicaste)

Al principio, calculo una transformación de distancia de la imagen de entrada. Esto crea contrastes sobre todo el área del objeto (en lugar de solo el borde), por lo que se puede detectar todo el objeto.

dist = ImageData[DistanceTransform[src]];

A continuación preparo los componentes del tensor de estructura . El tamaño del filtro para las derivadas gaussianas es 5, el tamaño de la ventana es 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];   

Para calcular el filtro de esquina en cada píxel, simplemente los conecto al determinante simbólico del tensor de estructura:

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

Que es básicamente lo mismo que:

corners = gx2 * gy2 - gxy * gxy;

Convirtiendo esto en una imagen y escalando a un rango de 0..1 se obtiene la imagen del detector de esquina de arriba.

Finalmente, binarizarlo con los umbrales correctos da la imagen binaria final:

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

Muy buena respuesta! =)
Phonon

Sus respuestas son asombrosas, aprendo mucho de ellas.
Andrey Rubshtein
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.