procesamiento de imagenes
DESCRIPTION
Mejora de brillo y contrasteTRANSCRIPT
-
Julin David Agudelo Blandn
CC 1042769792
Informe de clase 10
Descripcin: Mejora de brillo y contraste de una imagen RGB
ANTES DESPUES
-
Procedimiento
Como bien sabemos una imagen digital est conformada por 3 matrices que dan
razn de tres colores, rojo, verde y azul (Red Green - Blue), la superposicin de
estos logra los dems colores, en esta prctica se procedi a mejorar una imagen
de estas caractersticas
El mtodo que se utiliz se haba empleado anteriormente para mejorar una imagen
en escala de grises, el concepto es exactamente igual pero varan algunas cosas
en el proceso.
Para mejorar la imagen bsicamente se hace una operacin pixel a pixel que
consiste en multiplicarlo por un escalar A y luego sumarle un escalar B,
correspondientes al contraste y al brillo respectivamente, el escalar A es hallado
automticamente as, A=255/(vMax-vMin) siendo vMax y vMin los valores mximo
y mnimo del plano de pixeles, el escalar B tambin es hallado automticamente,
as, B=A*vMin, en este caso, en ambas imgenes se aument el contraste y se
disminuy el brillo.
Este proceso se repite para cada uno de los planos RGB, en sntesis, se hallarn 3
valores de contraste y 3 valores de brillo diferentes, cada uno para cada color de la
imagen, podemos verlo mejor a continuacin
-
RED GREEN BLUE vMaxr vMinr
Ar=255/(vMaxr-vMinr) Br=Ar*vMinr pixelr*Ar+Br
vMaxg vMing
Ag=255/(vMaxg-vMing) Bg=Ag*vMing pixelg*Ag+Bg
vMaxb vMinb
Ab=255/(vMaxb-vMinb) Bb=Ab*vMinb pixelb*Ab+Bb
Aunque se hayan optimizado procesos como el hallazgo de mximos y mnimos, la
ejecucin del programa puede llevar una demora considerable si tenemos en cuenta
que las operaciones a los pixeles se realizaran muchas veces, esto puede
comprobarse si lo corremos sobre una imagen de gran resolucin.
-
Cdigo utilizado
# -*- coding: cp1252 -*- """ Descripcion: Mejora de imagen RGB Autor: Julian Agudelo """ #librerias import numpy as np import cv2 import math #mensaje de salida al usuario print("Presione Q para salir") #carga de imagen img = cv2.imread("cl.jpg") #tamao de imagen alto,ancho,prof=img.shape #guardamos el plano azul de la imagen blue=img[0:ancho,0:alto,0] #guardamos el plano verde de la imagen green=img[0:ancho,0:alto,1] #guardamos el plano rojo de la imagen red=img[0:ancho,0:alto,2] #maximo y minimo del plano azul bmaximo=blue.max() bminimo=blue.min() #maximo y minimo del plano verde gmaximo=green.max() gminimo=green.min() #maximo y minimo del plano rojo rmaximo=red.max() rminimo=red.min() while(True): #recorremos la imagen #calculo de contraste de cada plano Ab=float(255/(bmaximo-bminimo)) Ag=float(255/(gmaximo-gminimo)) Ar=float(255/(rmaximo-rminimo)) #calculo de brillo de acda plano Bb=Ab*bminimo Bg=Ag*gminimo Br=Ar*rminimo for i in range(0,alto): for j in range(0,ancho): #obtenemos valor de pixeles de cada plano pixelb=img.item(i,j,0) pixelg=img.item(i,j,1)
-
pixelr=img.item(i,j,2) #multiplicamos contraste y sumamos brillo a cada pixel de cada plano img.itemset((i,j,0),(pixelb*Ab)-Bb) img.itemset((i,j,1),(pixelg*Ag)-Bg) img.itemset((i,j,2),(pixelr*Ar)-Br) #Alfinalizarelprocesomostramoselresultado cv2.imshow("Resultado",img) #Dejamoselprogramaesperandounaentradadeteclado ch=0xFF&cv2.waitKey() #SerevisasilapersonapresionaQ(Quit) if ch==ord('q'): #Almacenamosendiscolasalida cv2.imwrite("cl1.jpg",img) #salimosdelciclowhile break #Eliminamoslasventanasquecreamos cv2.destroyAllWindows()