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
廣告