Mejoras y alternativas al metodo de estandarización de color en imáganes digitales bajo patrones de iluminación cambiante
98
0
0
Texto completo
(2) MEJORAS Y ALTERNATIVAS AL METODO DE ESTANDARIZACION DE COLOR EN IMÁGENES DIGITALES BAJO PATRONES DE ILUMINACION CAMBIANTE. ZULMA MILENE GARZON BOLIVAR. Proyecto de grado para optar al título de Magister en Ingeniería Eléctrica y Electrónica Asesor Alfredo Restrepo Palacios, PH.D.. UNIVERSIDAD DE LOS ANDES FACULTAD DE INGENIERIA DEPARTAMENTO DE INGENIERIA ELECTRICA Y ELECTRONICA SANTAFE DE BOGOTA 2004. 2.
(3) A mis padres Alirio Mora y Alix Bolívar, y por supuesto, a mi inteligente y amado esposo.. 3.
(4) AGRADECIMIENTOS. Agradezco especialmente a mi asesor Alfredo Restrepo Palacios por su orientación y disponibilidad.. A mis padres, por su apoyo incondicional. A mi esposo por su colaboración y ejemplo, y a mis hermanas, primas, primos y demás personas que permitieron plasmar en este documento su fotografía, a pesar de no ser su mejor ángulo.. 4.
(5) CONTENIDO. Pág. INTRODUCCION. 13. 1. CONSTANCIA DE COLOR. 15. 2. ANATOMIA Y FISIOLOGIA DE LA VISION HUMANA. 17. 2.1 EL OJO HUMANO. 17. 2.2 LAS CELULAS NERVIOSAS. 19. 2.3 CORTEZA VISUAL PRIMARIA. 20. 3. ESPACIOS DE COLOR. 21. 3.1. ESPACIO DE COLOR RGB. 22. 3.2. ESPACIO DE COLOR HSV. 23. 4. TEORIA DE LOS PROCESOS OPONENTES DE HERING. 24. 26 5. RESUMEN DEL METODO TRADICIONAL 5.1. ADQUISICION DE LA IMAGEN. 27. 5.2. DIVISION DEL ESPACIO DE COLOR EN TETRAEDROS. 27. 5.
(6) Pág. 5.3. OBTENCION DE COORDENADAS BARICENTRICAS. 28. 5.4. IDENTIFICACIÓN DEL PÍXEL MÁS CERCANO. 28. 5.5. CALCULO DE NUEVAS COORDENADAS BARICENTRICAS. 29. 5.6. CALCULO DE NUEVAS COORDENADAS CARTESIANAS. 29. 6. AVANCES. 33. 6.1 ESTANDARIZACION DE ROSTROS. 33. 6.2. REAJUSTE DE COORDENADAS BARICENTRICAS. 40. 6.3. NUEVAS DIVISIONES DEL ESPACIO DE COLOR. 42. 6.4. ESPACIO DE HERING. 45. 7. INTERFAZ. 49. 8. ANALISIS Y CONCLUSIONES. 50. ANEXO A VERTICES QUE CONFORMAN EL POLIEDRO. 52. ANEXO B VERTICES DE LOS TETRAEDROS DEL MODELO DE HERING. 54. ANEXO C FORMULA DE LA INVERSA DE HERING. 62. ANEXO D RUTINAS IMPLEMENTADAS. 65. ANEXO E CD QUE CONTIENE RUTINAS E INTERFAZ DEL PROGRAMA REFERENCIAS. 95. 6.
(7) LISTA DE TABLAS. Pág. Tabla 1. Vértices del poliedro generado para la estandarización de rostros.. 52. Tabla 2 Vértices de los tetraedros que corresponden a la división del espacio. 54. de 48 tetraedros. Tabla 3 Vértices de los tetraedros para la primera cara del nuevo espacio de Hering. 56. Tabla 4 Vértices de los tetraedros para la segunda cara del nuevo espacio de Hering. 57. Tabla 5 Vértices de los tetraedros para la tercera cara del nuevo espacio de Hering. 58. Tabla 6 Vértices de los tetraedros para la cuarta cara del nuevo espacio de Hering. 59. Tabla 7 Vértices de los tetraedros para la quinta cara del nuevo espacio de Hering. 60. Tabla 8 Vértices de los tetraedros para la sexta cara del nuevo espacio de Hering. 61. 7.
(8) LISTA DE FIGURAS. Pág. Figura 1 El ojo humano. 18. Figura 2 La retina y sus tres capas. 18. Figura 3 La célula nerviosa y sus partes principales. 19. Figura 4 Vía visual de un cerebro humano. 20. Figura 5 Espacio de color para el modelo RGB. 22. Figura 6. Espacio de color para el modelo HSV. 23. Figura 7. Espacio de color para el modelo de Hering. 24. Figura 8. Transiciones. 25. Figura 9 Diagrama de bloques del método de estandarización. 26. 8.
(9) Pág. Figura 10 División del espacio RGB en 6 tetraedros. 27. Figura 11 Imágenes originales con diferente patrón de iluminación y sus. 30. distribuciones de color. Figura 12 Imágenes estandarizadas y su distribución de color.. 31. Figura 13 Imágenes de rostros con su respectiva distribución de color. 34. Figura 14 Dos vistas del poliedro utilizado en la estandarización de rostros.. 35. Figura 15 Rostros estandarizados junto con distribución de color de la imagen. 36. estandarizada bajo rutina tradicional.. Figura 16 Rostros estandarizados y distribución de color utilizando el nuevo poliedro 37. Figura 17 Rostros con diferentes fondos y accesorios, junto con distribución. 39. de color y poliedro.. Figura 18 Tetraedro inicial, nuevo tetraedro y punto de color que sale del nuevo tetraedro. 9. 40.
(10) Pág. Figura 19 Punto que sale del tetraedro y sus dos proyecciones. 41. Figura 20 División tradicional del espacio de color en 6 tetraedros. 42. Figura 21 División del espacio de color en 12 tetraedros dispuestos en tajadas. 43. Figura 22 Otra nueva división del espacio de color con respecto al baricentro de. 43. los tetraedros originales. Figura 23 Imagen original e imágenes estandarizadas con diferentes divisiones. 44. del espacio de color. Figura 24 Espacio de color para el nuevo modelo de Hering. 46. Figura 25 Triangulación para el nuevo modelo de Hering. 47. Figura 26 Interfaz de la rutina de estandarización. 49. Figura 27 Dos diferentes vistas del poliedro generado para la estandarización de. 53. rostros. 10.
(11) Pág. Figura 28 Vista de los vértices de los tetraedros para la primera cara del nuevo. 56. espacio de Hering. Figura 29 Vista de los vértices de los tetraedros para la segunda cara del nuevo. 57. espacio de Hering. Figura 30 Vista de los vértices de los tetraedros para la tercera cara del nuevo. 58. espacio de Hering. Figura 31 Vista de los vértices de los tetraedros para la cuarta cara del nuevo. 59. espacio de Hering. Figura 32 Vista de los vértices de los tetraedros para la quinta cara del nuevo. 60. espacio de Hering. Figura 33 Vista de los vértices de los tetraedros para la sexta cara del nuevo espacio de Hering. 11. 61.
(12) LISTA DE ANEXOS. Pág.. ANEXO A VERTICES QUE CONFORMAN EL POLIEDRO. 12.
(13) INTRODUCCION. El color es una propiedad de enorme importancia para la percepción visual humana, muchas veces nos basamos en el color de un objeto para identificar ciertas características del mismo. Además los seres humanos, tenemos la capacidad de percibir el color de un objeto constante, bajo condiciones de luz variante, fenómeno conocido como constancia de color.. Es así como podemos detectar si una manzana está madura sin importar la. iluminación del recinto donde nos encontremos, en un rango amplio de iluminaciones posibles.. Esta característica (constancia de color) se ha querido agregar a la inspección en visión artificial, pues es fundamental para hacer un análisis automático de imágenes, y así utilizar el color en el procesamiento digital de imágenes ya que representa un potente descriptor que a menudo simplifica la identificación de un objeto y su extracción de una escena [1].. Pero es difícil crear un método eficiente que incorpore esta característica y permita identificar objetos según sus atributos de color, ya que el color resultante (medido por una cámara) en una escena se ve afectado por diferentes patrones, tales como la intensidad de luz, el punto de vista, etc.. 13.
(14) Por esta razón, se crearon los métodos de estandarización de color, que permiten convertir las imágenes adquiridas bajo diferentes patrones de iluminación en una imagen estándar, en la que el color que posee es independiente de la iluminación.. En el Laboratorio de Señales de la universidad se ha propuesto un método [2], [3], [4], [5], [6], [7], que logre la estandarización del color en imágenes sin perder información de intensidad y variedad de tonalidades de los colores presentes en la misma. Este método tiene como base la hipótesis que el píxel más rojo, el más verde, el más azul, el más negro y el más blanco son el mismo, bajo un rango amplio de iluminación. Este trabajo de tesis, es una continuación del estudio realizado, en el que se plantean ideas como nuevas subdivisiones del espacio de color que permitan mejorar el proceso de estandarización en determinado tipo de imágenes, como los rostros, también se propone el cambio al modelo de color de Hering, entre otras.. 14.
(15) 1. CONSTANCIA DEL COLOR. El color es una experiencia perceptiva, no un fenómeno físico objetivamente medible [8]. Por supuesto que hay un fenómeno físico subyacente que crea nuestra experiencia, pero podemos experimentar el mismo fenómeno físico de diferentes formas, bajo diferentes circunstancias. En general, no hay una función uno a uno entre el espectro de luz reflejado en nuestros ojos y el color como lo percibimos.. La constancia del Color es un fenómeno físico que crea nuestra experiencia, trata de la habilidad de los seres humanos y otros animales de percibir invariante el color de un objeto dado, bajo diferentes condiciones de iluminación [9], es decir, es una característica del sistema de percepción de color de los seres humanos la cual asegura que el color percibido de un objeto permanezca (casi) constante bajo condiciones de luz variante. Una manzana, por ejemplo, puede parecernos verde en la mañana, en un día soleado, cuyas principales componentes son azulosas, y también al finalizar una tarde soleada, cuando las principales componentes de luz son rojizas. Esto nos permite identificar fácilmente objetos.. La constancia de color solo trabaja si en la escena que se observa hay varios objetos. La percepción del color en los seres humanos se lleva a cabo por medio de los conos, células encontradas en las retinas de los ojos, que permiten registrar las componentes de longitudes. 15.
(16) de onda en tres rangos corto, medio y largo después de ser reflejadas por los objetos en la escena [10].. A partir de esta información, el sistema visual intenta determinar las. propiedades de reflectancia de las superficies de los objetos en la escena. Esta información es entonces organizada, para así obtener el “color verdadero” del objeto o reflectancia (curva de reflectancia espectral del la superficie del objeto), es decir que la reflectancia determina a la larga, el color percibido.. Para resolver el problema de la Constancia del color, se han creado diferentes teorías, métodos como el de Chang y Reid [2], o el de Land, también algunos algoritmos como el “gray world”, o el “white match” [11], entre otros.. 16.
(17) 2. ANATOMIA Y FISIOLOGIA DE LA VISION HUMANA. Estamos acostumbrados a denominar el ojo como el órgano de la visión, pero en realidad, el órgano que efectúa el proceso de la visión es el cerebro; la función del ojo es traducir las ondas electromagnéticas de la luz en un determinado tipo de impulsos nerviosos que se transmiten al cerebro a través del nervio óptico [12]. En este capítulo, haremos un breve resumen de la anatomía y la fisiología del sistema de visión humano.. 2.1. EL OJO HUMANO. El ojo humano se podría comparar con una máquina con un sistema de autofoco incorporado, que ajusta automáticamente la intensidad de la luz, que también tiene una lente con sistema de autolimpieza y que además envía la información a un ordenador con capacidades de procesamiento paralelo tan avanzadas, que nosotros los ingenieros apenas alcanzamos a diseñar estrategias parecidas para proveer a las máquinas.. En la figura 1,. encontramos las partes que componen al ojo, la función colectiva de las partes no retinianas de ojo es la de mantener una imagen clara, enfocada, del mundo exterior, anclada en las dos retinas [9]. Mientras que la de la retina es convertir la luz en señales nerviosas. En la retina se encuentran los fotorreceptores, llamados bastones y conos. Los bastones que son mucho más numerosos que los conos, son los responsables de nuestra visión en luz tenue y. 17.
(18) no funcionan con luz brillante. Es esta la principal diferencia con los conos, pues los conos no responden a luz tenue, pero son responsables de nuestra capacidad para observar detalles finos y para la visión del color. En la figura 2, podemos apreciar la retina agrandada y las posiciones relativas de sus tres capas.. Figura 1. El ojo humano. Tomado de: www.siste.com.ar/ojo_humano.htm. Enero 28 de 2004. Figura 2 La retina y sus tres capas. Tomado de: D. Hubel. Ojo, cerebro y visión. 18.
(19) 2.2. LAS CELULAS NERVIOSAS Las células nerviosas o neuronas, están formadas por diferentes partes, el cuerpo celular, el axón, y las dendritas, todos recubiertos por la membrana celular. En la figura 3, vemos un ejemplo de ellas. El cuerpo celular y las dendritas reciben información de otras células nerviosas; el axón transmite información de la neurona a otras células nerviosas. Podríamos decir que el sistema visual es un ejemplo de un sistema conectado en serie, pues la información inicial llega a las retinas, y estas envían la información a dos nidos de células, ubicados en el interior del cerebro y llamados cuerpos geniculados laterales.. Figura 3 La célula nerviosa y sus partes principales. Tomado de: D. Hubel. Ojo, cerebro y visión. 19.
(20) 2.3. LA CORTEZA VISUAL PRIMARIA Se sabe que el mundo visual se encuentra representado sistemáticamente en el geniculado y la corteza. El geniculado lateral responde a la luz de forma muy similar a como lo hacen las células ganglionares de la retina, al parecer, no ejercen ninguna transformación profunda. La corteza visual primaria, o estriada no solo se preocupa por la posición del estímulo, y el tamaño del punto, como ocurriría en la retina y el geniculado, sino que se ocupa también de la orientación de la línea y de la curvatura del estímulo.. Figura 4. Vía visual de un cerebro humano. Ojo. Quiasma óptico Tracto óptico. Núcleo geniculado lateral. Corteza visual primaria. 20.
(21) 3. ESPACIOS DE COLOR. Así como los artistas utilizan paletas y óleos para crear multitudes de colores, la visión artificial utiliza espacios de color y valores numéricos para representar los colores en espacios de dos y tres dimensiones. Y de la misma forma en que existen muchos tipos de pinturas (óleos, acrílicas, etc.), también hay varios espacios de color.. Un espacio de color es una forma específica de representar colores como ene-tuplas de números, típicamente de tres o más valores. Los espacios de color ayudan a reproducir representaciones de color, en particular, representaciones digitales [14], televisión a color, etc. Algunos espacios de color existentes son:. •. RGB: para computadoras gráficas. •. CMYK: para impresoras. •. YUV y YIQ: para televisión. •. HSV para diseño gráfico. Hablaremos un poco más acerca del espacio RGB y HSV. Las fórmulas de conversión para estos espacios, se pueden encontrar en el libro de González, Tratamiento Digital de Imágenes que se encuentra referenciado en la bibliografía.. 21.
(22) 3.1 ESPACIO DE COLOR RGB. El estándar RGB establecido por CIE en 1931 a partir de tres primarios monocromáticos con longitudes de onda 700nm (R, red), 546.1nm (G, green), y 435.8nm (B, blue). [15]. En el modelo RGB, cada color aparece con sus componentes espectrales primarias de rojo, verde y azul, es decir, se puede pensar en el modelo RGB como un espacio de color de tres dimensiones [16]. Este modelo está basado en un sistema de coordenadas cartesianas, como se aprecia en la figura 5 en donde:. Figura 5. Espacio de color para el modelo RGB. Tomado de: Toolbox de imágenes de Matlab. 22.
(23) 3.2. ESPACIO DE COLOR HSV. Este modelo define un espacio de color en términos de tres componentes: tono, saturación y valor. En la figura 6 se aprecia el espacio de color para el modelo HSV.. Figura 6. Espacio de color para el modelo HSV. Tomado de: Toolbox de imágenes de Matlab. El modelo HSV debe su utilidad a dos hechos básicos [1]. Primero, la componente de V (valor), está desacoplada, es decir, es ortogonal a la información cromática contenida en la imagen. Segundo, las componentes de tono y saturación están íntimamente relacionadas con la forma en que los seres humanos percibimos el color. Estas características hacen que el modelo HSV sea una herramienta ideal para desarrollar algoritmos de procesamiento de imágenes basados en alguna de las propiedades de la percepción del color del sistema visual humano.. 23.
(24) 4. TEORIA DE LOS PROCESOS OPONENTES DE HERING. Ewald Hering, fisiólogo alemán, concluyó que no existen tres colores elementales [18], mas bien. propuso. 6. colores. elementales,. incluyendo. el. negro. y. el. blanco. Con esta teoría hizo varias observaciones importantes que no habían sido tenidas en cuenta por la teoría tricromática [2], [19]. El notó que hay ciertos pares de colores que uno nunca ve mezclados. Es decir, no se ven verdes rojizos ni azules amarillentos, pero sí verdes amarillentos, o rojos azulados, etc.. Figura 7. Espacio de color para el modelo de Hering. La hipótesis de Hering exhibía dos clases opuestas de tratamiento. El primero, procesos espectralmente opuestos los cuales son rojo vs. verde y amarillo vs. azul. El segundo, procesos espectralmente no opuestos, en donde hay mezcla, que es negro y blanco. Es. 24.
(25) decir, si quisiéramos hacer una transición del rojo al verde, es necesario pasar por un color diferente, como puede ser el amarillo (figura 8), de igual forma, si quisiéramos pasar del amarillo al azul, es necesario pasar por ejemplo por el verde. A continuación se muestran algunas transiciones.. Figura 8. Transiciones. El encontró que el negro y el gris no son producidos simplemente por la ausencia de luz proveniente de un objeto o superficie; pero si aparecen únicamente cuando la luz del objeto es menor que el promedio de la luz proveniente de las regiones cercanas. De igual forma el blanco aparece solo cuando el alrededor es más oscuro. En la teoría de Hering, los procesos negro y blanco requieren una comparación espacial o sustracción de reflectancias, a diferencia de los procesos rojo-verde y amarillo-azul.. 25.
(26) 5. RESUMEN DEL METODO TRADICIONAL. El método propuesto para la estandarización se trabaja en Matlab y está basado en el procedimiento descrito por Alejandra Nieto [2] Y Sonia Castro [5] en sus proyectos de tesis. En la figura 9, observamos un diagrama de bloques del proceso y a continuación se presentará una breve explicación del proceso, pero no se entrará en detalles, se recomienda para una mejor comprensión del método, leer los proyectos de tesis de Sonia Castro o Alejandra Nieto, en donde se encuentra una explicación detallada, junto con la solución de algunos inconvenientes presentes en el proceso.. Figura 9 Diagrama de bloques del método de estandarización. Adquisición de la imagen formato RGB División del espacio de color en tetraedros Obtención de coordenadas baricéntricas e identificación de píxel pertenecientes a cada tetraedro Identificación de píxel más cercano a cada vértice del tetraedro Cálculo de nuevas coordenadas baricéntricas Cálculo de nuevas coordenadas cartesianas. 26.
(27) 5.1. ADQUISICION DE LA IMAGEN. Las imágenes fueron adquiridas en formato jpg o bmp. Cualquiera de estos dos formatos, despliega tres matrices de tamaño n*m, en donde n corresponde al número de filas que hay en la imagen, m corresponde al número de columnas. La primera matriz contiene la información de rojo presente en cada píxel de la imagen, la segunda contiene la información de verde y la última la información de azul.. 5.2. DIVISION DEL ESPACIO DE COLOR EN TETRAEDROS. Se divide el cubo RGB en 6 tetraedros, en la figura 10 se aprecia el proceso de división del espacio RGB.. Figura 10. División del espacio RGB en 6 tetraedros. 27.
(28) Los vértices de estos espacios corresponden a: • Negro, Magenta, Rojo, Blanco:. Tetraedro 1. • Negro, Magenta, Azul, Blanco:. Tetraedro 2. • Negro, Cyan, Azul, Blanco:. Tetraedro 3. • Negro, Cyan, Verde, Blanco:. Tetraedro 4. • Negro, Amarillo, Verde, Blanco:. Tetraedro 5. • Negro, Amarillo, Rojo, Blanco:. Tetraedro 6. 5.3. OBTENCION DE COORDENADAS BARICENTRICAS. A partir de las coordenadas cartesianas, obtenemos las coordenadas baricéntricas [20] donde los puntos de referencia, serán los vértices de cada tetraedro. Un píxel pertenece a cierto tetraedro, si todas las coordenadas baricéntricas resultantes se encuentran en un rango de 0 a 1.. 5.4. IDENTIFICACIÓN DEL PÍXEL MÁS CERCANO. A partir de las coordenadas baricéntricas, se encuentra el píxel más cercanos a cada vértice de los tetraedros. Analizando los píxeles pertenecientes a un tetraedro, se busca el píxel que tenga la primera, segunda, tercera y cuarta coordenada baricéntrica mas cercana a 1, estos píxeles, determinarán los vértices del nuevo tetraedro.. 28.
(29) 5.5. CALCULO DE NUEVAS COORDENADAS BARICENTRICAS. Se recalculan las coordenadas baricéntricas a partir de estos nuevos tetraedros, es decir, los vértices de referencia ahora corresponden a los del nuevo tetraedro. Es importante tener en cuenta que es necesario aplanar los colores que se hayan salido del nuevo tetraedro, es decir, hacerlos coincidir en una de las caras del tetraedro.. 5.6. CALCULO DE NUEVAS COORDENADAS CARTESIANAS. De nuevo se obtienen las coordenadas cartesianas a partir de las nuevas coordenadas baricéntricas y de los vértices de los tetraedros iniciales. De esta forma, obtenemos los colores estandarizados.. En la figura 11, se muestran tres imágenes, cuya adquisición se realizó a través del día, de esta forma se obtuvieron tres diferentes patrones de iluminación. La diferencia de los patrones de iluminación, se puede apreciar mucho mejor, observando la distribución de color de cada una de ellas. En la distribución de color, los colores pertenecientes al primer tetraedro, están representados por los puntos color rojo, al segundo por los puntos color verde, al tercero por los puntos color azul, al cuarto por los puntos color amarillo, al quinto por los puntos color cyan y al sexto, por los puntos color magenta. A través de esta distribución, podemos apreciar la influencia de la iluminación en el color resultante, pues. 29.
(30) claramente podemos visualizar la diferencia en las tres distribuciones de la nube azul y roja de puntos. A simple vista, en las dos primeras imágenes originales, estas diferencias son casi imperceptibles, pero con la distribución de color, es fácil detectar la diferencia de la distribución de color. En otras ocasiones, es más fácil detectar estas diferencias, como en el caso de la última imagen con respecto a las dos primeras, pues el piso se encuentra poco iluminado y el cielo de la estatua presenta un cyan más brillante.. Figura 11 Imágenes originales con diferente patrón de iluminación y sus distribuciones de. 30. color.
(31) Figura 12 Imágenes estandarizadas y su distribución de color.. En la figura 12, encontramos las imágenes estandarizadas correspondientes a las imágenes originales. Podemos observar una clara diferencia en el color cyan del cielo de la estatua, muy seguramente, debido a que en las dos primeras imágenes, el borde superior de la tapa del marcador azul era más cyan que el cielo de la estatua, lo que impide a estos colores acercarse más al cyan puro, mientras que en la tercera imagen, este brillo en la tapa del marcador no es tan cyan, es más cyan el cielo de la estatua y por lo tanto, es arrastrado. 31.
(32) hacia un cyan más puro. En resumen, las imágenes estandarizadas en el ejemplo anterior, no son exactas, debido a que el patrón de iluminación no es uniforme en toda la imagen, por lo tanto, en este caso, el cyan más cyan, no siempre es el más cyan en todas las imágenes. Fue imposible adquirir imágenes con variaciones de iluminación uniforme sobre ellas, por lo que no se puede mostrar el correcto funcionamiento del programa.. 32.
(33) 6. AVANCES. Los avances que se muestran a continuación, surgieron de observaciones y trabajos propuestos en documentos anteriores [2], [5].. 6.1 ESTANDARIZACION DE ROSTROS En trabajos anteriores de este método de estandarización, una de las conclusiones más importantes, era que la división del espacio de color es clave en el resultado de la estandarización. Se pensó entonces, que esta división también dependería del tipo de imagen a procesar, es decir, si la imagen a estandarizar eran frutas, flores, rostros, etc. Por tal razón, escogimos un tipo de imágenes y realizamos la estandarización.. Se escogieron imágenes de rostros, pues con el programa de estandarización tradicional, ocurrían errores debidos a que las imágenes de rostros no son ricas en color, característica primordial que debían poseer las imágenes sometidas al proceso.. Se tomaron fotos de rostros con dos diferentes patrones de iluminación y con un fondo constante, y se analizaron las distribuciones de color presentes en cada imagen para un solo patrón de iluminación. En la figura 13, se muestran diferentes rostros junto con sus distribuciones de color.. 33.
(34) Figura 13 Imágenes de rostros con su respectiva distribución de color en el espacio RGB. Como se puede apreciar en esta figura, las distribuciones de color son bastante parecidas, difieren un poco debido a colores presentes inherentes a los rostros, como por ejemplo el. 34.
(35) color de la ropa. Es así como los dos primeros rostros tienen una distribución de color más semejante entre ellos que con respecto a los dos últimos rostros.. A partir del hecho de encontrar una distribución de color bastante semejante entre rostros, se procedió a formar un poliedro que abarcase esta distribución de color y que permitiera llevar a cabo la estandarización de los rostros. Los vértices del poliedro que conforman el poliedro, se encuentran en el anexo A. En la figura 14, se encuentran diferentes vistas del nuevo poliedro construido para el proceso.. Este nuevo poliedro, también permite. subdivisiones en 28 tetraedros para llevar a cabo la estandarización.. Figura 14 Dos vistas del poliedro utilizado en la estandarización de rostros.. En la figura 15 se encuentran los rostros mostrados anteriormente, estandarizados bajo el programa tradicional, junto con la distribución de color de la imagen estandarizada. Y en la figura 16, se encuentran los mismo rostros estandarizados, junto con su distribución de color, pero utilizando el nuevo poliedro en el proceso de estandarización.. 35.
(36) Figura 15 Rostros estandarizados junto con distribución de color de la imagen estandarizada bajo rutina tradicional.. 36.
(37) Figura 16 Rostros estandarizados y distribución de color utilizando el nuevo poliedro en el proceso.. 37.
(38) De lo anterior, podemos observar varias cosas. Los rostros estandarizados utilizando el nuevo poliedro, no divergen tanto de sus colores naturales, debido a que la nueva división no traslada ningún color a los vértices del espacio RGB.. También podemos notar, que los parches dentro de los rostros y en general en toda la imagen, se disminuyen, debido a que el trayecto recorrido por los colores extremos hacia los vértices de los tetraedros, se disminuye, lo cual conlleva a que los puntos internos al nuevo tetraedro también disminuyan su trayectoria, generando un menor contraste en la imagen.. Por otra parte, algunos rostros no permitían la estandarización utilizando el método tradicional, ya que al encontrar los colores más cercanos a los vértices de un tetraedro, estos puntos eran coplanares y no permitían la formación de nuevos tetraedros. Utilizando el poliedro, nunca resultaron problemas de este tipo, pues nos aseguramos que los tetraedros que lo conforman, contengan diversidad de colores de tal forma que se puedan generar los nuevos tetraedros.. Después de probar con estos rostros, se trató de probar con nuevos rostros, con un nuevo fondo y diferentes accesorios. Como era de esperarse, la distribución de color cambió considerablemente debido a los diferentes colores presentes en la imagen. El poliedro creado no encerraba por completo la nueva distribución de color, como se puede apreciar en la figura 17, en donde se muestra como a medida que vamos cambiando el fondo e. 38.
(39) introduciendo nuevos accesorios, la distribución de color (puntos verdes), no es encerrada por el poliedro.. Figura 17 Rostros con diferentes fondos y accesorios, junto con distribución de color y poliedro.. 39.
(40) De la anterior figura, podemos notar que al crear un nuevo poliedro, se restringe de cierta forma el ambiente en donde se toma la fotografía, para lo cual se hace necesario, escoger inicialmente el tipo de aplicación y los posibles ambientes que se generen en ella, antes de formar un nuevo poliedro.. 6.2 REAJUSTE DE COORDENADAS BARICENTRICAS Como se mencionó en el capitulo anterior, algunas veces es conveniente aplanar los puntos de los colores que se salen de los nuevos tetraedros, esto se lleva a cabo trazando una línea imaginaria entre el punto y el vértice opuesto al lado por el que se salió el punto y moverlo hasta el cruce entre esta línea y el lado en cuestión.. En la figura 18, vemos un ejemplo real. En la imagen de la izquierda, se aprecia el tetraedro inicial, (en rojo) que es el más grande y el nuevo tetraedro (azul), en la imagen de la derecha, se observa el nuevo tetraedro y el punto de color (en rojo) que queda fuera de éste.. Figura 18 Tetraedro inicial, nuevo tetraedro y punto de color que sale del nuevo tetraedro. 40.
(41) Otro de los avances que se hicieron, fue mejorar el criterio para aplanar estos nuevos colores en los tetraedros, pues en algunas ocasiones, el punto se alejaba demasiado del color original al arrastrarlo hacia el tetraedro, lo que originaba bastantes cambios en la estandarización, pues posiblemente para otro patrón de iluminación, el mismo color no quedaba fuera del nuevo tetraedro. Por tal razón, se pensó trazar una línea imaginaria, entre el punto y el baricentro del nuevo tetraedro. En la figura 19, podemos observar las dos posiciones del punto proyectado sobre la cara del tetraedro, el punto rojo corresponde al punto original, el punto verde corresponde a la proyección que inicialmente se hacía, y el punto magenta corresponde a la nueva proyección. Se calculó la distancia entre el punto rojo y el verde, y después entre el punto rojo y el magenta, para comparar las magnitudes, y efectivamente en este caso, la menor distancia correspondió a la distancia entre el punto rojo y magenta.. Figura 19 Punto que sale del tetraedro y sus dos proyecciones. 41.
(42) De todas formas, esta nueva proyección no siempre era más efectiva que la anterior, por eso se propone como trabajo futuro, realizar esta proyección pero perpendicularmente al plano del tetraedro por el que se sale dicho punto. De esta forma nos aseguramos que el punto recorra la menos distancia posible antes de ser estandarizado.. 6.3. NUEVAS DIVISIONES DEL ESPACIO DE COLOR Otras pruebas que se realizaron para observar los resultados, fueron hacer diferentes divisiones del espacio de color, en la figura 20, se observa la división tradicional que se hace al espacio de color. En esta división, los 6 tetraedros tienen dos vértices en común, el punto negro y blanco.. Figura 20 División tradicional del espacio de color en 6 tetraedros. En la figura 21, se plantea una nueva división del espacio de color, manteniendo la misma forma (las tajadas), solo que de uno de los tetraedros originales, se obtienen dos, y se mantienen el negro y el blanco como vértices comunes a todos los 12 nuevos tetraedros.. 42.
(43) Figura 21 Nueva división del espacio de color en 12 tetraedros dispuestos en tajadas. En la figura 22, se aprecia otra nueva división del espacio de color. Consiste en que de cada tetraedro original, se obtiene el baricentro y se forman cuatro tetraedros de uno de los originales, estos nuevos 4 tetraedros tienen como vértice en común el baricentro del original. En total se forman 24 nuevos tetraedros.. Figura 22 Otra nueva división del espacio de color con respecto al baricentro de los tetraedros originales. En la figura 23, se muestra la influencia que hay en el resultado de la estandarización utilizando diferentes divisiones del espacio de color.. 43.
(44) Figura 23 Imagen original e imágenes estandarizadas con diferentes divisiones del espacio de color. La imagen original, corresponde a la imagen de la esquina superior izquierda, la imagen de la esquina superior derecha corresponde a la imagen estandarizada utilizando 6 tetraedros; la imagen de la esquina inferior izquierda, corresponde a la imagen estandarizada utilizando 12 tetraedros; y la imagen de la esquina inferior derecha, corresponde a la imagen estandarizada con 24 tetraedros por el método del baricentro.. Podemos observar que la imagen estandarizada con 6 tetraedros, es la que posee los colores más puros, o más extremos, lo podemos notar en el amarillo del jarrón, o de la mesa o del centro de la flor. La imagen estandarizada con 12 tetraedros produce menos parches, como se puede observar en el azul de la pared. La imagen estandarizada con 24 tetraedros, es la. 44.
(45) que menos colores extremos produce, pues muchos de los colores son arrastrados en el sentido del baricentro. En resumen, se prefirió trabajar con la división en 6 tetraedros, principalmente, porque se disminuye la probabilidad de no encontrar nuevos tetraedros, al contener mayor número de colores dentro de ellos y además por aplicar más el objetivo del método.. 6.4. ESPACIO DE HERING Ya que este método está inspirado en el fenómeno de constancia de color, es consecuente que trabajemos con las coordenadas de Hering, pues estaríamos simulando la forma en que el ojo humano responde al color. En el trabajo de Alejandra Nieto, se inició el trabajo en el espacio de Hering, es decir, después de tener las coordenadas RGB de la imagen, éstas se convertían a coordenadas de Hering por medio de la siguiente transformación:. ⎡1 BkW ⎡ ⎤ ⎢3 ⎢ RG ⎥ = ⎢ 1 ⎢ ⎥ ⎢1 ⎢⎣ YB ⎥⎦ ⎢ ⎢⎣ 2. 1 1⎤ R 3 3 ⎥ ⎡⎢ ⎤⎥ − 1 0 ⎥ × ⎢G ⎥ ⎥ 1 − 1⎥ ⎢⎣ B ⎥⎦ 2 ⎥⎦. Esta transformación es aproximadamente la usada en el sistema NCS (Natural Color System), basado en la teoría de los procesos oponentes. Claramente se nota que el rojo puro = [1 0 0], en RGB tiene valor en las tres componentes en Hering, por lo tanto, se busca una nueva transformación (no lineal) en la que el rojo puro no implicara valor en la. 45.
(46) coordenada YB. Se encontró la siguiente transformación para la coordenada YB y que de ahora en adelante llamaremos transformación de Hering.. BkW =. 1 3. (R + G +. B). RG = R − G RG ⎛ R + G B ⎛ R+G⎞ ⎞ − B⎟ − YB = ⎜B − ⎟ 2 ⎜ 2 ⎠ 255 ⎝ 2 ⎠ 255 ⎝. El nuevo espacio de color (la imagen del cubo rgb estándar con respecto a esta transformación), se observa en la figura 24, el volumen resultante se asemeja a un cubo ligeramente derretido, con algunas caras convexas y otras cóncavas.. Figura 24 Espacio de color para el nuevo modelo de Hering. 46.
(47) Pero con este nuevo espacio de color, surgió un problema, debido a que este no tiene caras planas, el uso de los tetraedros normalmente utilizados era imposible, por esto, se estudiaron diferentes métodos de división de sólidos [21] y se llevó a cabo una triangulación de sus caras y a partir de esta, se crearon los nuevos tetraedros. Estos nuevos tetraedros, tienen un vértice en común que se encuentra cerca al centro del nuevo espacio de color.. Los nuevos tetraedros, se muestran en la figura 25. La imagen de la derecha, corresponde a una triangulación en donde por cada cara del nuevo espacio se hicieron 32 divisiones, lo que resultaría en 192 tetraedros, de tal forma que se aproxime bastante bien a la forma curva de las caras del nuevo espacio, pero se generarían matrices sin inversa, por no poder crear los nuevos tetraedros con todos sus vértices no coplanares. Entonces, se escogió un menor número de triángulos por cara (8 triángulos), como se ve en la imagen de la izquierda, para poder estandarizar con menos tetraedros, es decir con 48 tetraedros, pero perdiendo proximidad a la forma del nuevo espacio. Los vértices de las dos formas de triangulación, se pueden consultar en el anexo B.. Figura 25 Triangulación para el nuevo modelo de Hering. 47.
(48) Después de ubicar los colores dentro de cada nuevo tetraedro, es necesario utilizar la inversa de la nueva transformación, para regresar al espacio RGB. La inversa de la nueva ecuación, surge del despeje de una ecuación cúbica, lo cual arroja tres soluciones, las cuales se muestran en el anexo C, en donde la variable x, corresponde a BkW, la variable y, corresponde a RG y la variable z, corresponde a YB.. Al utilizar esta inversa, surgió un nuevo inconveniente. Se pensó utilizar la primera solución, ya que no tenía parte imaginaria, lo cual funcionó para algunos valores de RGB, pues no siempre, la solución era correcta. Se ha tratado de buscar una forma de encontrar la verdadera solución RGB, utilizando la mediana de la parte real de las tres soluciones, la mediana de la magnitud de las tres soluciones, pero ninguna ha funcionado totalmente. Por lo tanto, no se han podido ver los resultados de la estandarización, a partir de esta nueva fórmula.. 48.
(49) 7. INTERFAZ. Debido a las diferentes opciones que se presentaban de la división del espacio de color, se pensó crear una interfaz que facilitara la elección de las diferentes opciones. En la figura 26, se muestra la aplicación.. Figura 26 Interfaz de la rutina de estandarización. Esta interfaz permite seleccionar la imagen a estandarizar de cualquier directorio, observar y rotar la distribución de color de la imagen original, seleccionar la división del espacio de color, junto con el número de tetraedros, observar la imagen estandarizada, y desplegar y rotar la distribución de color de la imagen estandarizada.. 49.
(50) 8. ANALISIS Y CONCLUSIONES. Para llevar a cabo el proceso de estandarización es necesario tener riqueza de color en la imagen, las imágenes de rostros son pobres en color y al estandarizarlas con los tetraedros originalmente propuestos, en ocasiones resultan nuevos tetraedros con sus vértices coplanares, lo que resulta en una matriz sin inversa y por lo tanto, el proceso de estandarización se interrumpe.. Para mejorar el proceso de estandarización es conveniente escoger los tetraedros según el tipo de imagen a estandarizar.. Es decir, para estandarizar rostros, se observó que la. distribución de color se hallaba en una pequeña porción del espacio de color, de la misma forma, para estandarizar por ejemplo frutas se debe analizar la distribución de color y escoger un patrón de tetraedros.. También es útil hacer un estudio de los diferentes patrones de iluminación para mejorar la estandarización, pues al parecer, el método funciona correctamente cuando los cambios de iluminación, afectan a la imagen uniformemente y además porque la iluminación afecta la distribución de color, es decir, se podría estudiar la forma de migración de los puntos de acuerdo a diferentes intensidades de luz.. 50.
(51) Se menciona el modelo de color HSV porque podría ser útil en la estandarización ya que desacopla la información de intensidad de la información de color, lo que sería muy útil en el caso específico de rostros.. Por último, es importante continuar con el estudio del campo de solución de las inversas de Hering para estudiar los resultados de la estandarización a partir de esta nueva fórmula.. 51.
(52) ANEXO A VERTICES QUE CONFORMAN EL POLIEDRO. Antes de nombrar los vértices del poliedro, es necesario tener en cuenta la correspondencia de los ejes coordenados, la cual se muestra a continuación.. Eje X: Rojo Eje Y: Verde Eje Z: Azul. Los vértices del poliedro se muestran en la tabla 1 y dos vistas del poliedro con los vértices ubicados, se muestra en la figura 27.. Tabla 1. Vértices del poliedro generado para la estandarización de rostros.. Número. Rojo. Verde. Azul. Número. Rojo. Verde. Azul. 1. 150. 0. 0. 8. 200. 255. 150. 2. 150. 0. 50. 9. 0. 0. 0. 3. 0. 20. 50. 10. 0. 0. 50. 4. 0. 20. 0. 11. 255. 255. 255. 5. 255. 200. 255. 12. 255. 255. 190. 6. 190. 255. 255. 13. 140. 115. 110. 7. 255. 200. 150. 14. 20. 10. 15. 52.
(53) Figura 27 Dos diferentes vistas del poliedro generado para la estandarización de rostros. 53.
(54) ANEXO B VERTICES DE LOS TETRAEDROS DEL NUEVO MODELO DE HERING. De nuevo, es importante tener en cuenta la correspondencia de los ejes coordenados, la cual se muestra a continuación.. Eje X: BkW Eje Y: RG Eje Z: YB. Los vértices de los tetraedros que corresponden a la división del espacio de 48 tetraedros, 8 por cada cara, se muestran en la tabla 2. El último vértice de cada tetraedro, es común a todos y tiene las siguientes coordenadas: BkW = 127.5, RG = 0 , YB = 0. Tabla 2. Vértices de los tetraedros que corresponden a la división del espacio de 48 tetraedros. TETRAEDRO 1 2 3 4 5 6 7 8 9 10 11 12. VERTICE 1 0, 0, 0 42.3,-127, 0 42.3,-127, 0 85, -255, 0 42.3, 0 -63.25 84.67, -127, -31.62 84.67, -127, -31.62 127.3, -255, 0.25 85, 255, 0 127.3, 128, 95.12 127.3, 128, 95.12 170, 0, 255. VERTICE 2 42.3,-127, 0 85, -255, 0 42.3, 0 -63.25 84.67, -127, -31.62 84.67, -127, -31.62 127.3, -255, 0.25 85, 0, -255 127.3, -127, -191.5 127.3, 128, 95.12 170, 0, 255 127.3, 255, 0.25 169.67, 128, 63.75. 54. VERTICE 3 42.3, 0 -63.25 84.67, -127, -31.62 84.67, -127, -31.62 127.3, -255, 0.25 85, 0, -255 127.3, -127, -191.5 127.3, -127, -191.5 170, -255, -127.5 127.3, 255, 0.25 169.67, 128, 63.75 169.67, 128, 63.75 212.3, 0, 191.75.
(55) 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48. 127.3, 255, 0.25 169.67, 128, 63.75 169.67, 128, 63.75 212.3, 0, 191.75 0, 0, 0 42.3, 0, -63.25 42.3, 127, 0 84.67, 127, -31.62 42.3, 127, 0 84.67, 127, -31.62 85, 255, 0 127.3, 255, 0.25 85, -255, 0 127.3, -128, 95.12 127.3, -128, 95.12 170, 0, 255 127.3, -255, 0.25 169.67, -128, 63.75 169.67, -128, 63.75 212.3, 0, 191.75 0, 0, 0 45, 130, 0 45, 130, 0 85, 255, 0 42.3, -127, 0 84.67, 0, 31.5 84.67, 0, 31.5 127.3, 128, 95.12 85, 0, -255 127.3, 127, -191.5 170, 255, -127.5 127.3, 127, -191.5 127.3, -127, -191.5 169.67, 0, -159.75 127.3, -127, -191.5 169.67, 0, -159.75. 169.67, 128, 63.75 212.3, 0, 191.75 170, 255, -127.5 212.3, 128, -95.87 42.3, 127, 0 84.67, 127, -31.62 42.3, 0, -63.25 85, 0, -255 85, 255, 0 127.3, 255, 0.25 84.67, 127, -31.62 127.3, 127, -191.5 127.3, -128, 95.12 170, 0, 255 127.3, -255, 0.25 169.67, -128, 63.75 169.67, -128, 63.75 212.3, 0, 191.75 170, -255, -127.5 212.3, -128, -95.87 45, 130, 0 85, 255, 0 42.3, -127, 0 84.67, 0, 31.5 84.67, 0, 31.5 127.3, 128, 95.12 85, -255, 0 127.3, -128, 95.12 127.3, 127, -191.5 170, 255, -127.5 127.3, -127, -191.5 169.67, 0, -159.75 169.67, 0, -159.75 212.3, 128, -95.87 170.0, -255 -127.5 212.3, -128, -95.87. 170, 255, -127.5 212.3, 128, -95.87 212.3, 128, -95.87 255, 0, 0 42.3, 0, -63.25 85, 0, -255 84.67, 127, -31.62 127.3, 127, -191.5 84.67, 127, -31.62 127.3, 127, -191.5 127.3, 255, 0.25 170, 255, -127.5 127.3, -255, 0.25 169.67, -128, 63.75 169.67, -128, 63.75 212.3, 0, 191.75 170, -255, -127.5 212.3, -128, -95.87 212.3, -128, -95.87 255, 0, 0 42.3, -127, 0 84.67, 0, 31.5 84.67, 0, 31.5 127.3, 128, 95.12 85, -255, 0 127.3, -128, 95.12 127.3, -128, 95.12 170, 0, 255 169.67, 0, -159.75 212.3, 128, -95.87 169.67, 0, -159.75 212.3, 128, -95.87 212.3, -128, -95.87 255, 0, 0 212.3, -128, -95.87 255, 0, 0. Para la división de 108 tetraedros, se muestran las siguientes tablas, hay que recordar que todos los tetraedros tienen un vértice común, correspondiente a BkW = 127.5, RG = 0 , YB = 0. Por la gran cantidad de tetraedros, se mencionarán los vértices de los tetraedros por cada cara en las tablas y en la figura de enseguida, se mostrará la posición de los vértices y la triangulación de la cara.. 55.
(56) La siguiente cara, corresponde a la cara del cubo RGB cuando R está en cero y G, B varían de 0 a 255.. Tabla 3 Vértices de los tetraedros para la primera cara del nuevo espacio de Hering. Vertice 1 2 3 4 5 6 7 8. BkW 0 28.1 56.5 85 28.1 56.2 84.67 113.1. RG 0 -84.3 -169.67 -255 0 -84.3 -169.67 255. YB 0 0 0 0 -28.89 -13.94 0.16 14.27. Vertice 9 10 11 12 13 14 15 16. BkW 56.56 84.67 113.1 141.55 85 113.1 141.55 170. RG 0 -84.33 -169.67 -255 0 -84.33 -169.67 -255. YB -112.89 -84.33 -56.44 -28.05 -255 -212.8 -170.16 -127.5. Figura 28 Vista de los vértices de los tetraedros para la primera cara del nuevo espacio de Hering. 56.
(57) La siguiente cara, corresponde a la cara del cubo RGB cuando R está en 255 y G, B varían de 0 a 255.. Tabla 4 Vértices de los tetraedros para la segunda cara del nuevo espacio de Hering. Vertice 1 2 3 4 5 6 7 8. BkW 85 113 141 170 113 141 169 198. RG 255 170.67 85.33 0 255 170.67 85.33 0. YB 0 56.11 141.28 255 14.28 56.44 127.5 227.12. Vertice 9 10 11 12 13 14 15 16. BkW 141.56 169.67 198.1 226.56 170 198.1 226.56 255. RG 255 170.67 85.33 0 255 170.67 85.33 0. YB 28.06 0 56.77 142.1 -127.5 113.55 -71.05 0. Figura 29 Vista de los vértices de los tetraedros para la segunda cara del nuevo espacio de Hering. 57.
(58) La siguiente cara, corresponde a la cara del cubo RGB cuando G está en 0 y R, B varían de 0 a 255.. Tabla 5 Vértices de los tetraedros para la tercera cara del nuevo espacio de Hering. Vertice 1 2 3 4 5 6 7 8. BkW 0 28.11 56.56 85 28.11 56.22 84.67 113.11. RG 0 84.33 169.67 255 0 84.33 169.67 255. YB 0 0 0 0 -27.89 -13.95 0.17 14.27. Vertice 9 10 11 12 13 14 15 16. BkW 56.56 84.67 113.11 141.56 85 113.11 141.56 170. RG 0 84.33 169.67 255 0 84.33 169.67 255. YB -112.89 -84.83 -56.44 -28.06 -255 -121.83 -170.17 -127.5. Figura 30 Vista de los vértices de los tetraedros para la tercera cara del nuevo espacio de Hering. 58.
(59) La siguiente cara, corresponde a la cara del cubo RGB cuando G está en 255 y R, B varían de 0 a 255.. Tabla 6 Vértices de los tetraedros para la cuarta cara del nuevo espacio de Hering. Vertice 1 2 3 4 5 6 7 8. BkW 85 113.11 141.56 170 113.11 141.22 169.67 198.11. RG -255 -170.67 -85.33 0 -255 -170.67 -85.33 0. YB 0 56.11 141.28 255 14.28 56.44 127.5 227.11. Vertice 9 10 11 12 13 14 15 16. BkW 141.56 169.67 198.11 226.56 170 198.11 226.56 255. RG -255 -170.67 -85.33 0 -255 -170.67 -85.33 0. YB -28.06 0 56.78 142.11 127.5 -113.55 -71.06 0. Figura 31 Vista de los vértices de los tetraedros para la cuarta cara del nuevo espacio de Hering. 59.
(60) La siguiente cara, corresponde a la cara del cubo RGB cuando B está en 0 y R, G varían de 0 a 255.. Tabla 7 Vértices de los tetraedros para la quinta cara del nuevo espacio de Hering. Vertice 1 2 3 4 5 6 7 8. BkW 0 28.11 56.56 85 28.11 56.22 84.67 113.11. RG 0 84.33 169.67 255 -84.33 0 85.33 170.67. YB 0 0 0 0 0 9.22 27.95 56.11. Vertice 9 10 11 12 13 14 15 16. BkW 56.56 84.67 113.11 141.56 85 113.11 141.56 170. RG -169.67 -85.33 0 85.33 -255 -170.67 -85.33 0. YB 0 27.95 75.11 141.28 0 56.11 141.28 255. Figura 32 Vista de los vértices de los tetraedros para la quinta cara del nuevo espacio de Hering. 60.
(61) La siguiente cara, corresponde a la cara del cubo RGB cuando B está en 255 y R, G varían de 0 a 255.. Tabla 8 Vértices de los tetraedros para la sexta cara del nuevo espacio de Hering. Vertice 1 2 3 4 5 6 7 8. BkW 85 113.11 141.56 170 113.11 141.22 169.67 198.11. RG 0 84.33 169.67 255 -84.33 0 85.33 170.67. YB -255 -212.83 -170.17 -127.5 -212.83 -189.33 -156.17 -113.55. Vertice 9 10 11 12 13 14 15 16. BkW 141.56 169.67 198.11 226.56 170 198.11 226.56 255. RG -169.67 -85.33 0 85.33 -255 -170.67 -85.33 0. YB -170.17 -1596.17 -123.11 -71.06 -127.5 -113.55 -71.06 0. Figura 33 Vista de los vértices de los tetraedros para la sexta cara del nuevo espacio de Hering. 61.
(62) ANEXO C FORMULA DE LA INVERSA DE HERING. ¾ Primera solución real 1 48960x2 – 17166600x + 4590y2 – 18xy2 + 2340900z + 8x3 + 1061208000 + 3 552040401600000z + 15300xy4 – 6 9363600xy2z – 811824120000x2 + 1591812000xy2 – 8930065320000xz + 3183624000x3 - 780300y4 + 62424000x4 – 15606000y2x2 ½ 1/3 – 97920y2x3 + 24y4 x2 – 48y2 x4 + 25468992000x2z + 2387718000y2z + 608868090000z2 + 4161600zx3 + 146880x5 – 3y6. R1 =. 6*. 935 1 2 1 2 x– y x – 28900 3 12 9. 48960x2 - 17166600x + 4590y2 – 18xy2 + 2340900z + 8x3 + 1061208000 +. 3 * 552040401600000z + 15300xy4 - 9363600xy2z - 811824120000x2 + 1591812000xy2 - 8930065320000xz + 3183624000x3 – 780300y4 + 62424000x4 - 15606000y2 x2 - 97920y2 x3 + 24y4x2 - 48y2x4 + 25468992000x2z + 2387718000y2z + 608868090000z2 + ½ 1/3 1 1 +4161600zx3 + 146880x5 - 3y6 + y + x + 170 2 3. G1 = R1 – y. B1 = 3x + y - 2R1. 62.
(63) ¾ Segunda solución (imaginaria). R2 =. 1 12. 48960x2 – 17166600x + 4590y2 – 18xy2 + 2340900z + 8x3 + 1061208000 + 3 552040401600000z + 15300xy4 – 9363600xy2z –. 811824120000x2 +1591812000xy2 – 8930065320000xz + 3183624000x3 - 780300y4 + 62424000x4 – 15606000y2 x2 – 97920y2x3 + 24y4 x2 – 48y2 x4 + ½ 1/3 25468992000x2z + 2387718000y2z + 608868090000z2 + 4161600zx3 + 146880x5 – 3y6. + 3*. 935 1 2 1 2 x– y x – 28900 3 12 9. 48960x2 - 17166600x + 4590y2 – 18xy2 + 2340900z + 8x3 + 1061208000 + 3* 552040401600000z + 15300xy4 - 9363600xy2z - 811824120000x2 + 1591812000xy2 - 8930065320000xz + 3183624000x3 – 780300y4 + 62424000x4 - 15606000y2x2 - 97920y2 x3 + 24y4x2 - 48y2x4 +25468992000x2z + ½ 1/3 ½ 2387718000y2z + 608868090000z2 + 4161600zx3 + 146880x5 - 3y6. +. 1 1 3 1 y + x + 170 + i * 2 3 2 6. 48960x2 – 17166600x + 4590y2 –. 18xy2 + 2340900z + 8x3 + 1061208000 + 3 552040401600000z + 15300xy4 – 9363600xy2z – 811824120000x2 + 1591812000xy2 – 8930065320000xz + 3183624000x3 - 780300y4 + 62424000x4 – 15606000y2x2 – 97920y2x3 + 24y4x2 – 48y2x4 + 25468992000x2z + 2387718000y2z + 608868090000z2 + ½ 1/3 4161600zx3 + 146880x5 – 3y6. +6*. 935 1 2 1 2 x y - x - 28900 3 12 9. 48960x2 - 17166600x + 4590y2 – 18xy2 + 2340900z + 8x3 +. 1061208000 + 3 552040401600000z + 15300xy4 – 9363600xy2z - 811824120000x2 + 1591812000xy2 - 8930065320000xz + 3183624000x3 - 780300y4 + ½ 1/3 62424000x4 - 15606000y2x2 - 97920y2x3 + 24y4x2 - 48y2x4 + 25468992000x2z + 2387718000y2z + 608868090000z2 +4161600zx3 + 146880x5 - 3y6. G2 = R2 – y B2 = 3x + y - 2R2 ;. 63.
(64) ¾ Tercera solución (imaginaria). R3 =. 1 12. 48960x2 – 17166600x + 4590y2 – 18xy2 + 2340900z + 8x3 + 1061208000 + 3 552040401600000z + 15300xy4 – 9363600xy2z –. 811824120000x2 +1591812000xy2 – 8930065320000xz + 3183624000x3 - 780300y4 + 62424000x4 – 15606000y2 x2 – 97920y2x3 + 24y4 x2 – 48y2 x4 + ½ 1/3 25468992000x2z + 2387718000y2z + 608868090000z2 + 4161600zx3 + 146880x5 – 3y6. + 3*. 935 1 2 1 2 x– y x – 28900 3 12 9. 48960x2 - 17166600x + 4590y2 – 18xy2 + 2340900z + 8x3 + 1061208000 + 3* 552040401600000z + 15300xy4 - 9363600xy2z - 811824120000x2 + 1591812000xy2 - 8930065320000xz + 3183624000x3 – 780300y4 + 62424000x4 - 15606000y2x2 - 97920y2 x3 + 24y4x2 - 48y2x4 +25468992000x2z + ½ 1/3 ½ 2387718000y2z + 608868090000z2 + 4161600zx3 + 146880x5 - 3y6. +. 1 1 y + x + 170 2 3. 1 1 i * 2 6. 48960x2 – 17166600x + 4590y2 –. 18xy2 + 2340900z + 8x3 + 1061208000 + 3 552040401600000z + 15300xy4 – 9363600xy2z – 811824120000x2 + 1591812000xy2 – 8930065320000xz + 3183624000x3 - 780300y4 + 62424000x4 – 15606000y2x2 – 97920y2x3 + 24y4x2 – 48y2x4 + 25468992000x2z + 2387718000y2z + 608868090000z2 + ½ 1/3 4161600zx3 + 146880x5 – 3y6. +6*. 935 1 2 1 2 x y - x - 28900 3 12 9. 48960x2 - 17166600x + 4590y2 – 18xy2 + 2340900z + 8x3 +. 1061208000 + 3 552040401600000z + 15300xy4 – 9363600xy2z - 811824120000x2 + 1591812000xy2 - 8930065320000xz + 3183624000x3 - 780300y4 + ½ 1/3 62424000x4 - 15606000y2x2 - 97920y2x3 + 24y4x2 - 48y2x4 + 25468992000x2z + 2387718000y2z + 608868090000z2 +4161600zx3 + 146880x5 - 3y6. G2 = R2 – y B2 = 3x + y - 2R2 ;. 64.
(65) IEM – II – 03 - 07. ANEXO D RUTINAS IMPLEMENTADAS. A continuación se muestra el código de los programas utilizados. Primero se verá el código que corre el programa de estandarización y después se verá el código que involucra las operaciones en Hering.. ¾ CODIGO QUE CORRE LA INTERFAZ A continuación se menciona el nombre de los programas utilizados, junto con una breve explicación del objetivo del programa 1. Interfaz: Programa que administra los diferentes objetos puestos en la interfaz y desde donde se llama el propio programa de estandarización. 2. Estandarización: programa que estandariza la imagen. 3. divbari: programa que divide el espacio de color en tetraedros con respecto al baricentro. 4. division: programa que divide el espacio de color en tetraedros dispuestos en forma de tajadas. 5. principal: programa que contiene el programa que transforma coordenadas cartesianas en coordenadas baricéntricas y encuentra los colores pertenecientes a cada tetraedro. 6. baricéntrica: programa que transforma las coordenadas cartesianas en coordenadas baricéntricas. Este programa corre dentro de principal. 7. exactas: programa que encuentra los colores pertenecientes a cada tetraedro. Este programa corre dentro de principal.. 65.
(66) IEM – II – 03 - 07. 8. maxi: programa que contiene programas que permiten encontrar los colores más cercanos a cada tetraedro. 9. minim: programa que encuentra el color más adecuado a ser el máximo, cuando hay varios máximos candidatos. Este programa corre dentro de maxi. 10. color_cer: programa que permite crear los nuevos tetraedros. 11. baricentrica2: programa que recalcula las coordenadas baricéntricas pero a partir de los nuevos tetraedros. 12. ajustadas2: programa que aplana colores que se salen de los nuevos tetraedros (con respecto al baricentro del nuevo tetraedro). Se podría escoger el programa ajustadas en lugar de este. 13. justas: programa que aplana colores que se salen de los nuevos tetraedros (con respecto al vértice opuesto del lado por el que se salió). En vez de correr este programa, se puede escoger ajustadas_2 14. estandar: programa que calcula coordenadas cartesianas a partir de nuevas coordenadas baricéntricas.. 1. INTERFAZ function varargout = interfaz(varargin) % La primera parte de este programa, es estandar de la guide gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @interfaz_OpeningFcn, ... 'gui_OutputFcn', @interfaz_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin & isstr(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end function interfaz_OpeningFcn(hObject, eventdata, handles, varargin). 66.
(67) IEM – II – 03 - 07. handles.output = hObject; % En esta parte, se pretende hacer una conversion % que permita hacer el desplazamiento del slider minimo=0; maximo=2*pi; paso=15*pi/180; paso_=pi/6; paso_flecha=(paso/(maximo-minimo)); % ajuste del slider_kf paso_barra=(paso_/(maximo-minimo)); set(handles.slider_original,'max',maximo,'min',minimo,'value',minimo,'sliderstep',[paso_flecha paso_barra],'enable','on'); minimo=0; maximo=2*pi; paso=15*pi/180; paso_=pi/6; paso_flecha=(paso/(maximo-minimo)); % ajuste del slider_kf paso_barra=(paso_/(maximo-minimo)); set(handles.slider3,'max',maximo,'min',minimo,'value',minimo,'sliderstep',[paso_flecha paso_barra],'enable','on'); % Instrucciones que permiten correr el programa si no se % seleccionado ninguna division del espacio handles.division=2; handles.numero_tetraedros=6; guidata(hObject, handles); function varargout = interfaz_OutputFcn(hObject, eventdata, handles) varargout{1} = handles.output; % Inicio de la rutina del boton abrir que permite % escoger la imagen del directorio function pushbutton_abrir_Callback(hObject, eventdata, handles) [nombre,ruta,filtro] = uigetfile ('*.*','Abrir Imagen'); nombre_total = strcat(ruta,nombre); imagen=double(imread(nombre_total)); handles.imagen = imagen; axes(handles.eje_imagen_original); imshow(uint8(imagen)); tam = size(imagen); tamano = tam(1) * tam(2); x = reshape(imagen(:,:,1), tamano, 1); % imagen en x para los rojos y = reshape(imagen(:,:,2), tamano, 1); z = reshape(imagen(:,:,3), tamano, 1); % Codigo que permite visualizar la distribucion de color % de la imagen original axes(handles.ejes_puntos_original); % pintar la nube matacho=plot3(x,y,z,'.','markersize',[1],'color','r'); set(get(gca,'XLabel'),'String','Rojo','color','r'); set(get(gca,'YLabel'),'String','Verde','color',[0 .7 0]); set(get(gca,'ZLabel'),'String','Azul','color','b'); grid on; cameraposition=get(gca,'cameraposition') camerapositionmode=get(gca,'camerapositionmode') target=get(gca,'cameratarget'). 67.
(68) IEM – II – 03 - 07. handles.angulo_inicial=angulo; guidata(hObject,handles) function pushbutton_tetraedros_Callback(hObject, eventdata, handles) % Rutina que corre la estandarizacion al oprimirse el % boton estandarizar function pushbutton_estandarizar_Callback(hObject, eventdata, handles) [imagen_estandarizada,imagen_original, estandarizadas] = estandarizacion(handles.imagen,handles.division,handles.numero_tetraedros); axes(handles.eje_imagen_estandar); imshow(uint8(imagen_estandarizada)); tam = size(imagen_estandarizada); tamano = tam(1) * tam(2); x = reshape(imagen_estandarizada(:,:,1), tamano, 1); % imagen en x para los rojos y = reshape(imagen_estandarizada(:,:,2), tamano, 1); z = reshape(imagen_estandarizada(:,:,3), tamano, 1); % Codigo que permite visualizar la distribucion de color % de la imagen estandarizada axes(handles.eje_puntos_estandar); % pintar la nube matacho_2=plot3(x,y,z,'.','markersize',[1],'color','r'); set(get(gca,'XLabel'),'String','Rojo','color','r'); set(get(gca,'YLabel'),'String','Verde','color',[0 .7 0]); set(get(gca,'ZLabel'),'String','Azul','color','b'); grid on; cameraposition=get(gca,'cameraposition') camerapositionmode=get(gca,'camerapositionmode') target=get(gca,'cameratarget') targetmode=get(gca,'cameratargetmode') viewangle=get(gca,'cameraviewangle') viewanglemode=get(gca,'cameraviewanglemode') handles.posicion_camara_2=get(handles.eje_puntos_estandar,'cameraposition'); handles.posicion_camara_modo_2=get(handles.eje_puntos_estandar,'camerapositionmode'); handles.posicion_camara_target_2=get(handles.eje_puntos_estandar,'cameratarget'); handles.posicion_camara_target_mode_2=get(handles.eje_puntos_estandar,'cameratargetmode'); handles.angulo_camara_2=get(handles.eje_puntos_estandar,'cameraviewangle'); handles.angulo_camara_mode_2=get(handles.eje_puntos_estandar,'cameraviewanglemode'); handles.x_inicial_2=handles.posicion_camara_2(1,1)+ handles.posicion_camara_target_2(1,1); handles.y_inicial_2=handles.posicion_camara_2(1,2)+ handles.posicion_camara_target_2(1,2); handles.z_2=handles.posicion_camara_2(1,3); handles.x_centro_2=handles.posicion_camara_target_2(1,1); handles.y_centro_2=handles.posicion_camara_target_2(1,2); handles.z_centro_2=handles.posicion_camara_target_2(1,3); x_2=handles.x_inicial_2-handles.x_centro_2; y_2=handles.y_inicial_2-handles.y_centro_2; [angulo_2 radio_2]=cart2pol(x_2,y_2); handles.angulo_inicial_2=angulo_2; guidata(hObject,handles) function slider_original_CreateFcn(hObject, eventdata, handles) usewhitebg = 1; if usewhitebg set(hObject,'BackgroundColor',[.9 .9 .9]); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end % Codigo que permite manejar el slider para rotar % la vista de la distribucion de color de la imagen original function slider_original_Callback(hObject, eventdata, handles) x_=handles.x_inicial-handles.x_centro; y_=handles.y_inicial-handles.y_centro; [angulo radio]=cart2pol(x_,y_); delta=get(handles.slider_original,'value'); angulo=angulo+delta; [x y]=pol2cart(angulo,radio); x=x+handles.x_centro; y=y+handles.y_centro; set(handles.ejes_puntos_original,'camerapositionmode','manual','cameraposition',[x y handles.z],'cameratargetmode','manual','cameratarget',[handles.x_centro handles.y_centro handles.z_centro]... ,'cameraviewanglemode','manual','cameraviewangle',handles.angulo_camara,'xlim',[0 350],'ylim',[0 350], 'zlim',[0 350],... 'xcolor','r','ycolor',[0 .7 0],'zcolor','b','fontsize',[7],'xtickmode','manual','xtick',[0 50 100 150 200 250 300 350].... 68.
(69) IEM – II – 03 - 07. ,'ytickmode','manual','ytick',[0 50 100 150 200 250 300 350],'ztickmode','manual','ztick',[0 50 100 150 200 250 300 350]); function slider3_CreateFcn(hObject, eventdata, handles) usewhitebg = 1; if usewhitebg set(hObject,'BackgroundColor',[.9 .9 .9]); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end % Codigo que permite manejar el slider para rotar % la vista de la distribucion de color de la imagen original function slider3_Callback(hObject, eventdata, handles) x_2=handles.x_inicial_2-handles.x_centro_2; y_2=handles.y_inicial_2-handles.y_centro_2; [angulo_2 radio_2]=cart2pol(x_2,y_2); delta_2=get(handles.slider3,'value'); angulo_2=angulo_2+delta_2; [x y]=pol2cart(angulo_2,radio_2); x=x+handles.x_centro_2; y=y+handles.y_centro_2; set(handles.eje_puntos_estandar,'camerapositionmode','manual','cameraposition',[x y handles.z],'cameratargetmode','manual','cameratarget',[handles.x_centro_2 handles.y_centro_2 handles.z_centro_2]... ,'cameraviewanglemode','manual','cameraviewangle',handles.angulo_camara_2,'xlim',[0 350],'ylim',[0 350], 'zlim',[0 350],... 'xcolor','r','ycolor',[0 .7 0],'zcolor','b','fontsize',[7],'xtickmode','manual','xtick',[0 50 100 150 200 250 300 350]... ,'ytickmode','manual','ytick',[0 50 100 150 200 250 300 350],'ztickmode','manual','ztick',[0 50 100 150 200 250 300 350]); % Codigo que permite validar variables cuando se desea % estandarizar con respecto al baricentro function radio_baricentras_Callback(hObject, eventdata, handles) valor=get(handles.radio_baricentras,'value'); if valor==1 set(handles.radio_tajadas,'value',0); set(handles.popupmenu_numero_tetraedros,'value',3) set(handles.popupmenu_numero_tetraedros,'enable','off') handles.numero_tetraedros=24; else set(handles.radio_baricentras,'value',1); end handles.division=1; guidata(hObject,handles) % Codigo que permite validar variables cuando se desea % estandarizar con respecto al baricentro function radio_tajadas_Callback(hObject, eventdata, handles) valor=get(handles.radio_tajadas,'value'); if valor==1 set(handles.radio_baricentras,'value',0); set(handles.popupmenu_numero_tetraedros,'enable','on') else set(handles.radio_tajadas,'value',1); end handles.division=2; guidata(hObject,handles) function listbox2_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end function listbox2_Callback(hObject, eventdata, handles) % Codigo que permite validar variables cuando se escoge % el numero de tetraedros function popupmenu_numero_tetraedros_CreateFcn(hObject, eventdata, handles) if ispc set(hObject,'BackgroundColor','white'); else set(hObject,'BackgroundColor',get(0,'defaultUicontrolBackgroundColor')); end valor=get(handles.popupmenu_numero_tetraedros,'value'); switch valor. 69.
(70) IEM – II – 03 - 07. case 1 handles.numero_tetraedros=6; case 2 handles.numero_tetraedros=12; case 3 handles.numero_tetraedros=24; end guidata(hObject,handles). 2. ESTANDARIZACION function [imagen_nueva, imagen_h, estandarizadas] = estandarizacion(imagen,divi,numero); tam = size(imagen); %Encuentra tamaño de imagen if divi == 1 tetraedros = divbari(24); numero = 24; elseif (divi == 2)|(divi == 3) tetraedros = division(numero); end %% ************** t r a n s f o r m a c i o n d e n*m*3 a 3*nm % Esto facilita la transformacion a Hering, pues convierto la % imagen original de 3 matrices en una matriz de 3 filas rojo = reshape(imagen(:,:,1),1,tam(1)*tam(2)); verde = reshape(imagen(:,:,2),1,tam(1)*tam(2)); azul = reshape(imagen(:,:,3),1,tam(1)*tam(2)); I(1,:) = rojo; I(2,:) = verde; I(3,:) = azul; imagen_h = I; %% *************** c a l c u l o d e b a r i c e n t r i c a s ********************** dim = tam(1)*tam(2); nueva = zeros(5,dim) - 100; for h = 1:1:numero [nueva] = principal(imagen_h, tetraedros(:,:,h), nueva, dim, h); end %% ************** b u s q u e d a d e l c o l o r m a s c e r c a n o ********************** no = 0; m = 1; % inicia cantidad de tetraedros que no tienen puntos adentro var = 0; n = 1; % iniciliza variable para tetraedros con menos de 4 colores adentro for h = 1:1:numero if h == 4 tttt = 1; end tempo = find(nueva(5,:) == h); prov = size(tempo); if isempty(tempo) == 0 if prov(2) > 4 [provisional] = maxi(nueva,h); if h == 1 cercano = provisional; else cercano = cat(3,cercano,provisional); end else no_est(n) = h; n = n+1; provisional = zeros(5,4); if h == 1 cercano = [0 0 0 0;0 0 0 0;0 0 0 0; 0 0 0 0;0 0 0 0]; else cercano = cat(3,cercano, provisional); end no = 1;. 70.
(71) IEM – II – 03 - 07. end else prohibido(m) = h; m = m+1; var = 1; provisional = [0 0 0 0;0 0 0 0;0 0 0 0; 0 0 0 0;0 0 0 0]; cercano = cat(3,cercano, provisional); end end if var == 0 prohibido = numero +1; end if no == 0 no_est = numero + 1; end %% ***************** c r e a c i o n d e n u e v o s t e t r a e d r o s ********************** kk =1; for h = 1:1:numero if (h ~= prohibido) & (h ~= no_est(kk)) tetraedrosn = color_cer(cercano(:,:,h),tetraedros(:,:,h)); if h == 1 tetra_new = tetraedrosn; else tetra_new = cat(3, tetra_new, tetraedrosn); end elseif h == no_est(kk) if kk < (n-1) kk = kk+1; end if h == 1 tetra_new = [0 0 0 0;0 0 0 0;0 0 0 0;0 0 0 0]; else tetra_new1 = [0 0 0 0;0 0 0 0;0 0 0 0;0 0 0 0]; tetra_new = cat(3, tetra_new, tetra_new1); end else tetra_new1 = [0 0 0 0;0 0 0 0;0 0 0 0;0 0 0 0]; tetra_new = cat(3, tetra_new, tetra_new1); end end %% ****************** c a l c u l o d e n u e v a s b a r i c e n t r i c a s ******************* imagen_h1 = ones(4,dim); imagen_h1(1:3,:) = imagen_h; Nueva = zeros(5,dim); kk = 1; for h = 1:1:numero if (h ~= prohibido) & (h ~= no_est(kk)) Nueva = baricentrica2(nueva, h, tetra_new(:,:,h), imagen_h1,Nueva); elseif h == no_est(kk) y = find(nueva(5,:) == h); Nueva(:,y) = nueva(:,y); if kk < (n-1) kk = kk+1; end end end Nueva_new = ajustadas_2(Nueva, tetra_new, numero); %% ****** C a l c u l o d e c o o r d e n a d a s c a r t e s i a n a s e s t a n d a r i z a d a s ****** estandarizadas = zeros(4,dim); estandarizadas = estandar(Nueva_new, tetraedros, numero, imagen_h, prohibido, no_est,estandarizadas); % %**************************** R e c o n s t r u c c i o n d e l a i m a g e n *************************** imagen_nueva = zeros(tam(1),tam(2),3); imagen_nueva(:,:,1) = reshape(estandarizadas(1,:),tam(1),tam(2)); imagen_nueva(:,:,2) = reshape(estandarizadas(2,:),tam(1),tam(2)); imagen_nueva(:,:,3) = reshape(estandarizadas(3,:),tam(1),tam(2)); Imagenueva = uint8(imagen_nueva);. 71.
(72) IEM – II – 03 - 07. 3. DIVBARI function [tetraedros] = divbari(numero) % Asignacion de vertices R = [255; 0; 0; ;1]; G = [0; 255; 0;1]; B = [0; 0; 255;1]; Y = [255; 255; 0;1]; CY = [0; 255; 255;1]; P = [255; 0; 255;1]; W = [255; 255; 255;1]; BK = [0; 0; 0;1]; P1 = [ W P R BK ] ; P2 = [ W P B BK ] ; P3 = [ W CY B BK] ; P4 = [ W CY G BK] ; P5 = [ W Y G BK] ; P6 = [ W Y R BK] ; vertice = cat(3,P1,P2,P3,P4,P5,P6); % Asignacion de tetraedros coordenada = [0.25 ;0.25;0.25;0.25]; for h =1:1:6 baricentro(:,h) = vertice(:,:,h) * coordenada; if h == 1 tetra11 = [W P R baricentro(:,h) ]; tetra12 = [W P baricentro(:,h) BK] ; tetra13 = [W baricentro(:,h) R BK]; tetra14 = [baricentro(:,h) P R BK]; elseif h == 2 tetra21 = [ W P B baricentro(:,h)]; tetra22 = [W P baricentro(:,h) BK]; tetra23 = [W baricentro(:,h) B BK]; tetra24 = [ baricentro(:,h) P B BK]; elseif h == 3 tetra31 = [ W CY B baricentro(:,h)]; tetra32 = [ W CY baricentro(:,h) BK]; tetra33 = [W baricentro(:,h) B BK]; tetra34 = [baricentro(:,h) CY B BK]; elseif h == 4 tetra41 = [ W CY G baricentro(:,h)]; tetra42 = [ W CY baricentro(:,h) BK]; tetra43 = [W baricentro(:,h) G BK]; tetra44 = [ baricentro(:,h) CY G BK]; elseif h == 5 tetra51 = [W Y G baricentro(:,h)]; tetra52 = [ W Y baricentro(:,h) BK]; tetra53 = [W baricentro(:,h) G BK]; tetra54 = [ baricentro(:,h) Y G BK]; elseif h == 6 tetra61 = [ W Y R baricentro(:,h)]; tetra62 = [W Y baricentro(:,h) BK]; tetra63 = [W baricentro(:,h) R BK]; tetra64 = [ baricentro(:,h) Y R BK]; end end tetraedros = cat(3,tetra11,tetra12,tetra13,tetra14,... tetra21,tetra22,tetra23,tetra24,... tetra31,tetra32,tetra33,tetra34,... tetra41,tetra42,tetra43,tetra44,... tetra51,tetra52,tetra53,tetra54,... tetra61,tetra62,tetra63,tetra64);. 72.
(73) IEM – II – 03 - 07. 4. DIVISION function [vertice] = division(numero) col = numero/6 - 1; % Cantidad de particiones en b t = zeros(3,col+2,6); k=1:1:col; paso(k) = 1/(col+1):1/(col+1):1-1/(col+1); %Paso de particion % Asignacion de vertices R = [1; 0; 0]; G = [0; 1; 0]; B = [0; 0; 1]; Y = [1; 1; 0]; CY = [0; 1; 1]; P = [1; 0; 1]; W = [1; 1; 1]; BK = [0; 0; 0]; if numero == 6 P1 = [ W P R BK ] * 255; P2 = [ W P B BK ] * 255; P3 = [ W CY B BK] * 255; P4 = [ W CY G BK] * 255; P5 = [ W Y G BK] * 255; P6 = [ W Y R BK] * 255; vertice = cat(3,P1,P2,P3,P4,P5,P6); vertice(4,:,:)=1; else t(1,:,1) = 1; t(3,2:(end-1),1) = paso; t(1:3,1,1) = R; t(1:3,end,1) = P; t(1,2:(end-1),2) = paso; t(3,2:(end-1),2) = 1; t(1:3,1,2) = B; t(1:3,end,2) = P; t(2,2:(end-1),3) = paso; t(3,2:(end-1),3) = 1; t(1:3,1,3) = CY; t(1:3,end,3) = B; t(3,2:(end-1),4) = paso; t(2,2:(end-1),4) = 1; t(1:3,1,4) = G; t(1:3,end,4) = CY; t(1,2:(end-1),5) = paso; t(2,2:(end-1),5) = 1; t(1:3,1,5) = G; t(1:3,end,5) = Y; t(2,2:(end-1),6) = paso; t(1,2:(end-1),6) = 1; t(1:3,1,6) = R; t(1:3,end,6) = Y; %Pinta division de primer tetra s=2; for k=1:4:4*(col+1) X(1,k:(k+3),1) = [t(1,s,1) t(1,s-1,1) W(1) BK(1)]; temp = [t(1,s,1) t(1,s-1,1) W(1) BK(1)]; X(2,k:(k+3),1) = [temp(2) temp(3) temp(4) temp(1)]; X(3,k:(k+3),1) = [temp(3) temp(4) temp(1) temp(2)]; Y(1,k:(k+3),1) = [t(2,s,1) t(2,s-1,1) W(2) BK(2)]; temp = [t(2,s,1) t(2,s-1,1) W(2) BK(2)]; Y(2,k:(k+3),1) = [temp(2) temp(3) temp(4) temp(1)]; Y(3,k:(k+3),1) = [temp(3) temp(4) temp(1) temp(2)]; Z(1,k:(k+3),1) = [t(3,s,1) t(3,s-1,1) W(3) BK(3)]; temp = [t(3,s,1) t(3,s-1,1) W(3) BK(3)]; Z(2,k:(k+3),1) = [temp(2) temp(3) temp(4) temp(1)]; Z(3,k:(k+3),1) = [temp(3) temp(4) temp(1) temp(2)]; s=s+1;. 73.
Documento similar