Sei sulla pagina 1di 5

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
vMaxr
vMinr
Ar=255/(vMaxr-vMinr)
Br=Ar*vMinr
pixelr*Ar+Br

GREEN
vMaxg
vMing
Ag=255/(vMaxg-vMing)
Bg=Ag*vMing
pixelg*Ag+Bg

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

Potrebbero piacerti anche