Wie findet man Mittelwert, Standardabweichung und Gradient aus dem Bildintegral? Gegeben ein Bild wie folgt:
Wie in der obigen Abbildung gezeigt, finden Sie die Summe der hervorgehobenen Teile, sum = C+A-B-D
.
Also haben wir sum = 22
.
Wie kann ich weitermachen, um zu finden:
C+A-B-D
gibt Ihnen die Summe der Graustufen in der von A, B, C, D abgegrenzten Zone, um den Mittelwert zu erhalten, den Sie nur durch den Bereich der Zone teilen müssen:
Um das Entwicklungsprogramm zu erhalten, müssen Sie die Summe der Quadrat Bereichstabelle berechnen (mit cv::integral
können Sie zusätzliche Parameter übergeben, um die Summe der Quadrate zu erhalten). Zitiert wikipedia , die Standardabweichung ist gleich der Quadratwurzel von (der Durchschnitt der Quadrate minus dem Quadrat des Durchschnitts) . Also nehmen wir A ', B', C ', D' die Werte in Ihrer Quadrat Bereichstabelle:
So ist die Berechnung von Mittelwert und Entwicklung mit integralem Bild sehr schnell mit integrierten Bildern, besonders wenn Sie diese Größen an zufälligen Orten und auf zufälliger Größe von Bildfeldern berechnen wollen.
Was den Gradienten betrifft, ist er komplexer. Sind Sie sicher, dass Sie sobel
operator nicht verwenden möchten?
Wenn C + A-B-C die Summe aller Graustufen in der Zone ist, dann ist der Mittelwert nicht
%Vor%aber
%Vor%wobei K die Anzahl der Graustufen in der Zone ist.
Auch
%Vor%ist nicht der stdev, weil
%Vor%Die Gleichung hier ist äquivalent zu
%Vor%diese Gleichungen sind nicht gleichwertig.
Was jmch nicht gesagt hat, ist, wenn sqrt( C'+A'-B'-D'/K - (mean*mean) )
nicht ist, wie Sie die Standardabweichung vom Integral berechnen, wie Sie es dann machen?
Lassen Sie mich zuerst zu Python / numpy Code, so dass wir ein Minimum an Notationskonsistenz erhalten und Ausdrücke leichter zu überprüfen sind. Geben Sie ein Beispiel-Array X an, sagen Sie:
%Vor% Die unkorrigierte Standardabweichung der Stichprobe von X
kann wie folgt definiert werden:
Wenn wir das binomiale Theorem auf (X - mean(X)) ** 2
anwenden, erhalten wir:
Angesichts der Identitäten der Summationsoperation können wir Folgendes machen:
%Vor% Wenn wir S = sum(X)
, S2 = sum(X ** 2)
, M = mean(X)
und N = len(X)
machen, erhalten wir:
Nun für ein Bild I
und zwei Integralbilder P
und P2
berechnet aus I
(wobei P2
das Integralbild für quadratische Pixelwerte ist), wissen wir, dass die vier Kantenkoordinaten gegeben sind A = (i0, j0)
, B = (i0, j1)
, C = (i1, j0)
und D = (i1, j1)
, die Werte von S
, S2
, M
und N
können für den Bereich I[A:D]
wie folgt berechnet werden:
Dies kann dann auf die Gleichung (4) angewendet werden, die die Standardabweichung des Bereichs I[A:D]
ergibt.
Bearbeiten: Es ist nicht unbedingt notwendig, aber mit M = S / N
können wir die folgenden Ersetzungen und Vereinfachungen für Gleichung (4) anwenden:
Was ziemlich nah an der Gleichung ist, die remi gab, tatsächlich.
Tags und Links opencv