Mahotas 简明教程
Mahotas - Increase Gamma Correction
在我们了解增加伽玛校正之前,让我们首先了解伽玛校正是什么。
伽玛校正调整图像的亮度,以匹配我们的眼睛如何感知光线。我们的眼睛不会线性地看到光线,因此如果不进行校正,图像可能显得太暗或太亮。
伽玛校正将数学变换应用于亮度值,通过调整其亮度级别使图像看起来更加自然。
现在, increasing gamma correction 指的是调整伽玛值以使整体图像更亮。增加伽玛值时,暗区会变得更亮并增强图像的整体对比度。
Increasing Gamma Correction in Mahotas
在 Mahotas 中,增加伽玛校正指的是在改变像素亮度时调整伽玛值。
伽玛是一个正值,其中:
-
小于 1 的伽玛值会使图像变亮。
-
大于 1 的伽玛值会使图像变暗。
-
伽马值 1 表示无校正,表明像素值与亮度之间呈线性关系。
Mahotas 中的伽马校正是指对图像的强度值应用幂律变换。幂律变换的定义如下:
new_intensity = old_intensity^gamma
在此,
-
old_intensity − 这是像素的原始强度值
-
new_intensity − 这是伽马校正后的变换强度值。
-
gamma 确定应用于图像的校正程度。
在 Mahotas 中增加伽马值,即表示强度值提升到了更高的幂次方。此调整会影响图像的整体亮度。
Example
在以下示例中,我们将通过减小伽马值来加深灰度图像:
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()
以下是上面代码的输出: -
Using Interactive Gamma Correction Slider
交互式伽马校正滑块是一种允许用户动态调整伽马值的 GUI 元素。用户可以通过拖动滑块来增加或减小伽马值,从而对显示提供实时反馈。
我们可以通过先确定所需的伽马值来使用 mahotas 中的交互式伽马校正滑块增加伽马校正,从而增加校正。
然后,通过将像素值提升到伽马值的逆幂次方来对图像应用幂律变换。
Syntax
以下是创建交互式滑块的基本语法:
from matplotlib.widgets import Slider
Slider(slider_axis, name, min_value, max_value, valint)
其中,
-
slider_axis − 是一个定义滑块位置和大小的列表。
-
name − 是滑块的名称。
-
mini_value − 是滑块能到达的最小值。
-
max_value − 是滑块能到达的最大值。
-
valint − 是滑块的开始值。
Example
在此,我们尝试使用交互式伽马校正滑块增加伽马校正:
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()
以上代码的输出如下。我们首先尝试使用滑块增加伽马校正,如下所示:
现在,使用滑块减小伽马校正:
Using Batch Gamma correction
批处理伽马校正将多个伽马值应用于单一图像。这有助于比较原始图像在不同伽马值下的并排情况,以查看增加伽马校正的影响。
在 Mahotas 中,我们可以通过先遍历已预定伽马值列表,使用批处理伽马校正来调整图像的亮度。然后对输入图像应用具有不同伽马值的幂律变换。
Example
现在,我们尝试使用批处理伽马校正增加伽马值:
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()
以下是上面代码的输出: -