In der Computer Vision gibt es oft keine perfekte, universelle Art, etwas zu tun. Meistens versuchen wir einfach einen Operator, sehen seine Ergebnisse und prüfen, ob sie unseren Anforderungen entsprechen. Auch für die Gradientenberechnung gilt: Der Sobel-Operator ist eine von vielen Möglichkeiten, einen Bildgradienten zu berechnen, der sich in vielen Anwendungsfällen bewährt hat.
In der Tat, desto einfacher Gradientenoperators wir noch einfacher als das man denken könnte vorschlagen, dass Sie über:
[-1 1]
Trotz seiner Einfachheit hat dieser Operator ein erstes Problem: Wenn Sie es verwenden, Sie berechnen der Gradient zwischen zwei Positionen und nicht um eine Position. Wenn Sie es auf 2 Pixel (x,y)
und (x+1,y)
anwenden, haben Sie den Farbverlauf an Position (x,y)
oder (x+1,y)
berechnet? In der Tat, was Sie berechnet haben, ist der Farbverlauf an der Position (x+0.5,y)
, und die Arbeit mit halben Pixeln ist nicht sehr praktisch. Deshalb haben wir eine Null in der Mitte hinzu:
[-1 0 1]
Anwenden dieses zu Pixel (x-1,y)
, (x,y)
und (x+1,y)
werden Sie eindeutig einen Gradienten für das mittlere Pixel geben (x,y)
.
Dieser kann auch als die Faltung von zwei [-1 1]
Filter gesehen werden: [-1 1 0]
dass die Steigung an der Position (x-0.5,y)
, auf der linken Seite des Pixels berechnet, und [0 -1 1]
, die an der rechten Seite des Pixels des Gradienten berechnet.
Jetzt hat dieser Filter noch einen weiteren Nachteil: Er ist sehr rauschempfindlich. Deshalb entscheiden wir nicht, dass es auf einer einzigen Zeile von Pixeln anzuwenden, sondern auf drei Reihen: dies ermöglicht eine durchschnittliche Steigung auf diesen drei Zeilen zu erhalten, die mögliche Geräusch erweichen:
[-1 0 1]
[-1 0 1]
[-1 0 1]
Aber dieses neigt dazu, durchschnittliche Dinge ein wenig zu viel: Wenn sie auf eine bestimmte Zeile angewendet werden, verlieren wir viel von dem, was das Detail dieser bestimmten Zeile macht. Um das zu beheben, wollen wir der mittleren Zeile etwas mehr Gewicht geben, was uns erlaubt, mögliches Rauschen zu eliminieren, indem wir berücksichtigen, was in den vorherigen und nächsten Zeilen passiert, aber immer noch die Spezifität dieser Zeile beibehalten.Das ist, was das Sobel-Filter gibt:
[-1 0 1]
[-2 0 2]
[-1 0 1]
mit den Koeffizienten Manipulieren zu anderen Gradientenoperatoren wie die Scharr Betreiber führen kann, was nur ein wenig mehr Gewicht der mittleren Reihe gibt:
[-3 0 3 ]
[-10 0 10]
[-3 0 3 ]
Es gibt auch mathematische Gründe dafür, wie die Trennbarkeit dieser Filter ... aber ich bevorzuge es als experimentelle Entdeckung zu sehen, die interessante mathematische Eigenschaften bewiesen haben, wie Experiment meiner Meinung nach im Herzen der Computer Vision ist . Nur Ihre Phantasie sind keine Grenzen gesetzt, neue zu schaffen, so lange wie es Ihren Bedürfnissen passt zu ...
Vielen Dank für diese detaillierte Antwort. – Alcott
* "Nur deiner Vorstellungskraft ist die Grenze, um neue zu schaffen, solange es deinen Bedürfnissen entspricht ..." * - +1. – rayryeng