Mahotas - 叠加图像
叠加图像是指将一张图像放在另一张图像之上。它涉及组合两张图像的像素值以创建合成图像。
叠加图像时,顶部图像放置在背景图像上,使顶部图像的像素部分或完全覆盖背景图像的像素。
这可以通过不同程度的透明度来实现,使背景图像在一定程度上显示出来。
在 Mahotas 中叠加图像
我们可以使用 overlay() 函数在 mahotas 中叠加图像。此函数确保叠加图像与基础图像对齐,同时考虑它们的尺寸和像素值。
如果需要,它会自动调整或裁剪覆盖图像以匹配基础图像的大小。
要在 mahotas 中覆盖图像,我们需要定义覆盖图像的透明度或 alpha 值。此值决定了覆盖图像将覆盖背景图像的程度。
mahotas.overlay() 函数
在 mahotas 中,我们使用 mahotas.overlay() 函数来覆盖图像。此函数接受单通道图像作为输入并返回生成的叠加图像。
mahotas.overlay() 函数为每个像素位置选择最大像素值,从而有效地组合两个图像的视觉内容。
当叠加图像具有透明度信息(例如 alpha 通道)时,此操作特别有用,因为它允许叠加图像的透明部分显示基础图像的内容。
语法
以下是 mahotas − 中 overlay() 函数的基本语法
mahotas.overlay(gray, red=None, green=None, blue=None, if_gray_dtype_not_uint8= 'stretch')
参数
以下是 mahotas 中 overlay() 函数接受的参数 −
gray − 它是将叠加颜色通道的灰度图像。它充当叠加的画布。
red, blue , green (可选) − 这些表示将叠加在灰度图像上的各个颜色通道。它们可以作为表示每个颜色通道强度的单独数组提供。
如果未指定任何颜色通道(设置为 None),则生成的叠加图像将仅包含灰度信息。
if_gray_dtype_not_uint8(可选) − 它定义如果输入图像的数据类型不是"np.uint8",则应执行的操作。默认为拉伸。
示例
在下面的示例中,我们尝试使用二进制掩码叠加图像(像素值为 0(背景)或 1(前景) −
import numpy as np import mahotas as mh import matplotlib.pyplot as plt # 加载图像 image1 = mh.imread('sea.bmp') image2 = mh.imread('tree.tiff') image = mh.imread('sea.bmp', as_grey=True) # 前景图像 mask = mh.imread('tree.tiff', as_grey=True) > 0 overlay = mh.overlay(image, mask) # 在一个图中显示所有三幅图像 plt.figure(figsize=(10, 5)) # 显示图像 1 plt.subplot(1, 3, 1) plt.imshow(image1) plt.title('Image 1') plt.axis('off') # 显示图像 2 plt.subplot(1, 3, 2) plt.imshow(image2) plt.title('Image 2') plt.axis('off') # 显示叠加图像 plt.subplot(1, 3, 3) plt.imshow(overlay, cmap='gray') plt.title('Overlayed Image') plt.axis('off') plt.tight_layout() plt.show()
输出
获得的输出如下所示 −

将透明图像叠加在另一幅图像上
要将透明图像叠加在另一幅图像上,我们通过创建 alpha 通道来创建透明叠加层,该通道确定每个像素的透明度。我们初始化一个与背景图像形状相同的零数组,表示 alpha 通道。
对于叠加图像中非零像素,我们将透明度值设置为大于 0。
现在,我们可以通过组合背景图像、叠加图像和 alpha 通道来叠加图像。
我们将背景图像乘以 (1 − alpha) 以降低叠加图像所在位置的强度,并将叠加图像乘以 alpha 通道以控制其透明度。最后,我们将两个组件加在一起。
示例
在这里,我们尝试将透明图像叠加在另一幅图像上 −
import numpy as np import mahotas as mh from pylab import imshow, show # 加载图像 image = mh.imread('tree.tiff', as_grey=True) overlay = mh.imread('sea.bmp', as_grey=True) # 创建透明覆盖层 alpha = np.zeros(image.shape) alpha[overlay > 0] = 0.5 # 设置覆盖中非零像素的透明度值 # 覆盖图像 result = mh.stretch(mh.stretch(image) * (1 - alpha) + overlay * alpha) # 显示结果 imshow(result) show()
输出
上述代码的输出如下 −

覆盖具有指定透明度级别的图像
要覆盖具有指定透明度级别的图像,我们需要首先定义所需覆盖图像的透明度级别。
透明度级别是介于 0.0(完全透明)和 1.0(完全不透明)之间的值。此值决定了背景图像和覆盖图像之间的混合比率。
然后使用 alpha 混合,我们可以根据定义的透明度级别将图像合并在一起。然后,我们需要通过降低覆盖图像所在区域的背景图像强度来调整背景图像强度。
为此,我们将背景图像乘以 (1 − alpha)。然后,我们通过将覆盖图像与 alpha 值相乘来控制其透明度。
然后将调整后的背景图像和具有受控透明度的覆盖图像加在一起以创建最终的覆盖图像。
示例
现在,我们尝试覆盖具有指定透明度级别的图像 −
import numpy as np import mahotas as mh from pylab import imshow, show # 加载图像 image = mh.imread('tree.tiff') overlay = mh.imread('sea.bmp') # 定义透明度级别 alpha = 0.5 # 使用 alpha 混合和透明度级别混合图像 result = mh.stretch(mh.stretch(image) * (1 - alpha) + overlay * alpha) # 显示结果 imshow(result) show()
输出
以下是上述代码的输出 −
