【问题标题】:Subtracting image elipses from each other using numpy masks使用 numpy 掩码相互减去图像省略号
【发布时间】:2020-09-18 13:22:46
【问题描述】:

我正在尝试通过使用椭圆形掩码并取掩码内值的平均值来计算特定区域内的面积。像这样:

这是一个眼睛图像,最初是:

我要做的是分别计算巩膜和虹膜的面积。我想要做的方式是通过生成蒙版,一个仅用于虹膜,第二个用于整个眼睛,第三个从整个眼部蒙版中减去虹膜蒙版以获得巩膜蒙版,其中第一个蒙版只是虹膜区域,第二个区域是整个眼睛,第三个区域是减法,这正是我想做的。通过减法分别得到巩膜的面积。

问题是我的掩码函数返回布尔值,这是我试图做的:

from PIL import Image 
  
img = Image.open(r'imgpath')  
  
 
h_1 = 16
k_1 = 31
a_1 = 7
b_1 = 17

#elipse function
def _in_ellipse(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 = np.vectorize(_in_ellipse)
img = np.asarray(img)
mask = in_ellipse(*np.indices(img.shape), h_1,k_1,a_1,b_1)

#Visualize the mask size
plt.imshow(mask)
plt.show()


#See if its inside the boundaries
plt.imshow(np.where(mask, img, np.nan))
plt.show()

mask_mean = np.nanmean((np.where(mask, img, np.nan)))

我想做的是在计算平均值之前,我想单独获取巩膜的平均值,尝试是通过减去两个区域,但是椭圆函数没有按预期返回像素值,它返回布尔值:

面具:

array([[False, False, False, ..., False, False, False],
       [False, False, False, ..., False, False, False],
       [False, False, False, ..., False, False, False],
       ...,
       [False, False, False, ..., False, False, False],
       [False, False, False, ..., False, False, False],
       [False, False, False, ..., False, False, False]])

【问题讨论】:

    标签: python numpy image-processing


    【解决方案1】:

    据我了解,要从eye_maskiris_mask 生成sclera_mask,它们都是boolean 类型,您的减法 想法可以翻译对两个掩码进行逻辑的、逐元素的 XOR 操作:

    sclera_mask = np.logical_xor(eye_mask, iris_mask)
    

    更多信息请参阅文档:numpy.logical_xor

    【讨论】:

      猜你喜欢
      • 2023-02-03
      • 2012-07-14
      • 1970-01-01
      • 2017-06-15
      • 1970-01-01
      • 1970-01-01
      • 2011-01-11
      • 2017-04-22
      • 2021-05-13
      相关资源
      最近更新 更多