Der Scharr-Filter wird in Scharrs-Dissertation erläutert. Die auf Seite 155 (167 in der PDF) angegebenen Werte sind jedoch [47 162 47] / 256
. Die Multiplikation mit dem Ableitungsfilter würde ergeben:
Aber alle anderen Referenzen, die ich gefunden habe, benutzen
Das entspricht in etwa dem von Scharr, skaliert um den Faktor 32.
Ich vermute, dass die Reichweite besser dargestellt werden kann, aber ich bin neugierig, ob es irgendwo eine offizielle Erklärung gibt.
Um den Ball in dieser Frage ins Rollen zu bringen, falls kein "Experte" gefunden werden kann ...
Ich glaube, die Werte [3, 10, 3] ... anstelle von [47 162 47] / 256 ... werden einfach für die Geschwindigkeit verwendet. Daran erinnern, dass diese Methode gegen den Sobel Operator konkurriert, dessen Koeffizientenwerte 0 sind, und positive / negative 1 und 2.
Obwohl der Divisor in der Division, 256 oder 512, eine Potenz von 2 ist und durch eine Verschiebung ausgeführt werden kann, wird das mehr Zeit brauchen, wenn man das tut und mit 47 oder 162 multipliziert. Eine Multiplikation mit 3 kann jedoch tatsächlich in einigen RISC-Architekturen wie der IBM POWER-Reihe in einer einzigen Shift-and-Add-Operation durchgeführt werden. Das ist 3x = (x << 1) + x
. (Auf diesen Architekturen sind Shifter und Addierer separate Einheiten und können unabhängig voneinander ausgeführt werden.)
Ich finde es nicht überraschend, dass das PhD-Papier die kompliziertere und wahrscheinlich präzisere Formel benutzte; es musste etwas beweisen oder demonstrieren, und der Autor war wahrscheinlich nicht ganz sicher oder besorgt, dass es neben anderen Methoden verwendet und implementiert wird. Der Zweck dieser Arbeit war wahrscheinlich eine "perfekte Rotationssymmetrie". Später, als man sich dazu entschloss, es zu implementieren, benutzte ich die Näherungsformel und gab ein wenig auf die perfekte Rotationssymmetrie auf, um an Geschwindigkeit zu gewinnen. Das Ziel dieser Person war, wie ich sagte, etwas zu haben, das auf Kosten von wenig bisschen Geschwindigkeit für dieses drehende Zeug wettbewerbsfähig war.
Da ich vermute, dass Sie bereit sind, so zu arbeiten, wie es Ihre These ist, ist mein Vorschlag, den ursprünglichen Algorithmus zu implementieren und ihn sowohl mit dem OpenCV Scharr- als auch mit dem Sobel-Code zu vergleichen.
Die andere Sache, um eine "offizielle" Antwort zu bekommen, ist: "Benutze die 'Quelle', Luke!". Der Code ist auf github , also schaut es euch an und seht, wer dort den Scharr-Filter hinzugefügt hat und kontaktiert diese Person . Ich werde den Namen der Person hier nicht setzen, aber ich werde sagen, dass der Code 2010-05-11 hinzugefügt wurde.
Tags und Links opencv image-processing