2017-05-04 3 views
0

Ich habe ein Bild mit Zellen. Ich kann es nicht liefern, aber es ist ähnlich dem Bild, das hier als Beispiel verwendet wird: http://blogs.mathworks.com/steve/2006/06/02/cell-segmentation/, aber ohne die charakteristischen Kerne.Erosion ohne Verlust von Regionen

Ich habe etwas verarbeitet und bin jetzt mit einer ziemlich guten Segmentierung verlassen, aber einige Zellen sind nahe beieinander und ich muss sie teilen. Die meisten bestehen aus mehr oder weniger überlappenden Ellipsen.

Ich bin sicher, dass ein paar Iterationen der einfachen Erosion fast alle diese Regionen teilen werden. Aber einige der anderen Zellen sind so klein, dass sie verschwinden, bevor sich die anderen teilen. Daher benötige ich einen Algorithmus, der das Bild erodiert, das Teilen von Regionen erlaubt, aber nicht das letzte Pixel einer Region löscht.

Ich möchte anschließend Wasserscheide verwenden, um die Zellen zu segmentieren.

Ich denke, ich könnte dies selbst implementieren, indem ich nach Regionen suche und dann feststelle, dass ich nichts verliere, aber die Implementierung scheint selbst in meinem Kopf unordentlich zu sein und ich denke, dass es einfacher sein muss Weg. Also meine Frage ist im Grunde, wie lautet der Name, damit ich eine Implementierung googlen kann? Oder, wenn es keine off-the-shelf-Lösung ist, was ist ein eleganter Weg, um dies umzusetzen, ohne Dutzende von Iterationen und für Schleifen usw.

(Sprache ist Python)

+0

Leider ist SO nicht der richtige Ort, um diese Fragen zu stellen. Es ist eher wie: Ich habe das gefunden, und ich habe versucht X, aber es funktioniert nicht, also können Sie mir helfen, das Problem zu debuggen? Wenn Sie bei der Suche helfen müssen, sollten Sie zumindest versuchen, in Ihrer eigenen Show zu suchen, welche ähnlichen Algorithmen Sie gefunden haben und warum sie nicht Ihren Anforderungen entsprechen. – Dbz

+0

@Dbz Ich habe versucht zu suchen, aber ich vermisse anscheinend den richtigen Suchbegriff. Ich versuchte Erosion, um große Regionen zu trennen, aber es löscht kleine Regionen, wie behalte ich sie? * Eine bessere Frage sein? Ich könnte über eine Liste zusammenhängender Regionen iterieren und prüfen, ob sie noch im erodierten Bild vorhanden sind, aber das scheint sehr ineffizient zu sein. Ich denke, dass es einen Weg geben könnte, binär und/oder zwischen erodiertem Bild und vorher, um fehlende Regionen zu finden, aber ich bin nicht sicher, wie, ich vermisse einen Schritt. – DonQuiKong

+0

Ich kenne Dinge wie Skelette, morphologische Filter, Wasserscheide, Splitting-Algorithmen basierend auf Rois mit festen Größen, lokale Otsu, Hough usw.die allesamt nahe daran sind, das zu erreichen, was ich will, aber keines tut genau das, was ich brauche, noch kommen sie nahe genug, um von dort zu anderen Algorithmen zu kommen. Ich glaube, ich habe es eingegrenzt, ich weiß einfach nicht, wie ich es erreichen soll. – DonQuiKong

Antwort

1

Es ist ein klassisches Problem, und wenn die Überlappung zwischen den Zellen ist zu wichtig, sagen wir 40% oder mehr, dann gibt es keine gute Lösung.

Wenn jedoch die Überlappung ist nicht wichtig, hier ist die Lösung:

  • Sie aus der Segmentierung starten Sie haben, nennen wir es
  • Sie Computer S das ultimative UE erodiert (S). Es wird Ihnen das Zentrum jeder Zelle geben. Es wird Ihnen etwas wie the red points on this image geben. In diesem Bild verwenden sie eine Entfernungskarte, eine ultimative erodierte wird stabiler sein. Wenn immer noch viele rote Punkte pro Zelle vorhanden sind, wird eine Erweiterung des UE (S) Ihr Problem wie this example beheben.
  • Sie invertieren Inv (S) oder berechnen das Voronoi-Diagramm Voi (S), um eine Markierung im Hintergrund zu haben.
  • Watershed auf dem Gradientenbild von S, mit dem UE (S) als innerer Marker (perfekt, weil Sie einen Punkt pro Zelle haben) und Inv (S) oder Voi (S) als Hintergrund/äußerer Marker.

Sie erhalten etwas wie this example.

Verwandte Themen