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, retain_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 # 加载图像 image = mh.imread('sun.png') # 将其转换为灰度 image = mh.colors.rgb2gray(image) # 应用 Haar 变换 haar_transform = mh.haar(image) # 反转 Haar 变换 reverse_haar = mh.ihaar(haar_transform) # 为子图创建图形和轴 fig, axis = mtplt.subplots(1, 3) # 显示原始图像 axes[0].imshow(image, cmap='gray') axes[0].set_title('Original Image') axes[0].set_axis_off() # 显示 Haar 变换后的图像 axes[1].imshow(haar_transform, cmap='gray') axes[1].set_title('Haar Transformed Image') axes[1].set_axis_off() #显示反转图像 axes[2].imshow(reverse_haar, cmap='gray') axes[2].set_title('Reverse Haar Image') axes[2].set_axis_off() # 调整子图之间的间距 mtplt.tight_layout() # 显示图形 mtplt.show()
输出
以下是上述代码的输出 −

不保留能量
我们还可以反转 Haar 变换对图像的影响而不保留其能量。图像的能量指的是其亮度,当图像被变换时,它会发生变化。
在 mahotas 中,我们可以在 mh.ihaar() 函数中将 preserve_energy 参数设置为"False",以防止能量守恒。因此,输出图像的亮度将不同于原始输入图像。
如果将此参数设置为 True,则输出图像和输入图像将具有相同的亮度。
示例
在下面提到的示例中,我们对图像执行逆 Haar 变换而不保留其能量。
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt # 加载图像 image = mh.imread('tree.tiff') # 将其转换为灰度 image = mh.colors.rgb2gray(image) # 应用 Haar 变换 haar_transform = mh.haar(image) # 反转 Haar 变换 reverse_haar = mh.ihaar(haar_transform, retain_energy=False) # 为子图创建图形和轴 fig, axis = mtplt.subplots(1, 3) # 显示原始图像 axes[0].imshow(image, cmap='gray') axes[0].set_title('Original Image') axes[0].set_axis_off() # 显示 Haar 变换后的图像 axes[1].imshow(haar_transform, cmap='gray') axes[1].set_title('Haar Transformed Image') axes[1].set_axis_off() # 显示反转图像 axes[2].imshow(reverse_haar, cmap='gray') axes[2].set_title('Reverse Haar Image') axes[2].set_axis_off() # 调整子图之间的间距 mtplt.tight_layout() # 显示图形 mtplt.show()
输出
上述代码的输出如下 −

内联逆 Haar 变换
我们可以逆 Haar 变换的另一种方法是执行内联逆 Haar 变换。内联是指将变换应用于原始图像本身,而不创建新图像,从而节省变换过程中的空间。
在 mahotas 中,可以通过在 mh.ihaar() 函数中将 inline 参数设置为布尔值"True"来实现内联逆 Haar 变换。
示例
在这里,我们对 Haar 变换后的图像执行内联逆 Haar 变换。
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt # 加载图像 image = mh.imread('sea.bmp') # 将其转换为灰度 image = mh.colors.rgb2gray(image) # 反转 Haar 变换 mh.ihaar(mh.haar(image), inline=True) # 为子图创建图形和轴 fig, axis = mtplt.subplots(1, 1) # 显示反转图像 axes.imshow(image, cmap='gray') axes.set_title('Reverse Haar Image') axes.set_axis_off() # 调整子图之间的间距 mtplt.tight_layout() # 显示图形 mtplt.show()
输出
执行上述代码后,我们得到以下输出 −
