Mahotas - Haar 逆變換



Haar 逆變換是指從 Haar 變換後的影像重建原始影像的技術。在瞭解 Haar 逆變換之前,讓我們先了解一下 Haar 變換

Haar 變換是一種將影像從畫素強度值轉換為小波係數(表示影像不同頻率的值)的技術。

在 Haar 變換中,影像被分解成一組稱為 Haar 小波的 正交基函式

Haar 逆變換透過以特定方式(如下所述)組合 Haar 小波,將小波係數轉換為畫素強度值。

在 Mahotas 中進行 Haar 逆變換

在 Mahotas 中,我們可以使用 **mahotas.ihaar()** 函式執行 Haar 逆變換。以下是執行逆 Haar 變換的基本方法:

  • 首先,從 Haar 變換中獲取 Haar 小波係數。

  • 接下來,將每個係數乘以一個縮放因子和 Haar 小波。對於 Haar 小波,近似係數的縮放因子通常為 $\mathrm{1/\sqrt{2}}$,細節係數的縮放因子為 1。

  • 然後,將這些縮放後的係數對於高頻(細節)和低頻(近似)係數求和。

  • 最後,組合重建的係數,如果畫素值不在 0 到 255 的範圍內,則執行歸一化。

完成這些步驟後,原始影像將從 Haar 變換後的影像中重建。

mahotas.ihaar() 函式

mahotas.ihaar() 函式以 Haar 變換後的影像作為輸入,並返回原始灰度影像作為輸出。

由於 Haar 變換是一個可逆過程,因此逆變換後的影像是對原始影像的完美重建。

語法

以下是 mahotas 中 ihaar() 函式的基本語法:

mahotas.ihaar(f, preserve_energy=True, inline=False)

其中,

  • **f** - 輸入影像。

  • **preserve_energy (可選)** - 指定是否保留輸出影像的能量(預設為 True)。

  • **inline (可選)** - 指定是返回新影像還是修改輸入影像(預設為 False)。

示例

在以下示例中,我們使用 mh.ihaar() 函式來反轉 Haar 變換對影像的影響。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image = mh.imread('sun.png')
# Converting it to grayscale
image = mh.colors.rgb2gray(image)
# Applying Haar transformation
haar_transform = mh.haar(image)
# Reversing Haar transformation
reverse_haar = mh.ihaar(haar_transform)
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 3)
# Displaying the original image
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# Displaying the Haar transformed image
axes[1].imshow(haar_transform, cmap='gray')
axes[1].set_title('Haar Transformed Image')
axes[1].set_axis_off()
# Displaying the reversed image
axes[2].imshow(reverse_haar, cmap='gray')
axes[2].set_title('Reverse Haar Image')
axes[2].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()
輸出

以下是上述程式碼的輸出:

Reversing Haar Transform

不保留能量

我們還可以反轉 Haar 變換對影像的影響,而不保留其能量。影像的能量指的是其亮度,在影像變換時可能會發生變化。

在 mahotas 中,我們可以將 mh.ihaar() 函式中的 **preserve_energy** 引數設定為 'False' 以防止能量保留。因此,輸出影像的亮度將與原始輸入影像不同。

如果此引數設定為 True,則輸出影像和輸入影像將具有相同的亮度。

示例

在下面提到的示例中,我們正在對影像執行 Haar 逆變換,而不保留其能量。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image = mh.imread('tree.tiff')
# Converting it to grayscale
image = mh.colors.rgb2gray(image)
# Applying Haar transformation
haar_transform = mh.haar(image)
# Reversing Haar transformation
reverse_haar = mh.ihaar(haar_transform, preserve_energy=False)
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 3)
# Displaying the original image
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# Displaying the Haar transformed image
axes[1].imshow(haar_transform, cmap='gray')
axes[1].set_title('Haar Transformed Image')
axes[1].set_axis_off()
# Displaying the reversed image
axes[2].imshow(reverse_haar, cmap='gray')
axes[2].set_title('Reverse Haar Image')
axes[2].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()

輸出

上述程式碼的輸出如下:

Preserving Energy Mahotas

內聯 Haar 逆變換

另一種執行 Haar 逆變換的方法是執行內聯 Haar 逆變換。內聯是指在原始影像本身上應用變換,而無需建立新影像,從而節省了變換過程中的空間。

在 mahotas 中,可以透過在 mh.ihaar() 函式中將 **inline** 引數設定為布林值 'True' 來實現內聯 Haar 逆變換。

示例

在這裡,我們對 Haar 變換後的影像執行內聯 Haar 逆變換。

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
# Loading the image
image = mh.imread('sea.bmp')
# Converting it to grayscale
image = mh.colors.rgb2gray(image)
# Reversing Haar transformation
mh.ihaar(mh.haar(image), inline=True)
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 1)
# Displaying the reversed image
axes.imshow(image, cmap='gray')
axes.set_title('Reverse Haar Image')
axes.set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()

輸出

執行上述程式碼後,我們將得到以下輸出:

Preserving Energy Mahotas1
廣告