Mahotas - 图像拉伸 RGB
图像拉伸是一种通过将原始像素值映射到新值范围来增强图像对比度的技术。这通常是为了提高细节的可见性并增强图像的整体外观。
对于 RGB 图像,每个像素都有三个颜色通道&min; 红色、绿色和蓝色。 拉伸 RGB 图像涉及独立拉伸每个颜色通道的值以扩大强度范围。
Mahotas 中的图像拉伸 RGB
在 Mahotas 中,RGB 图像拉伸是通过拉伸图像的各个颜色通道(红色、绿色和蓝色)来执行的。拉伸过程涉及将原始像素强度映射到新范围以增加对比度。
拉伸各个 RGB 通道后,需要将它们组合回来以创建最终的拉伸图像。
我们可以使用 stretch() 函数和 stretch_rgb() 函数在 mahotas 中执行图像拉伸 RGB。
使用 stretch() 和 stretch_rgb() 函数
mahotas.stretch() 和 mahotas.stretch_rgb() 函数在指定的 min_value 和 max_value 之间拉伸 RGB 图像每个通道中的像素值。
值低于 min_value 的像素将设置为 min_value,值高于 max_value 的像素将设置为 max_value。拉伸在每个通道上独立执行。
语法
以下是 mahotas.stretch() 函数的基本语法 −
mahotas.stretch(img,arg0=None, arg1=None, dtype=<type 'numpy.uint8'>)
以下是 mahotas.stretch_rgb() 函数的基本语法 −
mahotas.stretch(img,arg0=None, arg1=None, dtype=<type 'numpy.uint8'>)
参数
以下是传递给 mahotas.stretch() 函数的参数 −
img − 它是输入图像。
arg0 和 arg1(可选) − 这些参数指定像素值应拉伸的范围。这些参数的解释取决于它们的值 −
如果同时提供了 arg0 和 arg1 并且不为 None,则它们表示像素值应拉伸到的最小值和最大值。 arg0 以下的像素值将设置为 arg0,arg1 以上的像素值将设置为 arg1。
如果仅提供 arg0 且 arg1 为 None,则 arg0 应为长度为 2 的元组或列表,表示百分位数值。 arg0 第一个元素的值以下的像素值将设置为该值,arg0 第二个元素的值以上的像素值将设置为该值。
如果 arg0 和 arg1 均为 None,则像素值将拉伸到 dtype 参数指定的数据类型的全部范围(默认值为 numpy.uint8)。
dtype − 它指定输出图像的数据类型。默认值为 numpy.uint8,表示无符号的 8 位整数。
示例
在下面的示例中,我们使用 mahotas.stretch() 函数来拉伸图像−
import mahotas as mh import numpy as np import matplotlib.pyplot as plt image = mh.imread('sun.png') # 拉伸图像 stretched = mh.stretch(image, arg0=100, arg1=280) # 创建带有子图的图形 fig, axis = plt.subplots(1, 2, figsize=(10, 5)) # 显示原始图像 axes[0].imshow(image) axes[0].set_title('Original Image') axes[0].axis('off') # 显示拉伸的灰度图像 axes[1].imshow(stretched, cmap='gray') axes[1].set_title('Stretched Grayscale Image') axes[1].axis('off') # 调整布局并显示图 plt.tight_layout() plt.show()
输出
以下是上述代码的输出 −

示例
在此示例中,我们将了解如何使用 mahotas.stretch_rgb 函数拉伸图像 −
import mahotas as mh import numpy as np import matplotlib.pyplot as plt image = mh.imread('nature.jpeg') # 拉伸图像 stretched = mh.stretch_rgb(image, arg0=100, arg1=280) # 创建带有子图的图形 fig, axis = plt.subplots(1, 2, figsize=(10, 5)) # 显示原始图像 axes[0].imshow(image) axes[0].set_title('Original Image') axes[0].axis('off') # 显示拉伸的灰度图像 axes[1].imshow(stretched, cmap='gray') axes[1].set_title('Stretched Grayscale Image') axes[1].axis('off') # 调整布局并显示图 plt.tight_layout() plt.show()
输出
以下是上述代码的输出−

使用百分位数值拉伸图像
要在 Mahotas 中使用百分位数值拉伸 RGB 图像,我们可以手动计算百分位数,并在每个颜色通道上单独使用拉伸函数 −
- 首先,将 RGB 图像拆分为单独的颜色通道(红色、绿色和蓝色)。
- 这可以通过使用 NumPy 库中的 np.split() 函数来实现。
- 拆分图像后,使用 NumPy 的 np.percentile() 函数计算每个颜色通道所需的百分位数。
- 获得百分位数后,使用 Mahotas 中的 stretch() 函数对每个通道进行独立处理,使用计算出的最小值和最大值。
- 这将拉伸每个通道所需百分位数范围内的像素值。
最后,通过沿颜色通道轴连接拉伸的通道,将它们合并回 RGB 图像。生成的图像将是基于指定百分位数的拉伸 RGB 图像。
示例
在这里,我们尝试拉伸具有百分位数的图像 −
import mahotas as mh import numpy as np from pylab import imshow, show image = mh.imread('nature.jpeg') # 将 RGB 图像分割成各个通道 r, g, b = np.split(image, 3, axis=2) # 计算每个通道的百分位数 r_min, r_max = np.percentile(r, [17, 90]) g_min, g_max = np.percentile(g, [25, 75]) b_min, b_max = np.percentile(b, [50, 99]) # 独立拉伸每个通道 stretched_r = mh.stretch(r, r_min, r_max) stretched_g = mh.stretch(g, g_min, g_max) stretched_b = mh.stretch(b, b_min, b_max) # 将拉伸的通道合并回 RGB 图像 stretched_image = np.concatenate((stretched_r, stretched_g, stretched_b), axis=2) imshow(stretched_image) show()
输出
执行上述代码后,我们得到以下输出 −
