Mahotas - 拉伸伽马校正
拉伸伽马校正是指增强图像的整体对比度。这是通过增加伽马值来实现的,这会扩大图像像素的强度级别范围。
拉伸伽马校正的过程涉及将原始输入值拉伸到新的更宽范围的值。
Mahotas 中的拉伸伽马校正
在 Mahotas 中,我们可以使用 mahotas.stretch() 函数对图像进行拉伸伽马校正。
在伽马校正中,大于 1 的伽马值会增加图像的对比度,而小于 1 的伽马值会降低对比度。
因此,通过拉伸伽马,图像的暗区变得更暗,亮区变得更亮,从而导致不同色调和细节之间的区别更加明显。
使用 mahotas.stretch() 函数
mahotas.stretch() 函数将图像作为输入并返回图像的锐化版本作为输出。生成的图像对比度增强,细节可见性提高。
stretch() 函数确定图像中的最小和最大强度值,并将它们转换为全范围像素值(8 位图像为 0−255)。
语法
以下是 mahotas − 中 mh.stretch() 函数的基本语法
mahotas.stretch(img, arg0=None, arg1=None, dtype=<class 'numpy.uint8'>)
其中,
image − 它是输入图像。
arg0(可选) −它是输出的最小值(默认为 0)。
arg1(可选) − 它是输出的最大值(默认为 255)。
dtype(可选) − 它是输出图像的数据类型(默认为 uint8)。
示例
在下面的例子中,我们使用 mh.stretch() 函数增加灰度图像的对比度 −
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt # 加载图像 image = mh.imread('sun.png') # 转换为灰度 gray_image = mh.colors.rgb2gray(image) # 降低伽马值 corrected_gamma = 3.2 # 应用拉伸伽马校正图像 stretch_gamma_corrected = mh.stretch(gray_image, corrected_gamma) # 为子图创建图形和轴 fig, axis = mtplt.subplots(1, 2) # 显示原始图像 axes[0].imshow(gray_image, cmap='gray') axes[0].set_title('Original Image') axes[0].set_axis_off() # 显示拉伸伽马校正图像 axes[1].imshow(stretch_gamma_corrected, cmap='gray') axes[1].set_title('Stretched伽马校正图像') axes[1].set_axis_off() # 调整子图之间的间距 mtplt.tight_layout() # 显示图形 mtplt.show()
输出
以下是上述代码的输出 −

拉伸 RGB 图像的伽马校正
我们还可以使用 stretch() 函数在 mahotas 中对 RGB 图像执行拉伸伽马校正。拉伸函数中使用的伽马值决定了对比度增强的程度。
然后,我们可以将拉伸后的图像转换回 RGB 颜色空间,方法是将其乘以 255(RGB 图像的最大强度)。
示例
以下示例显示了 RGB 图像对比度的增加 −
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt # 加载图像 image = mh.imread('nature.jpeg') # 应用拉伸伽马校正 stretched_gamma_corrected = mh.stretch(image, 3) # 将图像转换回 RGB stretched_gamma_corrected = stretched_gamma_corrected * 255 # 创建子图以显示图像 fig, axis = mtplt.subplots(1, 2) # 显示原始 RGB 图像 axes[0].imshow(image) axes[0].set_title('Original Image') axes[0].set_axis_off() # 显示拉伸图像 axes[1].imshow(stretched_gamma_corrected) axes[1].set_title('Stretched Gamma Corrected Image') axes[1].set_axis_off() # 调整间距子图 mtplt.tight_layout() # 显示图形 mtplt.show()
输出
上述代码的输出如下 −

交互式拉伸伽马校正滑块
交互式拉伸伽马校正滑块是一个 GUI 元素,允许用户通过拖动滑块来调整伽马值以动态更改对比度。
- 要在 Mahotas 中使用交互式滑块拉伸伽马校正,首先创建一个用于调整伽马值的滑块。
- 然后,实现一个函数,在移动滑块时检索新的伽马值,并将拉伸伽马校正应用于图像。
- 最后,将函数连接到滑块的值更改事件,以便在滑块移动时自动调用该函数。
语法
以下是创建交互式滑块的基本语法 −
from matplotlib.widgets import Slider Slider(slider_axis, name, min_value, max_value, valint)
其中,
slider_axis − 它是一个定义滑块位置和尺寸的列表。
name − 它是滑块的名称。
mini_value − 它是滑块可以达到的最小值。
max_value − 它是滑块可以达到的最大值。
valint −它是滑块的起始值。
示例
在此示例中,我们使用交互式滑块 − 增加对比度
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt from matplotlib.widgets import Slider # 加载图像 image = mh.imread('tree.tiff') # 为绘图创建图形和轴 fig, axis = mtplt.subplots() # 显示原始图像 axis.imshow(image) axis.set_title('拉伸伽马校正') axis.set_axis_off() # 为拉伸伽马调整创建滑块 slider_axis = mtplt.axes([0.2, 0.05, 0.6, 0.03]) stretched_gamma_slider = Slider(slider_axis, 'Stretched Gamma', 0.1, 5.0, valinit=1.0) # 更新拉伸伽马校正并根据滑块值的变化绘制图表 def update_stretched_gamma(val): stretched_gamma = stretched_gamma_slider.val corrected_image = mh.stretch(image, stretched_gamma) corrected_image = corrected_image * 255 axis.imshow(corrected_image) fig.canvas.draw_idle() stretched_gamma_slider.on_changed(update_stretched_gamma) # 显示图形 mtplt.show()
输出
产生的输出如下 −
