Python(9) Numpy, mask图像的生成
2017-07-26 19:48
597 查看
什么是掩膜(mask)
数字图像处理中的掩膜的概念是借鉴于PCB制版的过程,在半导体制造中,许多芯片工艺步骤采用光刻技术,用于这些步骤的图形“底片”称为掩膜(也称作“掩模”),其作用是:在硅片上选定的区域中对一个不透明的图形模板遮盖,继而下面的腐蚀或扩散将只影响选定的区域以外的区域。图像掩膜与其类似,用选定的图像、图形或物体,对处理的图像(全部或局部)进行遮挡,来控制图像处理的区域或处理过程。
光学图像处理中,掩模可以是胶片、滤光片等。数字图像处理中,掩模为二维矩阵数组,有时也用多值图像。数字图像处理中,图像掩模主要用于:
提取感兴趣区,用预先制作的感兴趣区掩模与待处理图像相乘,得到感兴趣区图像,感兴趣区内图像值保持不变,而区外图像值都为0。
屏蔽作用,用掩模对图像上某些区域作屏蔽,使其不参加处理或不参加处理参数的计算,或仅对屏蔽区作处理或统计。
结构特征提取,用相似性变量或图像匹配方法检测和提取图像中与掩模相似的结构特征。
特殊形状图像的制作。
掩膜是一种图像滤镜的模板,实用掩膜经常处理的是遥感图像。当提取道路或者河流,或者房屋时,通过一个n*n的矩阵来对图像进行像素过滤,然后将我们需要的地物或者标志突出显示出来。这个矩阵就是一种掩膜。
上述资料来源于:http://blog.csdn.net/jinxiaonian11/article/details/53467437
在numpy中,有一个模块叫做
ma,这个模块几乎复制了numpy里面的所有函数,当然底层里面都换成了对自己定义的新的数据类型
MaskedArray的操作。
我们来看最基本的array定义。
An array class with possibly masked values. Masked values of True exclude the corresponding element from any computation.
MaskedArray是一个可能带有掩膜信息的数组,对于它的任何计算都是只针对掩膜值为True的数值上的。
Construction:: x = MaskedArray(data, mask=nomask, dtype=None, copy=False, subok=True, ndmin=0, fill_value=None, keep_mask=True, hard_mask=None, shrink=True, order=None)
这个class的属性有很多,但是呢,我们只需要关注三个属性就好了,也就是
data,
mask和
fill_value。其他的属性很难用到,举个例子,比如那个
hard_mask,这个属性为
True就是指data一旦某些值被掩盖掉了就真的丢失了。详细的可以看源码注解。这里不过多介绍。
Parameters ---------- data : array_like Input data. mask : sequence, optional Mask. Must be convertible to an array of booleans with the same shape as `data`. True indicates a masked (i.e. invalid) data. fill_value : scalar, optional Value used to fill in the masked values when necessary. If None, a default based on the data-type is used.
data就不多说了,一个array_like,tuple,list,ndarray都行。
mask是一个只包含
True和
False的ndarray,它的shape和
data一致,这个数组是让你指定需要掩盖的值的,标记为True的数据会被掩盖掉。被掩盖的位置会变成 –(这是两个短横杠,类型是MaskedConstant )
fill_value是一个标量,当你掩盖掉一些值之后,如果你想把这些被掩盖的值换成另外一个值,那么你就需要用到它。
import numpy.ma as npm import numpy as np data = np.random.randint(1, 10, size=[1, 5, 5]) mask = data < 5 arr = npm.array(data, mask=mask) print(arr) #[[[6 6 -- 8 --] # [-- -- -- 6 7] # [9 -- -- 6 9] # [-- -- 5 -- 8] # [6 9 -- 5 --]]]
不过numpy也可以直接对ndarray进行条件运算。
import numpy as np arr = np.random.randint(1, 10, size=[1, 5, 5]) mask = arr<5 arr[mask] = 0 # 把标记为True的值记为0 print(arr) #[[[9 9 7 6 0] # [0 0 6 9 0] # [8 0 8 5 0] # [0 5 5 8 9] # [0 7 0 0 6]]]
相关文章推荐
- Python numpy.array() 生成相同元素数组的方法
- 实例:python图像处理(Pillow+numpy)
- Python 图像处理: 生成二维高斯分布蒙版
- Python numpy生成矩阵、串联矩阵
- Python&OpenCV - 随机生成图像 与 图像的转维(reshape)
- 转如何生成不规则形状的mask,以解决对图像不规则区域设置ROI的问题
- 通过 Python + Python Imaging Library (PIL) 生成简单函数图像
- OpenCV与Python之图像的读入与显示以及利用Numpy的图像转换
- python 使用opencv 对图像mask处理
- Python&OpenCV - 随机生成图像 与 图像的转维(reshape)
- python numpy初始化一个图像矩阵
- python 用numpy生成多维随机数组
- python笔记之NUMPY中的掩码数组numpy.ma.mask
- PYTHON读取三维点云球坐标数据并动态生成三维图像与着色
- 如何生成不规则形状的mask,以解决对图像不规则区域设置ROI的问题
- python用Pygal如何生成漂亮的SVG图像详解
- 如何生成不规则形状的mask,以解决对图像不规则区域设置ROI的问题
- python2.7中用numpy.reshape 对图像进行切割
- OpenCV与Python之图像的读入与显示以及利用Numpy的图像转换
- python学习笔记6—文件操作来生成船只侧面图像的描述文件