Heim  >  Artikel  >  Backend-Entwicklung  >  So verwenden Sie Python zur Bildkantenerkennung

So verwenden Sie Python zur Bildkantenerkennung

王林
王林nach vorne
2023-06-03 21:22:011929Durchsuche

Kantenerkennung

Bildkanten beziehen sich auf die Pixelmenge im Bild, bei der sich die Graustufen der umgebenden Pixel, die das Objekt ausdrücken, Schritt für Schritt ändern.

An der Kreuzung zweier benachbarter Bereiche mit unterschiedlichen Graustufen im Bild muss es einen schnellen Übergang von Graustufen oder Sprüngen geben. Sie entsprechen den Positionen der Kanten jedes Bereichs im Bild. Wie Richtung, Stufeneigenschaften, Form usw. ändern sich Pixel entlang der Kante langsam, während sich Pixel senkrecht zur Kantenrichtung drastisch ändern.

Die meisten Informationen im Bild konzentrieren sich auf die Kanten. Sobald die Kanten bestimmt sind, wird tatsächlich die Segmentierung verschiedener Bereiche erreicht.

Kantenerkennungsoperatoren

Das Finden von Kanten erfordert häufig die Hilfe einiger Kantenerkennungsoperatoren. Einige dieser Operatoren sind Operatoren, die auf Ableitungen erster Ordnung basieren, und einige sind Differentialoperatoren zweiter Ordnung.

Roberts-Operator, Prewitt-Operator, Sobel-Operator Sie enthalten Vorlagen in x- und y-Richtung. Jede Vorlage reagiert nur auf die entsprechende Richtung, hat eine offensichtliche Ausgabe in diese Richtung und reagiert kaum auf Änderungen in andere Richtungen. Im Folgenden sind einige gängige Differentialoperatoren erster Ordnung und ihre Eigenschaften aufgeführt:

Operatorname Eigenschaften
Einfacher Differentialoperator ist empfindlich gegenüber Rauschen und hat einen gewissen Verstärkungseffekt auf Rauschen
Roberts-Operator hat einen geringen Rauschunterdrückungseffekt und seine Kantenerkennungsfähigkeit ist besser als die eines einfachen Differentialoperators
Prewitt-Operator kann den Einfluss von Rauschen wirksam unterdrücken und gleichzeitig Kantenpunkte erkennen
Sobel-Operator Die erhaltene Kante ist breiter und der Rauschunterdrückungseffekt ist stärker.
Canny-Operator Die erkannte Kantenposition ist genau und die Kante ist schmal . Prewitt-Operator

3. Die vom Sobel-Operator erkannten Kanten sind kontinuierlicher als die Erkennungsergebnisse des Roberts-Operators und verfügen über bessere Erkennungsmöglichkeiten für Bilddetails, und der Sobel-Kantendetektor führt eine lokale Mittelung ein , die Auswirkung auf den Lärm ist relativ gering und die Wirkung ist besser.

4 Breite. So verwenden Sie Python zur BildkantenerkennungDie Implementierung des Algorithmus ist in die folgenden 4 Schritte unterteilt:

Verwenden Sie den Gaußschen Filter, um das Bild zu glätten So verwenden Sie Python zur Bildkantenerkennung

Verwenden Sie die endliche Differenz der partiellen Ableitung erster Ordnung, um die Größe und Richtung des Gradienten zu berechnen

So verwenden Sie Python zur BildkantenerkennungLeitung der Nichtlinearität der Gradientenamplitude. Maximale Unterdrückung.

Verwenden Sie einen Dual-Schwellenwert-Algorithmus, um Kanten zu erkennen und zu verbinden zweidimensional Der Tutor-Operator erster Ordnung reagiert sehr empfindlich auf Bildrauschen, und die erkannten Kanten sind oft doppelte Pixel breit und haben keine Richtungsinformationen. Daher wird der Laplace-Operator selten direkt zum Erkennen von Kanten verwendet, sondern hauptsächlich Bestimmen Sie für bekannte Kanten nach einem Pixel, ob sich das Pixel in einem dunklen oder hellen Bereich des Bildes befindet. Darüber hinaus bildet der Differenzoperator erster Ordnung einen großen Gradientenwert in einem weiten Bereich, sodass er nicht genau positioniert werden kann, während der Nulldurchgangspunkt des Differenzoperators zweiter Ordnung zur genauen Lokalisierung der Kante verwendet werden kann.
Das Rauschen des Laplace-Operators ist offensichtlich größer als das des Sobel-Operators, aber seine Kanten sind viel dünner als die von Sobel, und die Laplace-Transformation ist als Differentialoperator zweiter Ordnung besonders rauschempfindlich und erzeugt Doppelkanten und kann die Kantenrichtung nicht erkennen.

  • Effektexperiment
  • 1. Roberts-Kantenerkennung

  • Prewitt-Operatorcode:
  • Roberts_kernel_x = np.array([[-1, 0], [0, 1]], dtype=int)
    Roberts_kernel_y = np.array([[0, -1], [1, 0]], dtype=int)

  • 2. Prewitt-Kantenerkennung

rreee


3 , Sobel Kantenerkennung

So verwenden Sie Python zur BildkantenerkennungSobel-Funktion:

4. Canny-Kantenerkennung

Canny-Funktion:

So verwenden Sie Python zur Bildkantenerkennung5. Laplace-Kantenerkennung

Roberts_kernel_x = np.array([[-1, 0], [0, 1]], dtype=int)
Roberts_kernel_y = np.array([[0, -1], [1, 0]], dtype=int)

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Python zur Bildkantenerkennung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen