OpenCV Mittelwert / SD-Filter

8

Ich werfe das hier in der Hoffnung aus, dass jemand so etwas Lächerliches versucht hat. Mein Ziel ist es, ein Eingabebild aufzunehmen und basierend auf der Standardabweichung eines kleinen Fensters um jedes Pixel zu segmentieren. Im Grunde genommen sollte dies mathematisch einem Gauss- oder Box-Filter ähneln, da es auf eine vom Benutzer spezifizierte Fenstergröße (oder sogar Laufzeit) um jedes Pixel angewendet wird und das Ziel-Array die SD-Informationen an jedem Pixel enthält. in einem Bild die gleiche Größe wie das Original.

Die Idee ist, dies auf einem Bild im HSV-Raum zu tun, so dass ich Regionen mit homogener Farbe (dh solche mit kleinen lokalen SDs in den Ebenen Hue und Sat) leicht finden und aus dem Bild herausziehen kann. Tiefenbearbeitung.

Die Frage ist also, hat jemand jemals einen benutzerdefinierten Filter wie diesen gebaut? Ich weiß nicht, wie man die SD in einem einfachen Box-Filter-Kernel wie den für Gauss und Blur verwendet, also vermute ich, dass ich das FilterEngine-Konstrukt verwenden muss. Außerdem habe ich vergessen zu erwähnen, dass ich das in C ++ mache.

Ihr Rat und Ihre Gedanken werden sehr geschätzt.

    
gankoji 12.07.2012, 16:40
quelle

1 Antwort

29

Wikipedia hat eine schöne Erklärung der Standardabweichung , die Sie für einen Standardabweichungsfilter verwenden können.

Im Grunde läuft es darauf hinaus, das Bild mit einem Boxfilter zu verwischen, das Quadrat des Bildes mit einem Boxfilter zu verwischen und die Quadratwurzel ihrer Differenz zu nehmen.

UPDATE: Dies wird wahrscheinlich besser mit der Gleichung aus Wikipedia angezeigt ...

Sie können sich die Funktion OpenCV blur als den erwarteten Wert vorstellen (dh E [X] aka das Stichprobenmittel) der Nachbarschaft von Interesse. Die Stichproben X werden in diesem Fall durch Bildpixel in der lokalen Nachbarschaft dargestellt. Unter Verwendung der obigen Äquivalenz haben wir daher in OpenCV etwas wie sqrt(blur(img^2) - blur(img)^2) . Auf diese Weise können Sie die lokalen Mittel und Standardabweichungen berechnen.

Auch für den Fall, dass Sie neugierig auf den mathematischen Beweis sind. Diese Äquivalenz ist bekannt als Berechnungsformel für die Varianz .

So können Sie das in OpenCV machen:

%Vor%

Dies erzeugt die folgenden Bilder:

Original

Mittelwert

Standardabweichung

Hoffe das hilft!

    
mevatron 12.07.2012, 20:16
quelle