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
廣告