📜  使用Python和 OpenCV 对图像进行日志转换

📅  最后修改于: 2022-05-13 01:55:40.977000             🧑  作者: Mango

使用Python和 OpenCV 对图像进行日志转换

一个数的对数值是一个将幂提高到一个基数的数字,该基数给出与输入相同的数字。简单地说,对数是一个数的指数值的倒数。

log(exp(x)) = x

如何计算数字的对数值?

让我们看一个例子,

2^3 = 8

通过在两边应用对数,

log(2^3) = log(8)
3 * log(2) = log(8)
3 = log(8) / log(2)
Log(8) = 3 (base is 2)

我们知道,0 次方数的值等于 1。所以,

log1 = 0 

log0 = infinity

我们可以使用Python找到一个数字的 log 值,如下所示:

import numpy as np
  
# input a number as integer
a = int(input())
  
print("Natural log value of the input number is", 
      np.log(a))
  
# If you want base of log to be set to 2
print("Log value of the number with base 2 is", 
      np.log2(a))
  
# If you want base of log to be set to 10
print("Log value of the number with base 10 is",
      np.log10(a))

例子:

Input : 8
Output : 
Natural log value of the input number is 2.0794415416798357
Log value of the number with base 2 is 3.0
Log value of the number with base 10 is 0.9030899869919435

Input : 255
Output : 
Natural log value of the input number is 5.541263545158426
Log value of the number with base 2 is 7.994353436858858
Log value of the number with base 10 is 2.406540180433955

注意:您可以通过访问此处查看Python中的日志函数。

日志转换

图像的对数变换是灰度图像变换的一种。图像的对数变换意味着用其对数值替换图像中存在的所有像素值。对数变换用于图像增强,因为与更高的像素值相比,它会扩展图像的暗像素。

在图像中应用对数变换的公式是,

S = c * log (1 + r)

where,
R = input pixel value,
C = scaling constant and
S = output pixel value

选择“c”的值,以便我们获得与使用的位大小相对应的最大输出值。因此,计算“c”的公式如下:

c = 255 / (log (1 + max_input_pixel_value))

当我们在图像中应用对数变换并且任何像素值为“0”时,其对数值将变为无限大。这就是为什么我们在对数转换时为每个像素值添加“1”,这样如果任何像素值为“0”,它将变为“1”,其对数值为“0”。

让我们使用Python在图像中应用对数转换。

输入文件 -

python-日志转换

import cv2
import numpy as np
import matplotlib.pyplot as plt
   
# Read an image
image = cv2.imread('GFG.png')
   
# Apply log transformation method
c = 255 / np.log(1 + np.max(image))
log_image = c * (np.log(image + 1))
   
# Specify the data type so that
# float value will be converted to int
log_image = np.array(log_image, dtype = np.uint8)
   
# Display both images
plt.imshow(image)
plt.show()
plt.imshow(log_image)
plt.show()

输出 :
python-日志转换

对数变换通过增强图像给出实际信息。如果我们将此方法应用于具有较高像素值的图像,则它将更多地增强图像,并且图像的实际信息将丢失。因此,这种方法不能在任何地方都适用。它可以应用于低像素值多于高像素值的图像。