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”,则定义要执行的操作。默认值为 stretch。

示例

在以下示例中,我们尝试使用二值掩码(像素值要么为 0(背景)要么为 1(前景))叠加图像:

import numpy as np
import mahotas as mh
import matplotlib.pyplot as plt
# Load the images
image1 = mh.imread('sea.bmp')
image2 = mh.imread('tree.tiff')
image = mh.imread('sea.bmp', as_grey=True)
# foreground image
mask = mh.imread('tree.tiff', as_grey=True) > 0
overlay = mh.overlay(image, mask)
# Display all three images in one plot
plt.figure(figsize=(10, 5))
# Display image1
plt.subplot(1, 3, 1)
plt.imshow(image1)
plt.title('Image 1')
plt.axis('off')
# Display image2
plt.subplot(1, 3, 2)
plt.imshow(image2)
plt.title('Image 2')
plt.axis('off')
# Display the overlayed image
plt.subplot(1, 3, 3)
plt.imshow(overlay, cmap='gray')
plt.title('Overlayed Image')
plt.axis('off')
plt.tight_layout()
plt.show()

输出

获得的输出如下所示:

Overlaying Image

将透明图像叠加到另一个图像上

要将透明图像叠加到另一个图像上,我们通过创建 alpha 通道来创建透明叠加,该通道决定每个像素的透明度。我们使用与背景图像相同形状的零数组初始化 alpha 通道。

对于叠加图像中非零的像素,我们将透明度值设置为大于 0。

现在,我们可以通过组合背景图像、叠加图像和 alpha 通道来叠加图像。

我们将背景图像乘以 (1 − alpha) 以降低叠加图像存在区域的强度,并将叠加图像乘以 alpha 通道以控制其透明度。最后,我们将这两个组件加在一起。

示例

在这里,我们尝试将透明图像叠加到另一个图像上:

import numpy as np
import mahotas as mh
from pylab import imshow, show
# Load the images
image = mh.imread('tree.tiff', as_grey=True)
overlay = mh.imread('sea.bmp', as_grey=True)
# Create a transparent overlay
alpha = np.zeros(image.shape)
alpha[overlay > 0] = 0.5 # Set transparency value for non-zero pixels in
overlay
# Overlay the images
result = mh.stretch(mh.stretch(image) * (1 - alpha) + overlay * alpha)
# Display the result
imshow(result)
show()

输出

上述代码的输出如下:

Overlaying Transparent Image

将图像叠加到具有指定透明度级别的图像上

要将图像叠加到具有指定透明度级别的图像上,我们需要首先定义所需的叠加图像的透明度级别。

透明度级别是 0.0(完全透明)到 1.0(完全不透明)之间的值。此值决定背景图像和叠加图像之间的混合比例。

然后使用 alpha 混合,我们可以根据定义的透明度级别将图像合并在一起。然后我们需要通过降低叠加图像存在区域的背景图像强度来调整背景图像强度。

为此,我们将背景图像乘以 (1 − alpha)。然后我们通过将其与 alpha 值相乘来控制叠加图像的透明度。

然后将调整后的背景图像和具有受控透明度的叠加图像加在一起以创建最终的叠加图像。

示例

现在,我们尝试将图像叠加到具有指定透明度级别的图像上:

import numpy as np
import mahotas as mh
from pylab import imshow, show
# Load the images
image = mh.imread('tree.tiff')
overlay = mh.imread('sea.bmp')
# Define the transparency level
alpha = 0.5
# Blend the images using alpha blending and transparency level
result = mh.stretch(mh.stretch(image) * (1 - alpha) + overlay * alpha)
# Display the result
imshow(result)
show()

输出

以下是上述代码的输出:

Overlaying Transparent Image1
广告