python - 使用 numpy 掩码相互减去图像省略号
问题描述
我正在尝试通过使用椭圆形掩码并取掩码内值的平均值来计算特定区域内的面积。像这样:
这是最初的眼睛图像:
我想做的是分别计算巩膜和虹膜的面积。我想要做的方式是通过生成蒙版,一个仅用于虹膜,第二个用于整个眼睛,第三个从整个眼部蒙版中减去虹膜蒙版以获得巩膜蒙版,其中第一个蒙版只是虹膜区域,第二个区域是整个眼睛,第三个区域是减法,这正是我想做的。通过减法分别得到巩膜的面积。
问题是我的掩码函数返回布尔值,这是我试图做的:
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]])
解决方案
据我了解,要生成sclera_mask
fromeye_mask
和iris_mask
,它们都是布尔类型,您的减法思想转化为对两个掩码进行逻辑的、逐元素的 XOR 操作:
sclera_mask = np.logical_xor(eye_mask, iris_mask)
更多关于这个的文档:numpy.logical_xor
推荐阅读
- node.js - 使用 socket.io 数据快速路由
- java - 在 java libgdx 上实现一个动画类
- vba - MS Access - 多重搜索表单
- security - 什么是阻止对 HTML 表单中 action 属性中的链接的攻击?
- android - 在 Fragment 上单击 RecyclerView 的 Adapter(Photos) 的 ITEM 时显示 ImageView
- javascript - 传单地图图层在我的 PyQt5 界面和 Chrome/Chromium 浏览器上不起作用
- http-headers - 如果条件标头返回 304,max-age 会自动更新吗?
- azure - 云服务角色无法重新启动
- java - “使用不可重入迭代器方法:Array.iterator()”错误消息是什么意思?
- email - 谷歌分析打开电子邮件