在skimage中将图像与蒙版相交

时间:2019-01-06 19:28:14

标签: scikit-image

我已将图像加载到Python的scikit-image库中。 我还创建了与图像尺寸相同的蒙版,现在我想将蒙版与图像相交,以仅显示蒙版不为零的图像像素。如何在不逐像素迭代的情况下做到这一点?

我是否仅将蒙版应用于图像,如:

new_image = image[mask]

或者我可以将两个图像阵列相乘以逐像素相乘吗?

2 个答案:

答案 0 :(得分:1)

按元素乘法确实可以完美地工作:

from skimage import data
from matplotlib import pyplot as plt

image = data.coins()
mask = image > 128
masked_image = image * mask

fig, (ax0, ax1) = plt.subplots(nrows=1, ncols=2)
ax0.imshow(image, cmap='gray')
ax1.imshow(masked_image, cmap='gray')

enter image description here

注释1 :您的代码示例不是scikit图像问题,而是NumPy索引问题,将不执行您想要的操作,而是返回所有像素的线性数组,其中{{ 1}}是mask。有关更多信息,请参见NumPy documentation on boolean indexing

注释2 :您还可以使用scikit-image保存图像:

True

答案 1 :(得分:0)

您可以这样做:

from skimage import data
import numpy as np
from PIL import Image

# Load coins data-set
im = data.coins()

# Make mask of where image is less than mid-grey
mask = im<128

# Set image black everywhere it was less than mid-grey
im[mask] = 0

# Set image mid-grey everywhere it was mid-grey or brighter
im[~mask] = 128

# Convert to PIL image and save
Image.fromarray(im).save('result.png')

硬币的原始图像:

enter image description here

结果图像:

enter image description here