Práctica 1: Tratamiento básico del color

Anuncio
Prácticas de laboratorio
Práctica 1:
Tratamiento básico del
color
1. INTRODUCCIÓN
Los objetivos de esta práctica son dos. Por un lado, aprender el uso
del entorno y las librerías, y por otro, desarrollar un conjunto sencillo de
algoritmos en C para el tratamiento de imágenes a color RGB. Para ello,
deberá realizar un conjunto de funciones capaces de ejecutar las
operaciones que se indican a lo largo de la práctica..
1.1 Operación ExtractBand
Se trata de generar, a partir de la original, una imagen a color con la
banda seleccionada (0-ROJO, 1-VERDE y 2-AZUL). Las función a
programar es
(véase el apartado titulado realización ejemplo)
Fco Javier Molina Cantero
Pag. 1
CARPETA: Pannels FICHERO: P1_Color.cpp
VISIONDLL_API long fnButtonExtractBand(unsigned char **R,
unsigned char **G,
unsigned char **B,
int Filas, int Cols, int band)
{
return 0;
}
1.2 Operación GAproach.
El objetivo es convertir una imagen a color a otra de nivel de gris
creando una imagen monocromática con la banda de verde original. La
función a programar es:
CARPETA: Pannels FICHERO: P1_Color.cpp
VISIONDLL_API long fnButtonGAproach( unsigned char **R,
unsigned char **G,
unsigned char **B,
int Filas, int Cols)
{
return 0
}
1.3 Operación YAproach.
Convierte una imagen a color RGB en una imagen de grises
mediante el método de la luminancia (transformación de XYZ a
RGBNTSC).
Y = 0.299 ⋅ R + 0.587 ⋅ G + 0114 ⋅ B
Compare el resultado que se obtiene al aplicar ambos algoritmos a
las imágenes de test: Cuadro.jpg, Mezcla.bmp y Patron.bmp.
Pag. 2
Las funciones que deberá programar son:
CARPETA: Pannels FICHERO: P1_Color.cpp
VISIONDLL_API long fnButtonYAproach( unsigned char **R,
unsigned char **G,
unsigned char **B,
int Filas, int Cols)
{
return 0;
}
CARPETA: Library FICHERO: Color.cpp
// El resultado se devuelve en la matriz Out
void imageRGBtoY( unsigned char **R, unsigned char ** G, unsigned char **B,
unsigned char ** Out, int Filas, int Cols)
{
}
1.4 Operación Extract Color.
El objetivo es extraer de una imagen RGB todos aquellos pixels del
color seleccionado. Los que no coincidan se dejarán en negro. Los
colores posibles son los de la siguiente lista:
0 - ROJO, 1- NARANJA, 2 - AMARILLO, ... 11 - ROSA
Deberá programar las siguientes funciones:
Fco Javier Molina Cantero
Pag. 3
CARPETA: Pannels FICHERO: P1_Color.cpp
VISIONDLL_API long fnButtonExtractColor( unsigned char **R,
unsigned char **G,
unsigned char **B,
int Filas, int Cols, int Color)
{
return 0;
}
CARPETA: Library FICHERO: Color.cpp
// Convierte un pixel RGB a HLS
// Los resultados se devuelven por referencia en las variables HLS
void pixelRGBtoHLS(float red, float green, float blue, float *H, float *L, float *S)
{
}
// Convierte un pixel RGB a HLS cuantizando H, L y S en el número de
// niveles y colores que se indican. Los resultados se devuelven por referencia
// en las variables HLS
void pixelQuantRGBtoHLS( float red, float green, float blue,
int *H, unsigned char hueLevels,
int *L, unsigned char lightLevels,
int *S, unsigned char satLevels)
{
}
1.5 Operación Quantizing.
Partiendo de una imagen RGB de 24 bits, esta operación genera una
imagen RGB con el número de colores, y los niveles de saturación y
luminosidad indicados en el panel. P.e:
Fichero: ColTest.bmp
Pag. 4
Colores 12, Sat 6, Lum. 6
Además de las funciones desarrolladas en el apartado anterior,
deberá programar las siguientes:
CARPETA: Pannels FICHERO: P1_Color.cpp
VISIONDLL_API long fnButtonQuantizing( unsigned char **R,
unsigned char **G,
unsigned char **B,
int Filas, int Cols,
int hueLevels, int lumLevels,
int satLevels)
{
return 0;
}
CARPETA: Library FICHERO: Color.cpp
// Convierte un pixel RGB a HLS
// Los resultados se devuelven por referencia a través de las variables R,G,B
void pixelHLStoRGB(float H, float L, float S, float *R, float *G, float *B)
{
}
// Cuantiza una imagen completa RGB con el número de niveles HLS indicados
// La imagen resultante se devuelve en la misma matriz de entrada
void imageQuantRGB( unsigned char **R,unsigned char **G,unsigned char **B,
int Filas, int Cols,
int hueLevels, int lumLevels, int satLevels)
{
}
Fco Javier Molina Cantero
Pag. 5
2. IMÁGENES DE TEST
Fichero:
Mezcla.bmp
Fichero: Cuadro.bmp
Fichero: Patron.bmp
Fichero: pyjama.bmp
Fichero: Diagrama..bmp
Fichero: Diagrama..bmp
Fichero: ColTest.bmp
Pag. 6
Fichero: ColorGrad.bmp
3. REALIZACIÓN EJEMPLO
Botón ExtractBand.
El objetivo es generar una imagen con la banda preseleccionada en
la lista desplegable (rojo, verde o azúl). Los pasos a realizar son: poner
a cero las bandas no seleccionadas de la imagen original y mostrar el
resultado. No se hace necesario programar un algoritmo específico de
tratamiento, por lo que este apartado se resolverá programando la
función correspondiente a la pulsación del botón ExtractBand
CARPETA: Pannels FICHERO: P1_Color.cpp
VISIONDLL_API long fnButtonExtractBand( unsigned char **R,
unsigned char **G,
unsigned char **B,
int Filas, int Cols, int band)
{
int i,j;
// Índices para acceder a los elementos de las matrices
unsigned char **aux1 = G, **aux2 = B; // Banda 0-Rojo selec. por defecto
if(band == 1)
{
aux1 = R;
aux2 = B;
}
else if(band == 2)
{
aux1 = R;
aux2 = G;
}
for(i=0; i< Filas; i++)
for(j=0; j < Cols; j++)
aux1[i][j] = aux2[i][j] = 0;
DisplayRGB(R,G,B,Filas,Cols,"hola");
return 0;
}
Fco Javier Molina Cantero
Pag. 7
Descargar