Mahotas - 增加伽马校正
在了解如何增加伽马校正之前,我们先了解一下什么是伽马校正。
伽马校正会调整图像的亮度,以匹配我们的眼睛对光的感知。我们的眼睛不是以线性方式看到光的,因此如果不进行校正,图像可能会显得太暗或太亮。
伽马校正对亮度值应用数学变换,通过调整亮度级别使图像看起来更自然。
现在,增加伽马校正是指调整伽马值以使整体图像更亮。当伽马值增加时,暗区会显得更亮,并增强图像的整体对比度。
在 Mahotas 中增加伽马校正
在 Mahotas 中,增加伽马校正是指在更改像素亮度时调整伽马值。
伽马是一个正值,其中 −
小于 1 的伽马值将使图像变亮。
大于 1 的伽马值将使图像变暗。
伽马值为 1 表示无校正,表示像素值与亮度之间存在线性关系。
Mahotas 中的伽马校正涉及对图像的强度值应用幂律变换。幂律变换定义如下 −
new_intensity = old_intensity^gamma
这里,
old_intensity − 是像素的原始强度值
new_intensity − 是经过伽马校正后的变换强度值。
伽马 决定了对图像应用的校正程度。
在 Mahotas 中,当伽马增加时,意味着强度值被提升到更高的幂。此调整会影响图像的整体亮度。
Mahotas 不提供进行伽马校正的直接方法,但可以通过使用 mahotas 和 numpy 库来实现。
示例
在下面的例子中,我们通过降低伽马值来使灰度图像变暗 −
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt # 加载图像 image = mh.imread('sea.bmp') # 将其转换为灰度 gray_image = mh.colors.rgb2gray(image) # 降低伽马值 corrected_gamma = 1.5 # 更新图像以使用校正后的伽马值 gamma_correction = np.power(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(gamma_correction, cmap='gray') axes[1].set_title('Gamma Corrected图像') axes[1].set_axis_off() # 调整子图之间的间距 mtplt.tight_layout() # 显示图形 mtplt.show()
输出
以下是上述代码的输出 −

使用交互式 Gamma 校正滑块
交互式 Gamma 校正滑块是一个 GUI 元素,允许用户动态调整 Gamma 值。用户可以通过拖动滑块来增加或减少 Gamma 值,从而在显示屏上提供实时反馈。
我们可以使用 mahotas 中的交互式 Gamma 校正滑块来增加 Gamma 校正,首先确定所需的 Gamma 值以增加校正。
然后,通过将像素值提升为反伽马值的幂,将幂律变换应用于图像。
语法
以下是创建交互式滑块 − 的基本语法
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') # 将其转换为灰度 image = mh.colors.rgb2gray(image) # 为绘图创建图形和轴 fig, axis = mtplt.subplots() # 显示原始图像 axis.imshow(image, cmap='gray') axis.set_title('Gamma Correction') axis.set_axis_off() # 为伽马调整创建滑块 slider_axis = mtplt.axes([0.2, 0.05, 0.6, 0.03]) gamma_slider = Slider(slider_axis, 'Gamma', 0.1, 5.0, valinit=1.0) # 根据滑块值的变化更新伽马校正和绘图 def update_gamma(val): gamma = gamma_slider.val corrected_image = np.power(image, gamma) axis.imshow(corrected_image, cmap='gray') fig.canvas.draw_idle() gamma_slider.on_changed(update_gamma) # 显示图形 mtplt.show()
输出
上述代码的输出如下。首先,我们尝试使用滑块增加伽马校正,如下所示 −

现在,使用滑块减少伽马校正 −

使用批量伽马校正
批量伽马校正将多个伽马值应用于单个图像。这有助于并排比较不同伽马值的原始图像,以查看增加伽马校正的影响。
在 Mahotas 中,我们可以通过首先迭代预定伽马值列表,使用批量伽马校正来调整图像的亮度。然后在输入图像上应用具有不同伽马值的幂律变换。
示例
现在,我们尝试使用批量伽马校正减法来增加伽马值
import mahotas as mh import numpy as np import matplotlib.pyplot as mtplt from matplotlib.widgets import Slider # 加载图像 image = mh.imread('sun.png') # 将其转换为灰度 image = mh.colors.rgb2gray(image) # 定义伽马值列表 gamma_values = [0.21, 0.82, 2, 5] # 创建子图以显示每个伽马值的图像 fig, axis = mtplt.subplots(1, len(gamma_values) + 1) axes[0].imshow(image, cmap='gray') axes[0].set_title('Original Image') axes[0].set_axis_off() # 对每个伽马值应用伽马校正 for i, gamma in enumerate(gamma_values): corrected_image = np.power(image, gamma) axes[i + 1].imshow(corrected_image, cmap='gray') axes[i + 1].set_title(f'Gamma={gamma}') axes[i + 1].set_axis_off() # 调整子图之间的间距 mtplt.tight_layout() # 显示图形 mtplt.show()
输出
以下是上述代码的输出 −
