A limpeza de imagens é uma técnica valiosa, seja para uma análise mais aprofundada ou simplesmente para deixar suas fotos com a melhor aparência.
O aprimoramento de imagem é uma ferramenta crucial para aplicativos de visão computacional e edição de imagem. Destina-se a melhorar a qualidade das imagens.
Ao aprimorar a qualidade da imagem, a precisão e a confiabilidade das técnicas de análise e processamento de imagens podem ser significativamente aprimoradas. Isso é particularmente importante em aplicações de detecção, reconhecimento, segmentação e rastreamento de objetos.
O aprimoramento da imagem pode ajudar quando fatores como condições de pouca luz, ruído do sensor, desfoque de movimento ou erros de transmissão comprometem a qualidade da imagem.
Configurando seu ambiente
Começar por configurando um ambiente Python, execute o seguinte comando de terminal para instalar a biblioteca OpenCV. Você usará o OpenCV para carregar e processar a imagem inicial e salvar a imagem aprimorada final.
pip instalar opencv-python
Você usará o Matplotlib para exibir as duas imagens. Instale-o usando este comando:
pip instalar matplotlib
Finalmente, instale o NumPy, que você irá usar para operações numéricas incluindo a criação de tabelas de pesquisa para correção de gama e definição do kernel para nitidez de imagem:
pip instalar numpy
Depois de instalar essas bibliotecas em seu ambiente, você está pronto para começar a codificar.
O código-fonte completo para esta demonstração está disponível em um Repositório GitHub.
Importando as bibliotecas necessárias
Importe as bibliotecas que você instalou anteriormente em seu ambiente:
importar cv2
importar matplotlib.pyplot como plt
importar entorpecido como np
Observe que você deve importar o OpenCV como cv2. Esta é uma prática padrão que visa garantir a compatibilidade do código e a facilidade de compreensão para outros desenvolvedores.
Carregando e exibindo a imagem original
Comece carregando a imagem original usando o cv2.imread função. Esta é a imagem de entrada na qual seu programa executará técnicas de aprimoramento. Em seguida, exiba-o usando as funções Matplotlib apropriadas:
imagem = cv2.imread('exemplo.jpg')
plt.imshow (cv2.cvtColor (imagem, cv2.COLOR_BGR2RGB))
plt.título('Imagem original')
plt.show()
Exibir a imagem original ajudará você a comparar os resultados do programa posteriormente:
A imagem acima será a entrada do programa.
Reduzindo o Ruído na Imagem
Denoising é uma técnica que visa reduzir o ruído – distorções aleatórias – na imagem. Isso resulta em uma saída mais suave. O OpenCV fornece a rápidoNlMeansDenoisingColored função para este fim. Ele usa um algoritmo de meios não locais para remover o ruído enquanto preserva os detalhes da imagem.
# Aplicar aprimoramentos de imagem
# Denoise a imagem
denoised_image = cv2.fastNlMeansDenoisingColored (imagem, Nenhum, 10, 10, 7, 21)
O rápidoNlMeansDenoisingColored A função usa vários parâmetros, incluindo a imagem, intensidade do filtro, tamanho da janela do modelo e tamanho da janela de pesquisa. Você pode experimentar diferentes valores para obter os resultados desejados.
Amplie o contraste para melhorar a visibilidade dos detalhes
O alongamento de contraste também é conhecido como normalização. Ele estende os valores de intensidade para abranger um determinado intervalo. Isso, por sua vez, melhora a visibilidade dos detalhes na imagem.
Você pode aplicar alongamento de contraste à imagem sem ruído usando o OpenCV normalizar função:
# Realize alongamento de contraste
contrast_stretched_image = cv2.normalize (denoised_image, Nenhum, 255, 0, cv2.NORM_MINMAX, cv2.CV_8UC1)
Como Aguçar a Imagem
A nitidez da imagem aprimora as bordas e os detalhes da imagem, ajudando a melhorar a nitidez da imagem.
# Nitidez de imagem
kernel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32)
sharpened_image = cv2.filter2D(contrast_stretched_image, -1, kernel=kernel)
O código acima cria uma matriz de kernel que enfatiza as bordas e os detalhes da imagem. O cv2.filter2D A função aplica o kernel à imagem com contraste estendido, tornando-a mais nítida como resultado.
Ajuste o brilho para melhorar a exposição
O ajuste de brilho controla o brilho geral de uma imagem. Isso ajuda a tornar a imagem visualmente atraente e bem exposta.
# Ajuste de brilho
brilho_imagem = cv2.convertScaleAbs (sharpened_image, alpha=1, beta =5)
O cv2.convertScaleAbs função ajusta o brilho da imagem. O alfa parâmetro controla o contraste, enquanto o beta parâmetro controla o brilho. Aumentando o beta valor aumenta o brilho da imagem.
Aplique a correção de gama para clarear a imagem
Uma imagem pode parecer muito clara após a técnica de ajuste de brilho. A correção de gama ajusta o brilho geral e o contraste de uma imagem. Ele corrige imagens que parecem muito escuras ou muito claras.
# Correção de gama
gama = 1.5
lookup_table = np.array([((i / 255.0) ** gama) * 255para eu em np.laranja(0, 256)]).astype("uint8")
gamma_corricted_image = cv2.LUT(brightness_image, lookup_table)
O trecho de código acima cria uma tabela de pesquisa que aplica a transformação de correção gama à imagem com brilho ajustado. O gama valor controla o ajuste. Use valores maiores que 1 para tornar a imagem mais escura e valores menores que 1 para torná-la mais clara.
Salvando e exibindo a imagem aprimorada final
Depois de aplicar as técnicas de aprimoramento acima, salve a imagem final processada em um arquivo.
# Salve a imagem final
cv2.imwrite('imagem_final.jpg', imagem_corrigida_gama)
Em seguida, exiba a saída do programa usando Matplotlib.
# Exibe a imagem aprimorada final
plt.imshow (cv2.cvtColor (gamma_corricted_image, cv2.COLOR_BGR2RGB))
plt.título('Imagem aprimorada final')
plt.show()
A imagem aprimorada final é a seguinte:
O futuro do aprimoramento de imagem
O futuro do aprimoramento de imagens está no campo da inteligência artificial. Algoritmos de aprendizado de máquina estão sendo treinados para executar automaticamente técnicas de aprimoramento de imagem em imagens.
Esses programas tratam cada imagem de forma independente, portanto, aplicam diferentes valores das técnicas para diferentes imagens.