Transformar una imagen en el dominio PC

| Última modificación: 16 de abril de 2024 | Tiempo de Lectura: 3 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

Podemos transformar una imagen en el dominio PC, es decir, en sus componentes principales, multiplicando por la matriz de autovectores el vector imagen estandarizado.

En otros artículos, hemos trabajado con el ejercicio de un algoritmo de reconocimiento facial. Este algoritmo lo que hace es determinar, entre un número de imágenes de rostros dado, si cada una de dichas imágenes equivale o se parece al rostro de George Bush.

En este post lo que haremos será transformar una imagen en el dominio PC. Esta imagen la sacaremos del dataset que hemos usado previamente.

Transformar una imagen en el dominio PC

Dada una imagen convertida en un vector A_I:

Ai = [0.1 0.6 0.5 … 0.1][1×62500]

Calculamos su valor estandarizado:

A’ij = Aij – μj

—————

σj

Donde:

μj = ∑ni Aij

————–

n

σ2j = ∑ni (Aij – μj)2

————————-

n

Después, calculamos la matriz de componentes principales multiplicando A’x V:

APC = A’947×62500 x V62500×947 E R947×947

Lo que tenemos es una imagen que no es más que una fila de la matriz enorme de datos. Las dimensiones de dicha fila serán [1, 62500].

Tenemos que calcular el valor estandarizado de esa imagen, es decir, cogemos la variable i y le vamos restando a cada una de las columnas la columna estandarizada.

Hemos hecho la media de todas las columnas y la hemos ido restando y dividido por la desviación típica. Esta media (μj) y esta desviación típica (σj) se han calculado previamente, cuando hemos hecho el prcomp.

Cuando hemos estandarizado, hemos calculado la media y la desviación típica de cada una de las columnas de la matriz. Tenemos tantos valores de medias y de desviaciones típicas como columnas en la matriz original (62500).

Entonces, llega una nueva fila y le restamos las 62500 medias y lo dividimos entre las 62500 desviaciones típicas.

Con esto ya tenemos lo que se conoce como A’ o A prima (A’947×62500). Entonces, lo que hacemos es multiplicar una (o las 947) imágenes por la matriz de rotación, que eran las 62500 filas y los 947 componentes principales o principal components.

Si hubiera multiplicado por una imagen solamente, el resultado habría sido 1. Es decir:

APC = A’1x62500 x V62500×947 E R1x947

Al final, tendríamos una matriz de 62500 columnas y lo habríamos convertido en una matriz de 947.

Aquí, aunque parezca que estamos perdiendo información, no es así, ya que lo único que se está haciendo es comprimir la imagen. ¿Dónde está, entonces, la información que no estamos viendo? Esa información está en la matriz de rotación. La matriz nos permitiría volver de la imagen de 1×947 a la imagen de 62500, de modo que aquí es donde están los bytes que faltan.

#Transformar una imagen en el dominio PC
#Matriz de componentes principales
#Aquí ya tenemos la matriz rotada, transformada.
dim (pr_pics$x)

947 . 947

#Transformar una imagen en el dominio PC
#pr _pics$x [sample (1 : nrow (pr_pics$x), 5), 1 : 10]
pr_pics$x [1, 1 : 10)

PC1: -132.943288020512

PC2: -31.829259383351

PC3: 6.72238117329166

PC4: -13.3202983486985

PC5: 24.8530767111664

PC6: -6.17153410300145

PC7: 29.0456482094383

PC8:4.67912965259196

PC9: -25.696470460962

PC10: 13.0814995573908

#Transformar una imagen en el dominio PC
length (pr_pics$center)

62500

A continuación, podemos ver el contenido. De la primera imagen tenemos los diez primeros componentes principales transformados.

¿Qué pasaría si quisiéramos multiplicar una imagen?

#Transformar una imagen en el dominio PC
pic_pca <- (matrix ((train_matrix [1, ] -pr_pics$center) / pr_pics$scale, nrow = 1) %*% pr_pics$rotation)
pic_pca [1 : 10]
dim (pic_pca)

-132.943288020512 . -31.89259383351 . 6.72238117329167 . -13.3202983486986 . 24.8530767111664 . -6.17153410300145 . 29.0456482094383 . 4.67912965259195 . -25.696470460962 . 13.0814995573908

1 . 947

#Transformar una imagen en el dominio PC
predict (pr pics, newdata train_matrix[1:2, 1) [1:2,1:10]
PC1PC2PC3PC4PC5PC6PC7PC8PC9PC10
bush132.9433-31.829266.722381-13.320324.85308-6.17153429.045654.67913-25.69647013.08150
bush-120.4599-350352227.203425-119.666549.8600182.34068943.5172625.609831.917737-12.19057

¿Quieres seguir aprendiendo sobre data mining?

Si quieres seguir aprendiendo, en nuestro Big Data, Inteligencia Artificial & Machine Learning Full Stack Bootcamp tienes la solución. Podrás seguir instruyéndote sobre todas aquellas temáticas de tu interés en el mundo del Big Data, la inteligencia artificial y mucho más. Se trata de una formación intensiva en la que adquirirás todos los conocimientos necesarios para incursionar en el mercado laboral de manera rápida y con mejores oportunidades. ¡Anímate y solicita más información!

Sandra Navarro

Business Intelligence & Big Data Advisor & Coordinadora del Bootcamp en Data Science, Big Data & Machine Learning.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Big Data, IA & Machine Learning

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado