Es el acrónimo inglés Red, Green, Blue, Rojo, Verde, Azul).
En el modelo RGB, cada color aparece en sus componentes
espectrales primarios de rojo, verde y azul. Este modelo está basado
en un sistema coordenado Cartesiano. El subespacio de interés para
el modelo RGB es un cubo.
Los valores RGB son las tres esquinas del cubo que interceptan los
ejes; el cyan, magenta y amarillo son las otras tres esquinas; el
negro esta en el origen; y el blanco en la esquina más lejana al
origen. En este modelo, la escala de grises (valores iguales de R,G y
B) se extienden sobre la línea que une el negro con el blanco. [1]
Figura 1. Este cubo muestra de manera gráfica el modelo RGB.
Considere una imagen RGB en el que cada imagen roja, verde y
azul es una imagen de 8-bits. Bajo estas condiciones cada pixel de
color RGB [esto es, una tripleta de valores (R,G,B)] se dice que
tiene 24 bits de profundidad (3 planos imagen por el número de bits
por plano). El término imagen de color total (full color) se utiliza
generalmente para denotar una imgen de color RGB de 24-bits. El
número total de colores de una imagen RGB de 24-bits es
(28)3=16,777,216.[1]
MODELO DE COLOR HSI
Corresponden a implementaciones más "precisas" del punto de vista psicovisual, del modelo de Matiz (H), Saturación (S) e Intensidad (I).
Esta transformación deriva del modelo RGB. El cubo RGB se transforma en el cilindro HSI.[2]
* La saturacion corresponde a la distancia radial
* El matiz corresponde al ángulo del sistema de coordenadas polar.
*La intensidad es el eje perpendicular al plano de coordenadas polares.
Figura 2. Esta imagen representa al espacio HSI
Conversión RGB a HSI
Esta dado de la siguiente manera:[2]
Código del modelo HSI.
import cv2
import numpy as np
import math
image = cv2.imread ('C:\Users\EROS\Pictures\Procesamiento Digital\Manzana.jpg',1)
ima = cv2.imread ('C:\Users\EROS\Pictures\Procesamiento Digital\Manzana.jpg',0)
row , col = ima.shape
H=np.zeros((row,col))
S=np.zeros((row,col))
I=np.zeros((row,col))
r=np.zeros((row,col))
g=np.zeros((row,col))
b=np.zeros((row,col))
image2 = np.zeros((row,col,3))
for i in range(row):
for j in range(col):
r[i,j]=image[i,j,0]/255.0
g[i,j]=image[i,j,1]/255.0
b[i,j]=image[i,j,2]/255.0
def color(r,g,b,row,col):
paso1=1
paso2=1
p=1/2
for i in range(row):
for j in range(col):
paso1=p*((r[i,j]-g[i,j])+(r[i,j]-b[i,j]))
paso2=((r[i,j]-g[i,j])**2)+(r[i,j]-b[i,j])*(g[i,j]-b[i,j])
paso2=paso2**(1/2)
if(b[i,j] <= g[i,j]):
H[i, j] =(math.acos(paso1/paso2))/360
if(b[i,j]>g[i,j]):
H[i,j]=(360-(math.acos(paso1/paso2)))/360
return H
def saturacion(r,g,b):
#min1 = 4
row , col = b.shape
for i in range(row):
for j in range(col):
if(r[i,j]<=g[i,j]):
if(r[i,j]<=b[i,j]):
min1 = r[i,j]
else:
if(g[i,j]<=b[i,j]):
min1=g[i,j]
else:
min1=b[i,j]
S[i,j]=1-(3/(r[i,j]+g[i,j]+b[i,j]))*min1
return S
def intensidad(r, g, b): # metodo i
row, col = r.shape
for i in range(row):
for j in range(col):
I[i,j]=(r[i,j]+g[i,j]+b[i,j])*1/3
return I
def conversion(r, g, b,H,S,I,row,col): # metodo i
for i in range(row):
for j in range(col):
H[i,j]=H[i,j]*360
if(H[i,j]==0):
b[i,j]=I[i,j]-((I[i,j]*S[i,j]))
r[i,j]=I[i,j]+2*(I[i,j]*S[i,j])
g[i,i]=I[i,j]-I[i,j]*S[i,j]
if(H[i,j]==120):
b[i,j]=I[i,j]-I[i,j]*S[i,j]
r[i,j]=I[i,j]-I[i,j]*S[i,j]
g[i,i]=I[i,j]+2*(I[i,j]*S[i,j])
if(H[i,j]==240):
b[i,j]=I[i,j]+2*(I[i,j]*S[i,j])
r[i,j]=I[i,j]-I[i,j]*S[i,j]
g[i,i]=I[i,j]-I[i,j]*S[i,j]
if(H[i,j]>0 and H[i,j]<120 ):
b[i,j]=I[i,j]*(1-S[i,j])
r[i,j]=I[i,j]*(1+(S[i,j]*math.cos(H[i,j]))/(math.cos(60-H[i,j])))
g[i,j]=3*I[i,j]-(r[i,j]+b[i,j])
if(120< H[i,j] and H[i,j]<240 ):
H[i,j]=H[i,j]-120
r[i,j]=I[i,j]*(1-S[i,j])
g[i,j]=I[i,j]*(1+(S[i,j]*math.cos(H[i,j]))/(math.cos(180-H[i,j])))
b[i,j]=3*I[i,j]-(r[i,j]+g[i,j])
if(240< H[i,j] and H[i,j]<360 ):
H[i,j]=H[i,j]-240
g[i,j]=I[i,j]*(1-S[i,j])
b[i,j]=I[i,j]*(1+(S[i,j]*math.cos(H[i,j]))/(math.cos(300-H[i,j])))
r[i,j]=3*I[i,j]-(g[i,j]+b[i,j])
return r,g,b
H= color(r,g,b,row,col)
S = saturacion(r,g,b)
I = intensidad(r,g,b)
r,g,b=conversion(r,g,b,H,S,I,row,col)
for i in range(row):
for j in range(col):
image2[i,j,0]=(r[i,j])
image2[i,j,1]=(g[i,j])
image2[i,j,2]=(b[i,j])
cv2.imshow('convertida',image2)
cv2.imshow('i',I)
cv2.imshow('original',image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Figura 4. Otro ejemplo de una imagen original monocromática y su modelo HSI.
Referencias
[1]http://www2.elo.utfsm.cl/~elo328/pdf1dpp/PDI13_Color_1dpp.pdf
[2]http://turing.iimas.unam.mx/~elena/PDI-Mast/Tema_6_C.pdf
Consulta 13 de Enero del 2017
Consulta 15 de Enero del 2017