Berechnung der Pixelvarianz einer Maske in einem Bild
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
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.