Segmentierung griechischer Münzen mit spectraler Clustering-Methode

Machine LearningMachine LearningBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab verwenden wir die spectrale Clustering, um ein Bild griechischer Münzen in mehrere teils homogene Regionen zu segmentieren. Spectrale Clustering ist eine leistungsstarke Technik, die verwendet werden kann, um Cluster in einem Datensatz anhand der Ähnlichkeit zwischen ihren Merkmalen zu identifizieren. In diesem Lab verwenden wir die spectrale Clustering, um ein Bild zu segmentieren, indem wir einen Graphen aus der Voxel-zu-Voxel-Differenz auf einem Bild erstellen und das Bild dann in mehrere teils homogene Regionen aufteilen.

VM-Tipps

Nachdem der VM-Start abgeschlossen ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie während des Lernens Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL ml(("Machine Learning")) -.-> ml/FrameworkandSoftwareGroup(["Framework and Software"]) ml/FrameworkandSoftwareGroup -.-> ml/sklearn("scikit-learn") subgraph Lab Skills ml/sklearn -.-> lab-49083{{"Segmentierung griechischer Münzen mit spectraler Clustering-Methode"}} end

Bild laden und vorverarbeiten

Wir beginnen mit dem Laden des Bildes griechischer Münzen und dessen Vorverarbeitung, um es einfacher zu bearbeiten. Wir verkleinern das Bild auf 20 % seiner ursprünglichen Größe und wenden einen Gauß-Filter zur Glättung an, bevor wir es verkleinern, um Aliasing-Artifakte zu reduzieren.

## ladet die Münzen als numpy-Array
orig_coins = coins()

## Verkleinert es auf 20 % seiner ursprünglichen Größe, um die Verarbeitung zu beschleunigen
## Wenden Sie einen Gauß-Filter zur Glättung an, bevor Sie es verkleinern
## reduziert Aliasing-Artifakte.
smoothened_coins = gaussian_filter(orig_coins, sigma=2)
rescaled_coins = rescale(smoothened_coins, 0.2, mode="reflect", anti_aliasing=False)

Konvertiere das Bild in einen Graphen mit dem Wert des Gradienten an den Kanten

Wir werden das Bild in einen Graphen mit dem Wert des Gradienten an den Kanten umwandeln. Je kleiner beta ist, desto unabhängiger ist die Segmentierung von dem tatsächlichen Bild. Für beta = 1 ist die Segmentierung nahezu eine Voronoi-Segmentierung.

## Konvertiere das Bild in einen Graphen mit dem Wert des Gradienten an den
## Kanten.
graph = image.img_to_graph(rescaled_coins)

## Nehme eine abnehmende Funktion des Gradienten: eine Exponentialfunktion
beta = 10
eps = 1e-6
graph.data = np.exp(-beta * graph.data / graph.data.std()) + eps

Anwenden der spectralen Clustering-Methode

Wir werden die spectrale Clustering-Methode mit dem Standard-Wert eigen_solver='arpack' anwenden. Es kann jeder implementierte Solver verwendet werden: eigen_solver='arpack', 'lobpcg' oder 'amg'. Die Verwendung von eigen_solver='amg' erfordert ein zusätzliches Paket namens 'pyamg'. Die Qualität der Segmentierung und die Rechengeschwindigkeit werden hauptsächlich durch die Wahl des Solvers und den Wert der Toleranz 'eigen_tol' bestimmt.

## Anwenden Sie die spectrale Clustering-Methode mit dem Standard-Wert eigen_solver='arpack'.
## Es kann jeder implementierte Solver verwendet werden: eigen_solver='arpack', 'lobpcg' oder 'amg'.
## Die Verwendung von eigen_solver='amg' erfordert ein zusätzliches Paket namens 'pyamg'.
## Die Qualität der Segmentierung und die Rechengeschwindigkeit werden hauptsächlich bestimmt
## durch die Wahl des Solvers und den Wert der Toleranz 'eigen_tol'.
n_regions = 26
n_regions_plus = 3
for assign_labels in ("kmeans", "discretize", "cluster_qr"):
    t0 = time.time()
    labels = spectral_clustering(
        graph,
        n_clusters=(n_regions + n_regions_plus),
        eigen_tol=1e-7,
        assign_labels=assign_labels,
        random_state=42,
    )
    t1 = time.time()
    labels = labels.reshape(rescaled_coins.shape)

Visualisiere die Segmentierung

Wir werden die resultierenden Regionen visualisieren, indem wir das ursprüngliche Bild plotten und die Konturen der segmentierten Regionen darüber legen.

plt.figure(figsize=(5, 5))
plt.imshow(rescaled_coins, cmap=plt.cm.gray)
plt.xticks(())
plt.yticks(())
title = "Spectral clustering: %s, %.2fs" % (assign_labels, (t1 - t0))
print(title)
plt.title(title)
for l in range(n_regions):
    colors = [plt.cm.nipy_spectral((l + 4) / float(n_regions + 4))]
    plt.contour(labels == l, colors=colors)
plt.show()

Zusammenfassung

In diesem Lab haben wir die spectrale Clustering-Methode verwendet, um ein Bild griechischer Münzen in mehrere teils homogene Regionen zu segmentieren. Wir haben das Bild vorverarbeitet, es in einen Graphen mit dem Wert des Gradienten an den Kanten umgewandelt, die spectrale Clustering-Methode angewendet und die resultierenden Regionen visualisiert. Die spectrale Clustering-Methode ist eine leistungsstarke Technik, die verwendet werden kann, um Cluster in einem Datensatz anhand der Ähnlichkeit ihrer Merkmale zu identifizieren.