Berechnung der Pixelvarianz einer Maske in einem Bild

Sep 18 2020

Ich versuche ein Augenbild statistisch zu analysieren. Ich habe eine Elipse, die die gesamte Augenpartie abdeckt.

Dies ist mein Originalbild:

Dies ist die in Form einer Ellipse erzeugte Maske:

Ich habe diesen Link gefunden , der die Berechnung der Kovarianz vorschlägt, aber ich kann nicht wirklich verstehen, wie man mit einem Modul von numpy arbeitet, und es ist nicht ganz Varianz.https://www.nbshare.io/notebook/160784578/How-To-Handle-nan-In-Numpy/

Hier ist mein aktueller Code von dem, was ich versucht habe:

img = 'path'
img = Image.fromarray(img)
img_PIL = img

    h_1 = 13
    k_1 = 23.5
    a_1 = 3
    b_1 = 5
    
   def _in_ellipse_sub_mask(x, y, h, k, a, b):
        z = ((x-h)**2)/a**2 + ((y-k)**2)/b**2
        if z < 1:
            return True
        else:
            return False
    in_ellipse_mask = np.vectorize(_in_ellipse_iris)
    img = np.asarray(img)
    
    mask_ = _in_ellipse_sub_mask(*np.indices(img.shape), h_1,k_1,a_1,b_1)
    
    plt.imshow(mask_ )
    plt.show()

mask_var = np.nanvar(np.where(sub_mask_, img, np.nan), dtype=np.float64, out=None, ddof=1)

Die Ausgabe:

0,04677148697358601

Ich hatte eine große Zahl über 100 erwartet, aber ich denke, dies ist nicht der richtige Weg, um die Varianz für Masken zu berechnen, da Masken mit booleschen Werten arbeiten, wird es mir kein richtiges Ergebnis liefern

Antworten

1 igrinis Sep 21 2020 at 20:13

Ihre imgist eine Matrix mit Werten zwischen 0 und 1 (zeigt Graustufen an). Sie erwarten Werte zwischen 0 und 255. Aus diesem Grund erwarten Sie eine Varianz von mehr als 100. Multiplizieren Sie daher die imgWerte mit 255 vor nanvar()oder nur das Ergebnis mit 255 ^ 2 (Skalierungseigenschaft). Bitte beachten Sie, dass die nanvar()Matrix vor dem Ausführen von Berechnungen zu einem Vektor abgeflacht wird. Auf diese Weise können Sie einen Skalar aus der Matrix herausholen.

Was das maSubmodul betrifft, enthält das maskierte Array zwei Teile: dataund mask. dataist das eigentliche Datenarray, maskist eine boolesche Matrix mit den gleichen Dimensionen wie data1 an den Stellen, die Sie ignorieren möchten (Maske), und 0 an den Stellen, die Sie interessieren (die nicht maskierten Werte). Die mamathematischen Funktionen ignorieren maskierte Werte.