Transformación de registro de una imagen usando Python y OpenCV

El valor logarítmico de un número es un número que eleva la potencia a un número base que da el mismo número que en la entrada. Simplemente, el logaritmo es la inversión del valor exponencial de un número.

log(exp(x)) = x

¿Cómo se calcula el valor logarítmico de un número?

Veamos un ejemplo,

2^3 = 8

Aplicando logaritmo en ambos lados,

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

Sabemos que el valor de un número con potencia 0 es igual a 1. Entonces,

log1 = 0 

y

log0 = infinity

Podemos encontrar el valor de registro de un número usando Python de la siguiente manera:

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))

Ejemplos:

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

Nota: Puede ver la función de registro en Python visitando aquí.

Transformación de registros

La transformación logarítmica de una imagen es una de las transformaciones de imagen de nivel de gris. La transformación logarítmica de una imagen significa reemplazar todos los valores de píxeles, presentes en la imagen, con sus valores logarítmicos. La transformación de registro se utiliza para mejorar la imagen, ya que expande los píxeles oscuros de la imagen en comparación con los valores de píxeles más altos.

La fórmula para aplicar la transformación logarítmica en una imagen es,

S = c * log (1 + r)

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

El valor de ‘c’ se elige de manera que obtengamos el valor de salida máximo correspondiente al tamaño de bit utilizado. Entonces, la fórmula para calcular ‘c’ es la siguiente:

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

Cuando aplicamos la transformación de registro en una imagen y cualquier valor de píxel es ‘0’, su valor de registro se volverá infinito. Es por eso que estamos agregando ‘1’ a cada valor de píxel en el momento de la transformación de registro para que si cualquier valor de píxel es ‘0’, se convertirá en ‘1’ y su valor de registro será ‘0’.

Apliquemos la transformación de registro en una imagen usando Python.

Fichero de entrada –

python-log-transformation

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()

Producción :
python-log-transformation

La transformación de registros brinda información real al mejorar la imagen. Si aplicamos este método en una imagen que tiene valores de píxeles más altos, mejorará más la imagen y se perderá la información real de la imagen. Por lo tanto, este método no se puede aplicar en todas partes. Se puede aplicar en imágenes donde los valores de píxeles bajos son más altos que los altos.

Publicación traducida automáticamente

Artículo escrito por pankajpatra1998 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *