Mahotas - 增加伽马校正



在了解如何增加伽马校正之前,让我们先了解一下什么是伽马校正。

伽马校正调整图像的亮度,以匹配我们眼睛感知光线的方式。我们的眼睛不会以线性方式感知光线,因此,如果没有校正,图像可能会显得太暗或太亮。

伽马校正将数学变换应用于亮度值,通过调整亮度级别使图像看起来更自然。

现在,**增加伽马校正**指的是调整伽马值以使整个图像更亮。当伽马值增加时,暗区看起来更亮,并增强图像的整体对比度。

在 Mahotas 中增加伽马校正

在 Mahotas 中,增加伽马校正指的是在改变像素亮度时调整伽马值。

伽马是一个正值,其中 -

  • 伽马值小于 1 将使图像变亮。

  • 伽马值大于 1 将使图像变暗。

  • 伽马值为 1 表示没有校正,并指示像素值和亮度之间的线性关系。

Mahotas 中的伽马校正涉及将幂律变换应用于图像的强度值。幂律变换定义如下 -

new_intensity = old_intensity^gamma

这里,

  • **old_intensity** - 它是一个像素的原始强度值

  • **new_intensity** - 它是伽马校正后变换后的强度值。

  • **gamma** 决定了应用于图像的校正程度。

当在 Mahotas 中增加伽马时,这意味着强度值被提升到更高的幂。此调整会影响图像的整体亮度。

Mahotas 没有提供直接进行伽马校正的方法,但是可以通过使用 mahotas 和 numpy 库来实现。

示例

在以下示例中,我们通过降低伽马值来使灰度图像变暗 -

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
gray_image = mh.colors.rgb2gray(image)
# Decreasing gamma value
corrected_gamma = 1.5
# Updating the image to use the corrected gamma value
gamma_correction = np.power(gray_image, corrected_gamma)
# Creating a figure and axes for subplots
fig, axes = mtplt.subplots(1, 2)
# Displaying the original image
axes[0].imshow(gray_image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# Displaying the gamma corrected image
axes[1].imshow(gamma_correction, cmap='gray')
axes[1].set_title('Gamma Corrected Image')
axes[1].set_axis_off()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()

输出

以下是上述代码的输出 -

Gamma Correction

使用交互式伽马校正滑块

交互式伽马校正滑块是一个 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
# Loading the image
image = mh.imread('tree.tiff')
# Converting it to grayscale
image = mh.colors.rgb2gray(image)
# Creating a figure and axes for the plot
fig, axis = mtplt.subplots()
# Displaying the original image
axis.imshow(image, cmap='gray')
axis.set_title('Gamma Correction')
axis.set_axis_off()
# Creating a slider for gamma adjustment
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)
# Updating the gamma correction and plot on change of slider value
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)
# Showing the figure
mtplt.show()

输出

上述代码的输出如下所示。首先,我们尝试使用滑块来增加伽马校正,如下所示 -

Gamma correction Slider

现在,使用滑块降低伽马校正 -

Gamma correction Slider1

使用批量伽马校正

批量伽马校正将多个伽马值应用于单个图像。这有助于在不同的伽马值下并排比较原始图像,以查看增加伽马校正的影响。

在 Mahotas 中,我们可以通过首先迭代预定伽马值的列表来使用批量伽马校正调整图像的亮度。然后使用不同的伽马值对输入图像应用幂律变换。

示例

现在,我们尝试使用批量伽马校正来增加伽马值 -

import mahotas as mh
import numpy as np
import matplotlib.pyplot as mtplt
from matplotlib.widgets import Slider
# Loading the image
image = mh.imread('sun.png')
# Converting it to grayscale
image = mh.colors.rgb2gray(image)
# Defining a list of gamma values
gamma_values = [0.21, 0.82, 2, 5]
# Creating subplots to display images for each gamma value
fig, axes = mtplt.subplots(1, len(gamma_values) + 1)
axes[0].imshow(image, cmap='gray')
axes[0].set_title('Original Image')
axes[0].set_axis_off()
# Applying gamma correction for each gamma value
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()
# Adjusting spacing between subplots
mtplt.tight_layout()
# Showing the figures
mtplt.show()

输出

以下是上述代码的输出 -

Batch Gamma Correction
广告