Resumo: Este artigo explica principalmente a transformação linear em tons de cinza.
Este artigo é compartilhado pela Huawei Cloud Community " [Python Image Processing] Fifteen. Grayscale Linear Transformation of Images ", autor: eastmount.
1. Princípio da transformação linear em tons de cinza da imagem
A transformação linear em tons de cinza de uma imagem consiste em ajustar os tons de cinza da imagem original estabelecendo um mapeamento em tons de cinza, melhorando assim a qualidade da imagem, destacando os detalhes da imagem e melhorando o contraste da imagem. A fórmula de cálculo da transformação linear em tons de cinza é a seguinte:
Nesta fórmula, DB representa o valor em tons de cinza após a transformação linear em tons de cinza, DA representa o valor em tons de cinza da imagem de entrada antes da transformação e α e b são os parâmetros da equação de transformação linear f(D), que representam a inclinação e a interceptação, respectivamente.
- Quando α=1, b=0, mantenha a imagem original
- Quando α=1, b!=0, todos os valores em tons de cinza da imagem são movidos para cima ou para baixo
- Quando α=-1, b=255, o valor de cinza da imagem original é invertido
- Quando α>1, o contraste da imagem de saída é aprimorado
- Quando 0<α<1, o contraste da imagem de saída diminui
- Quando α<0, a área escura da imagem original fica mais clara, a área clara fica mais escura e a imagem é complementada.
Conforme mostrado na figura, o mapa de efeitos correspondente à transformação linear em tons de cinza da imagem é exibido.
2. Transformação de deslocamento ascendente em escala de cinza da imagem
Este algoritmo realizará o deslocamento para cima do valor de cinza da imagem, melhorando assim o brilho da imagem.O código de implementação é o seguinte. Como o valor de cinza da imagem está dentro do intervalo de 0 a 255, é necessário realizar um julgamento de estouro no valor de cinza.
# -*- coding: utf-8 -*-
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取原始图像
img = cv2.imread('miao.png')
#图像灰度转换
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#获取图像高度和宽度
height = grayImage.shape[0]
width = grayImage.shape[1]
#创建一幅图像
result = np.zeros((height, width), np.uint8)
#图像灰度上移变换 DB=DA+50
for i in range(height):
for j in range(width):
if (int(grayImage[i,j]+50) > 255):
gray = 255
else:
gray = int(grayImage[i,j]+50)
result[i,j] = np.uint8(gray)
#显示图像
cv2.imshow("Gray Image", grayImage)
cv2.imshow("Result", result)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
O resultado de saída é mostrado na figura abaixo, todos os valores de tons de cinza da imagem são deslocados para cima em 50 e a imagem fica mais branca. Observe que o valor da escala de cinza correspondente ao preto puro é 0 e o valor da escala de cinza correspondente ao branco puro é 255.
3. Transformação de aprimoramento de contraste de imagem
Esse algoritmo melhorará o contraste da imagem e o código de implementação do Python é o seguinte:
# -*- coding: utf-8 -*-
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取原始图像
img = cv2.imread('miao.png')
#图像灰度转换
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#获取图像高度和宽度
height = grayImage.shape[0]
width = grayImage.shape[1]
#创建一幅图像
result = np.zeros((height, width), np.uint8)
#图像对比度增强变换 DB=DA*1.5
for i in range(height):
for j in range(width):
if (int(grayImage[i,j]*1.5) > 255):
gray = 255
else:
gray = int(grayImage[i,j]*1.5)
result[i,j] = np.uint8(gray)
#显示图像
cv2.imshow("Gray Image", grayImage)
cv2.imshow("Result", result)
A saída é mostrada na figura abaixo, com todos os valores de tons de cinza da imagem aprimorados por um fator de 1,5.
Quatro. Transformação de redução de contraste de imagem
Esse algoritmo reduzirá o contraste da imagem e o código de implementação do Python é o seguinte:
# -*- coding: utf-8 -*-
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取原始图像
img = cv2.imread('miao.png')
#图像灰度转换
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#获取图像高度和宽度
height = grayImage.shape[0]
width = grayImage.shape[1]
#创建一幅图像
result = np.zeros((height, width), np.uint8)
#图像对比度减弱变换 DB=DA*0.8
for i in range(height):
for j in range(width):
gray = int(grayImage[i,j]*0.8)
result[i,j] = np.uint8(gray)
#显示图像
cv2.imshow("Gray Image", grayImage)
cv2.imshow("Result", result)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
A saída é mostrada na imagem abaixo, onde todos os valores de tons de cinza da imagem são reduzidos e a imagem fica mais escura.
Cinco. Transformação de cor inversa em tons de cinza da imagem
A transformação de cor inversa, também conhecida como transformação linear de complemento em tons de cinza, é o processo de inverter os valores de pixel da imagem original, ou seja, o preto se torna branco e o branco se torna preto. Seu código de implementação em Python é o seguinte:
# -*- coding: utf-8 -*-
import cv2
import numpy as np
import matplotlib.pyplot as plt
#读取原始图像
img = cv2.imread('miao.png')
#图像灰度转换
grayImage = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
#获取图像高度和宽度
height = grayImage.shape[0]
width = grayImage.shape[1]
#创建一幅图像
result = np.zeros((height, width), np.uint8)
#图像灰度反色变换 DB=255-DA
for i in range(height):
for j in range(width):
gray = 255 - grayImage[i,j]
result[i,j] = np.uint8(gray)
#显示图像
cv2.imshow("Gray Image", grayImage)
cv2.imshow("Result", result)
#等待显示
cv2.waitKey(0)
cv2.destroyAllWindows()
O resultado da saída é mostrado na figura abaixo, e os valores em tons de cinza antes e depois do processamento da imagem são complementares.
A transformação de cores inversas em tons de cinza da imagem tem certas aplicações no processamento de imagens médicas, conforme mostrado na figura a seguir:
PS: O artigo refere-se à sua série anterior de artigos de processamento de imagens e funções da biblioteca OpenCV, e também se refere aos seguintes documentos:
- Yang Xiuzhang et al.Pesquisa sobre nitidez de imagem e tecnologia de extração de bordas com base em roupas Miao [J] Modern Computer, 2018(10).
- "Digital Image Processing" (3ª Edição), escrito por Gonzalez, traduzido por Ruan Qiuqi, Electronic Industry Press, 2013.
- "Processamento de Imagem Digital" (3ª Edição), Ruan Qiuqi, Electronic Industry Press, 2008, Pequim.
- "Introdução à programação OpenCV3", Mao Xingyun, Leng Xuefei, Electronic Industry Press, 2015.
- [Processamento de Imagem Digital] 5. Explicação detalhada da mudança linear em tons de cinza, mudança não linear em tons de cinza, processamento de limiarização e equalização de operações de ponto de imagem MFC
Clique em Seguir para conhecer as novas tecnologias da HUAWEI CLOUD pela primeira vez~