Python processamento de imagem real | transformação não-linear de imagem cinza transformação logarítmica, conversão gamma

Autor | Yang Xiuzhang

Fonte | CSDN blogue

Zebian | Yugao

Cabeça Figura | download pago a partir da China visuais

Exposição | CSDN (ID: CSDNnews)

Este artigo principalmente na conversão não linear, utilizando um método personalizado para processamento de imagem gradação incluindo transformação logarítmica e conversão gama. Este artigo explica a transformação linear cinza, a esperança básica conhecimento que por sua ajuda.

1. A gradação imagem transformação não linear: AD = DB × DA / 255
2. A imagem gradação transformação logarítmica
A gradação da conversão da imagem gama

Imagem cinzenta não-linear transformação: DB = DA × DA / 255

a transformação não linear imagem cinzento incluindo a transformação logarítmica, um poder de transformação, transformação exponencial, conversão função subsecção, processamento gradação da imagem pela relação não linear entre a gradação principalmente nos seguintes três tipos comuns de transformação não linear.

Gradação valor da imagem original é a transformação não linear de acordo com a fórmula = DB DA × DA / 255, o código é como se segue:

 1# -*- coding: utf-8 -*-
 2import cv2  
 3import numpy as np  
 4import matplotlib.pyplot as plt
 5
 6#读取原始图像
 7img = cv2.imread('miao.png')
 8
 9#图像灰度转换
10grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
11
12#获取图像高度和宽度
13height = grayImage.shape[0]
14width = grayImage.shape[1]
15
16#创建一幅图像
17result = np.zeros((height, width), np.uint8)
18
19#图像灰度非线性变换:DB=DA×DA/255
20for i in range(height):
21    for j in range(width):
22        gray = int(grayImage[i,j])*int(grayImage[i,j]) / 255
23        result[i,j] = np.uint8(gray)
24
25#显示图像
26cv2.imshow("Gray Image", grayImage)
27cv2.imshow("Result", result)
28
29#等待显示
30cv2.waitKey(0)
31cv2.destroyAllWindows()

-Escala de cinzentos da imagem resulta na transformação não linear da saída mostrada abaixo:

transformação logarítmica imagem gradação

imagem transformação logarítmica gradação geralmente representada como se mostra na fórmula:

Comparativa em que C é uma constante de escala, o promotor é o valor de cinzento imagem original, o valor alvo tom convertido DB. Como mostrado abaixo, que indica as alterações no número de valores de gradação, onde a curva.

Uma vez que o declive íngreme curva logarítmica na região inferior dos valores de pixel, os valores de pixel da região tendo um elevado declive é pequena, de modo que a imagem após a transformação logarítmica, o contraste nas áreas escuras serão melhoradas. Esta transformação pode ser usado para aumentar o pormenor de sombra, pelo que um valor elevado para ampliar a imagem comprimida nos pixels escuros.

A transformação logarítmica para alcançar o efeito de escala de cinzentos estendido valor baixo e o alto valor de escala de cinzentos da compressão, é amplamente utilizada no espectro de frequência imagem exibida. Uma aplicação típica é o espectro de Fourier, a gama dinâmica pode ser largo 0 ~ 106 exibir directamente o espectro de frequência, a gama dinâmica de exibição de imagem do dispositivo de muitas vezes não pode cumprir os requisitos, perdendo, assim, uma grande quantidade de sombra; em utilização depois da transformação logarítmica, a imagem razoavelmente linear compressão de faixa dinâmica, pode ser claramente visível. Na figura a seguir, o espectro não transformada após transformação logarítmica, aumenta o contraste da região de baixa gradação, aumentando, assim, o detalhe da sombra.

O código a seguir implementa uma gradação de imagem conversão logarítmica.

 1# -*- coding: utf-8 -*-
 2import numpy as np
 3import matplotlib.pyplot as plt
 4import cv2
 5
 6#绘制曲线
 7def log_plot(c):
 8    x = np.arange(0, 256, 0.01)
 9    y = c * np.log(1 + x)
