我试图统计分析眼睛图像。我的椭圆形覆盖了整个眼睛区域。
这是我的原始图片:
这是以椭圆形式生成的蒙版:
我发现这个link暗示了协方差的计算,但是我无法真正掌握如何使用numpy的ma模块,而且它的方差也不大。 https://www.nbshare.io/notebook/160784578/How-To-Handle-nan-In-Numpy/
这是我正在尝试的当前代码:
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)
输出:
0.04677148697358601
我原本以为会超过100个,但是我想这不是计算蒙版方差的正确方法,因为蒙版可以使用布尔值,所以不会给我合适的结果
答案 0 :(得分:1)
您的img
是一个矩阵,其值在0到1之间(表示灰度级)。您希望该值为0-255。这就是为什么期望方差大于100的原因。因此,将img
的值乘以nanvar()
之前的255,或者仅将结果乘以255 ^ 2(缩放属性)。请注意,nanvar()
在执行计算之前将矩阵展平为矢量,这是从矩阵中获取标量的方法。
对于ma
子模块,掩码数组包含两部分:data
和mask
。 data
是实际的数据数组,mask
是与data
相同维的布尔矩阵,在您要忽略(屏蔽)的位置为1,在您关心的位置为0(未屏蔽的值)。 ma
数学函数将忽略掩码值。