Jaccard-Index versus Genauigkeit#

Abhängig vom Anwendungsfall sind einige Metriken suboptimal für die Bestimmung der Segmentierungsqualität. Wir demonstrieren dies, indem wir Segmentierungsergebnisse auf unterschiedlich zugeschnittenen Bildern vergleichen.

Siehe auch:

from skimage.data import human_mitosis
from the_segmentation_game import metrics
import napari_segment_blobs_and_things_with_membranes as nsbatwm
import stackview

Wir verwenden den Beispieldatensatz human_mitosis aus scikit-image.

image = human_mitosis()[95:165, 384:454]

stackview.insight(image)
shape(70, 70)
dtypeuint8
size4.8 kB
min8
max79

Nehmen wir an, dies ist eine Referenzannotation, die von einem Experten durchgeführt wurde.

reference_labels = nsbatwm.voronoi_otsu_labeling(image)
reference_labels
nsbatwm made image
shape(70, 70)
dtypeint32
size19.1 kB
min0
max3

Darüber hinaus erstellen wir ein Segmentierungsergebnis, dessen Qualität wir bestimmen möchten.

test_labels = nsbatwm.gauss_otsu_labeling(image, outline_sigma=3)

test_labels
nsbatwm made image
shape(70, 70)
dtypeint32
size19.1 kB
min0
max3

Qualitätsmessung#

Es gibt zahlreiche Qualitätsmetriken zur Messung, wie gut die beiden Labelbilder zueinander passen. Im Folgenden verwenden wir Genauigkeit und Jaccard-Index, wie sie in The Segmentation Game implementiert sind, einem napari-Plugin zur Messung von Qualitätsmetriken von Segmentierungsergebnissen.

metrics.roc_accuracy_binary(reference_labels, test_labels)
0.9744898
metrics.jaccard_index_sparse(reference_labels, test_labels)
0.7274754206261056

Wir wenden nun die gleichen Metriken erneut auf das Labelbild an, schneiden das Labelbild jedoch zu, indem wir einige der Null-Wert-Pixel oben und links im Labelbild entfernen.

metrics.roc_accuracy_binary(reference_labels[20:,20:], test_labels[20:,20:])
0.95
metrics.jaccard_index_sparse(reference_labels[20:,20:], test_labels[20:,20:])
0.7274754206261056

Wie Sie sehen können, ändert sich die Genauigkeitsmetrik, während der Jaccard-Index gleich bleibt. Offensichtlich hängt die Genauigkeitsmetrik von der Anzahl der Null-Wert-Pixel im Labelbild ab. Wir visualisieren nun die zugeschnittenen Bilder:

reference_labels[20:,20:]
nsbatwm made made image
shape(50, 50)
dtypeint32
size9.8 kB
min0
max3
test_labels[20:,20:]
nsbatwm made made image
shape(50, 50)
dtypeint32
size9.8 kB
min0
max3

Erklärung#

Beim Vergleich der Gleichungen für Genauigkeit \(A\) und Jaccard-Index \(J\) wird deutlich, dass beide ähnliches tun, aber nur die Genauigkeit die Anzahl der Null-Wert-Pixel in beiden Labelbildern berücksichtigt. Diese Pixel sind die wahren Negativen \(TN\).

\[ A =\frac{TP + TN}{FN + FP + TP + TN} \]
\[ J =\frac{TP}{FN + FP + TP} \]