10    plt.plot(x, y, 'r', linewidth=1)
11    plt.rcParams['font.sans-serif']=['SimHei'] #正常显示中文标签
12    plt.title(u'对数变换函数')
13    plt.xlim(0, 255), plt.ylim(0, 255)
14    plt.show()
15
16#对数变换
17def log(c, img):
18    output = c * np.log(1.0 + img)
19    output = np.uint8(output + 0.5)
20    return output
21
22#读取原始图像
23img = cv2.imread('test.png')
24
25#绘制对数变换曲线
26log_plot(42)
27
28#图像灰度对数变换
29output = log(42, img)
30
31#显示图像
32cv2.imshow('Input', img)
33cv2.imshow('Output', output)
34cv2.waitKey(0)
35cv2.destroyAllWindows()

Após a figura mostra o efeito de vista do número de funções de processamento, de conversão de um modo preferido logarítmica é baixo e para o contraste geral o valor gradação é realce baixo imagem.

curva de função logarítmica correspondente à FIG.

imagem gradação conversão Gama

Também conhecido como poder conversão gama de transformação exponencial ou de conversão, é uma outra transformação gradação não linear comum. imagem gradação conversão gama geralmente representada como se mostra na fórmula:

  • Quando γ> 1, a imagem irá ser esticada numa região de gradação de altura, a secção de compressão mais baixa do nível de cinzentos.

  • Quando γ <1, irá esticar o nível de cinzento da imagem na região inferior, a secção de compressão maior nível cinzento.

  • Quando γ = 1, a transformação gradação é linear, a imagem original, alterando no momento de uma forma linear.

imagem gradação conversão gamma código Python realizado conforme a seguir, para conseguir a chamada de função de força principal.

 1# -*- coding: utf-8 -*-
 2import numpy as np
 3import matplotlib.pyplot as plt
 4import cv2
 5
 6#绘制曲线
 7def gamma_plot(c, v):
 8    x = np.arange(0, 256, 0.01)
 9    y = c*x**v
10    plt.plot(x, y, 'r', linewidth=1)
11    plt.rcParams['font.sans-serif']=['SimHei'] #正常显示中文标签
12    plt.title(u'伽马变换函数')
13    plt.xlim([0, 255]), plt.ylim([0, 255])
14    plt.show()
15
16#伽玛变换
17def gamma(img, c, v):
18    lut = np.zeros(256, dtype=np.float32)
19    for i in range(256):
20        lut[i] = c * i ** v
21    output_img = cv2.LUT(img, lut) #像素灰度值的映射
22    output_img = np.uint8(output_img+0.5)  
23    return output_img
24
25#读取原始图像
26img = cv2.imread('test.png')
27
28#绘制伽玛变换曲线
29gamma_plot(0.00000005, 4.0)
30
31#图像灰度伽玛变换
32output = gamma(img, 0.00000005, 4.0)
33
34#显示图像
35cv2.imshow('Imput', img)
36cv2.imshow('Output', output)
37cv2.waitKey(0)
38cv2.destroyAllWindows()

Os seguintes figura mostra o efeito da FIG processados ​​através da conversão gama, conversão de gama para o contraste de imagem é baixo, e o valor de brilho geral é alto (devido à câmara ou sobreexposição) no caso de efeito de melhoramento de imagem.

FIG curva função da lei de potência equivalente à da fig.

artigo do Sunday foi escrito na torre do livro sino, ao lado da deusa com. Espero que o artigo para ser útil, se houver erros ou deficiências no, por favor, perdoe.

link original:

https://blog.csdn.net/Eastmount/article/details/88929290

【Fim】

Leitura recomendada 

Apple tem abandonado ou lançado em março barato novo iPhone; grandes reivindicações Jia Yueting respondem familiares; a Microsoft já não continuar a desenvolver Visual Basic | manchetes Geeks

negócio US $ 7,558 bilhões! maior leilão 5G milímetro espectro de ondas da América

super leve Chinese OCR, o suporte para reconhecimento de texto vertical, raciocínio ncnn, o modelo total é apenas 17M

e hackers lutar seis dias!

artigo para monitoramento Primavera Bota serviço, exames de saúde, informações fio, JVM heap informação, coleta de métricas, monitorar o funcionamento!

com 3 "pomba", diz-lhe como alterar a rede relâmpago é criptografada modo de mensagens!

Você olha para todos os pontos, eu seriamente como favorita

Lançado 1838 artigos originais · ganhou elogios 40000 + · Visualizações 16,590,000 +

Acho que você gosta

Origin blog.csdn.net/csdnnews/article/details/104912594
Recomendado
Clasificación