2012-05-22 19 views
5

Estoy trabajando en una pieza de código en MATLAB usando Image Processing Toolbox, donde he usado Skel = bwmorph (BM, 'skel') para obtener un esqueleto de un río. Quiero usar BP = bwmorph (Skel, 'puntos de ramificación') para obtener los puntos donde existen confluencias y afluentes. Estoy recibiendo una gran cantidad de falsos positivos en la presión arterial cada vez que el esqueleto se parece¿Cómo funcionan los puntos de bwmorph?

oQo 
Q 
o 

Esto marca los píxeles Q como puntos de ramificación, así, junto con los puntos de ramificación reales, que se espera. Hay muchos falsos positivos como ese.

He notado que aparece un punto de ramificación verdadero como un píxel aislado en BP, mientras que los puntos de bifurcación falsos siempre se forman en pares.

¿Alguien puede decirme cómo el algoritmo de los puntos de bifurcación encuentra los puntos? Si lo sé, puedo estar satisfecho de que haya una razón real por la que los falsos positivos están en pares, y los verdaderos positivos están solos, en lugar de una coincidencia afortunada.

Tengo la sensación de que se ve la conectividad de 8 en torno al píxel, pero creo que no es todo lo que hace.

Para aclarar, he marcado una imagen recortada de la salida. Los aspectos positivos que da se muestran en rojo. Como se puede ver, solo uno de estos píxeles es en realidad un punto de ramificación. Quiero saber cómo funciona el algoritmo para poder dar una razón lógica de por qué los falsos positivos vienen en pares (si de hecho lo hacen).

The image

+0

no consigo su dibujo 'OQO Q O'. ¿Podrías subir una imagen que muestre lo que está sucediendo? – Tobold

+0

He agregado un enlace a la imagen: [link] (http://i.imgur.com/w5udH.jpg) – shashwat

Respuesta

2

Sus píxeles no son mínimamente (8-) conectado, tratan de usar

Thin = bwmorph(Skel,'thin'); 
BP = bwmorph(Thin,'branchpoints'); 

para eliminar los píxeles innecesarios. (También podría usar thin en lugar de skel).

Creo que el algoritmo básico de los puntos de ramificación mira a los 3,3 píxeles del vecindario si al menos 3 píxeles (excluyendo el centro) son '1'.

+0

¡Muchas gracias! Usar thin para conectarlos mínimamente elimina los falsos positivos, y puedo ver exactamente por qué. Además, creo que no solo comprueba el vecindario de 3x3, ya que, de lo contrario, cualquier unión en T daría 4 píxeles y no solo 1. (Al menos así es como mi réplica del algoritmo se resolvió cuando lo escribí). tienes razón ... ese parece ser el criterio principal. Gracias de nuevo por la operación 'delgada' ... – shashwat

2
BW = (rgb2gray(imread('w5udH.jpg')) > 50); 
[i,j] = ind2sub(size(BW), find(bwmorph(bwmorph(BW,'thin',Inf),'branchpoint') == 1)); 
imshow(BW); hold on; plot(j,i,'rx'); 

(hay algunos extraños artefactos en la imagen causados ​​por la posibilidad de subir desde aquí)

enter image description here

Cuestiones relacionadas