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:
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:
Código de Mathematica ( src
es 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}]