Procesamiento de imágenes II
Alejandra Acevedo, Sindi Rodríguez, Santiago Moreno
Universidad de san Buenaventura, Bogotá D.C, Colombia.
amacevedog@[Link]
scrodriguezc@[Link]
smorenoe@[Link]
I. Introducción. imágenes es factible emplear sistemas de
ecuaciones lineales o no lineales. Dado que
En esta segunda entrega de nuestro proyecto
las imágenes pueden ser representadas como
dedicado al procesamiento de imágenes en
matrices, surge la pregunta sobre cómo estas
métodos numéricos en Python, nos
matrices pueden estar relacionadas con
adentramos en un aspecto crucial del análisis
sistemas de ecuaciones y cómo podemos
y la manipulación de imágenes: la
aprovechar esto en nuestro análisis y
interpolación lineal. La interpolación
manipulación de imágenes. Para ilustrar estos
desempeña un papel fundamental en el
conceptos teóricos en acción, presentaremos
procesamiento de imágenes al permitirnos
un ejemplo concreto de cómo aplicaremos la
ajustar el tamaño y la resolución de una
interpolación a nuestra imagen seleccionada
imagen de manera precisa y efectiva, también
utilizando uno de los métodos que hemos
haciendo uso del método Spines Cubico se
investigado en nuestro marco teórico.
logró realizar la interpolación lineal
generando 75 ecuaciones donde nuestra A través de este ejemplo, esperamos
misión es que en el código de Python se demostrar la relevancia y la eficacia de las
muestre la grafica del contorno de nuestra técnicas de interpolación en el contexto del
imagen y que se entienda la figura que procesamiento de imágenes y para la ilustrar
escogimos de la imagen general en este caso los conceptos teóricos presentaremos también
un cachorro. el ejemplo de cómo utilizamos alguna
resolución del procesamiento de imágenes
En esta etapa de nuestro proyecto, nos
con sistemas de ecuaciones.
centraremos en explorar diferentes técnicas
de soluciones de sistemas de ecuaciones Marco teórico.
lineales o no lineales aplicadas al
Interpolación Lineal:
procesamiento de imágenes y observarlo en
nuestra imagen específica que hemos La interpolación lineal es un método para
seleccionado cuidadosamente. Antes de estimar valores intermedios dentro de un
sumergirnos en la implementación práctica, rango de datos conocidos. En el contexto del
es fundamental comprender el marco teórico procesamiento de imágenes, la interpolación
que sustenta estos métodos de sistemas de lineal se utiliza para aumentar o disminuir el
ecuaciones. Por lo tanto, dedicaremos una tamaño de una imagen de manera
parte de nuestra investigación a explorar los proporcional, rellenando los nuevos píxeles
fundamentos matemáticos y algoritmos detrás con valores calculados a partir de los píxeles
de la interpolación de imágenes. Además, vecinos en la imagen original.
como parte de nuestra investigación, nos
preguntaremos si en el procesamiento de
permite que muchas operaciones de
procesamiento de imágenes se expresen como
operaciones matriciales.
Un sistema de ecuaciones lineales se puede
representar de forma matricial mediante la
multiplicación de matrices. Por ejemplo,
consideremos un sistema de ecuaciones
lineales:
Ax=bAx=b
Figura 1
(Interpolación lineal de un Spline cubico para Donde AA es una matriz de coeficientes, XX
12 polinomios de un delfín) es un vector de incógnitas y bb es un vector
de términos independientes. En el contexto
El proceso de interpolación lineal implica la
del procesamiento de imágenes, AA podría
estimación de nuevos valores basados en una
representar una transformación lineal que se
línea recta que conecta dos puntos conocidos.
aplica a la imagen, XX sería la imagen
En el caso de las imágenes, estos puntos Se
ubican para realizar las ecuaciones y poder original expresada como un vector, y bb sería
mostrar las líneas de las ecuaciones juntas la imagen transformada.
para mostrar el contorno de la imagen en el La solución de un sistema de ecuaciones
código. lineales involucra encontrar el vector XX que
Splines Cúbicos: satisface la ecuación. En términos de
procesamiento de imágenes, esto implica
Los splines cúbicos son una técnica de encontrar la transformación que mejor se
interpolación ampliamente utilizada en el ajusta a la imagen original para lograr el
procesamiento de imágenes debido a su efecto deseado, como la interpolación o la
capacidad para generar superficies suaves y corrección de distorsiones.
continuas a partir de un conjunto de puntos de
control. En la interpolación de imágenes, los
splines cúbicos se aplican para estimar los
valores de los píxeles intermedios basados en
una región vecina de píxeles conocidos.
En nuestro proyecto, hemos seleccionado una
imagen adorable de un cachorro como
nuestro objeto de estudio. Utilizaremos Figura 1.1
splines cúbicos para realizar la interpolación
lineal de esta imagen. El objetivo es crear la Transformaciones Lineales:
imagen en la interpolación, que podamos En el procesamiento de imágenes, las
reconocer el cachorro en el código de Python. transformaciones lineales se utilizan para
Sistemas de Ecuaciones Lineales y Matrices: aplicar operaciones como rotaciones,
escalados y sesgados a las imágenes. Estas
En el procesamiento de imágenes, las transformaciones se pueden representar
imágenes se pueden representar de manera mediante matrices de transformación y se
conveniente mediante matrices, donde cada aplican multiplicando la matriz de la imagen
elemento de la matriz representa la intensidad original por la matriz de transformación.
de un píxel en una posición específica. Esto
Convolución: estimar valores intermedios dentro de la
matriz basados en los valores conocidos en
La convolución es una operación fundamental
puntos discretos.
en el procesamiento de imágenes que se
utiliza para aplicar filtros y efectos a una En la imagen podemos observar como una
imagen. En el contexto matricial, la parte de la imagen son pixeles de color
convolución se representa mediante una asociados a la figura 1.1. A detalle en una
operación de multiplicación de matrices entre matriz a código se podría modificar el sistema
la matriz de la imagen y un kernel de de ecuaciones ya se para dañar la imagen o
convolución. arreglarla.
Descomposición de Matrices:
Métodos como la descomposición en valores
singulares (SVD) o la descomposición de
Cholesky son comunes en el procesamiento
de imágenes para resolver problemas de
optimización o para realizar ciertas
operaciones sobre las matrices de las
imágenes.
Regularización: Figura 1.2
En el contexto de la solución de sistemas de
ecuaciones lineales, la regularización se
utiliza para evitar problemas de sobreajuste o
inestabilidad numérica. Métodos como la
regularización de Tikhonov o la
regularización de Ridge se aplican para
encontrar soluciones estables y bien
condicionadas.
Figura 1.3
Inversión de Matrices:
II. Interpolación lineal de imagen.
En algunos casos, es necesario invertir
matrices para resolver sistemas de ecuaciones En el proceso de interpolación lineal de
lineales. Sin embargo, la inversión directa de nuestra imagen, seleccionamos una imagen
matrices puede ser costosa de un cachorro como objeto de estudio.
computacionalmente y puede conducir a Utilizamos el software Geogebra para
problemas de estabilidad numérica. Por lo adquirir puntos y funciones que representaran
tanto, se utilizan métodos alternativos como la forma deseada de la imagen.
la descomposición LU o la factorización QR. Posteriormente, incorporamos estos datos al
código de Python que ya teníamos, el cual
Interpolación de Matrices:
originalmente estaba diseñado para
Además de la interpolación lineal en implementar splines cúbicos. El propósito de
imágenes, también se puede aplicar la esta integración era generar una
interpolación a matrices que representan representación gráfica de la imagen,
datos asociados con las imágenes, como incluyendo tanto su contorno como la
mapas de profundidad o mapas de textura. La interpolación de los puntos en una gráfica.
interpolación de matrices se utiliza para
El proceso nos condujo a la generación de un 2. Precisión en la Interpolación: La
total de 75 ecuaciones, lo que corresponde a utilización de múltiples funciones de
un número considerable de puntos. Sin interpolación para generar el contorno del
embargo, este enfoque nos permitió alcanzar cachorro sugiere un alto nivel de precisión en
el objetivo de visualizar la interpolación de la la interpolación. La capacidad para capturar
imagen, resaltando su contorno. La intención los detalles y la forma general del cachorro
era que cualquier observador de la mediante esta técnica refleja una
interpolación pudiera identificar claramente aproximación efectiva y detallada del objeto
la representación como la de un cachorro. original.
[Link] en las funciones de
Interpolación: La variación de colores en las
líneas que conforman el contorno indica la
diversidad de las funciones de interpolación
utilizadas. Esta diversidad puede derivarse de
la naturaleza compleja y variada del contorno
del cachorro, así como de la necesidad de
adaptarse a diferentes características y
detalles de la imagen original.
[Link] Visual: A pesar de la diversidad
Figura 2
de funciones de interpolación utilizadas, la
(Interpolación lineal de un Spline cubico para
representación visual del contorno mantiene
75 polinomios de un cachorro)
una coherencia general y una apariencia
[Link] unificada. Esta coherencia sugiere que las
1iHffMBtQ_n9oglYVJgHSCXibrKp9h-a9? funciones de interpolación están
usp=sharing correctamente alineadas y coordinadas para
formar una representación consiguiente del
Link de Colab 1.2 contorno del cachorro.
[Link] Interpretativo: La capacidad para
III. Análisis de resultados. observar y analizar individualmente cada
línea de contorno proporciona un valor
El resultado de la interpolación, donde se interpretativo significativo. Los
puede observar el contorno del cachorro con investigadores y observadores pueden
líneas de diferentes colores representando las examinar detenidamente cómo cada función
distintas funciones que conforman dicho de interpolación contribuye a la formación
contorno, ofrece varios análisis: del contorno y cómo estas funciones se
ajustan a diferentes aspectos del cachorro.
1. Claridad en la Representación del
Contorno: La visualización del contorno del En resumen, el análisis del resultado de la
cachorro mediante líneas de diferentes interpolación, donde se observa el contorno
colores que son las ecuaciones una por una del cachorro revela una representación visual
proporciona una representación visual clara y precisa, detallada y coherente del objeto
distintiva de la forma del cachorro. Cada original. Esta representación ofrece un buen
línea de color destaca una función de desarrollo sobre el proceso de interpolación y
interpolación específica, lo que facilita la la estructura del contorno del cachorro.
identificación y comprensión de la estructura
del contorno.
IV. Como aplicaríamos en nuestro
proyecto el sistema matricial.
Primero en general as imágenes se
codifican como matrices. En particular,
las imágenes de intensidad o escala de
grises se codifican como una matriz de
dos dimensiones, donde cada número
representa la intensidad de un píxel. Pero
eso significa que cualquiera de estas
matrices que se generan se puede
visualizar como una matriz. Para
visualizar imágenes, usamos el módulo
pyplot de la librería matplotlib.
import [Link] as plt
La función que nos permite visualizar Figura 1.6
matrices es imshow del módulo pyplot,
que invocaremos como [Link], y Un ejemplo para ajustar canales con
recibe la imagen como parámetro. Debido matrices está en esta imagen. Consiste en
a que pyplot intenta ajustar los colores manipular la intensidad de únicamente un
automáticamente de una imagen, se canal a la vez, ya sea rojo, verde o azul
procede a pasarle como parámetros independientemente.
también vmin=0 , vmax=1. Estos se
llaman parámetros por palabra clave de
python.
También podemos cargar imágenes a
color con imread.
lena_rgb=[Link]("[Link]")/
255.0 # imread lee las imagenes
con los pixeles codificados como
enteros
# en el rango 0-255. Por eso la
convertimos a flotante y en el
rango 0-1 Figura 1.7
[Link](lena_rgba) # no es
necesario el vmin/vmax para Para el ejemplo de nuestra imagen
imágenes a color podemos realizar un breve cambio a la
imagen mostrando el código como a
print("Dimensiones de la
imagen:") continuación:
print(lena_rgba.shape)
fig = [Link](imagen,
color_continuous_scale='gray')
[Link]()
fig = [Link](imagen_mat_2,
color_continuous_scale='gray')
[Link]()
# Output
# Practicamente la misma imagen
que en el primer imshow solo que
en B/N
#Jugamos un poco con la matriz
en que convertimos nuestra
imagen y luego la graficamos
nuevamente.
imagen_mat_2 = imagen_mat / 10
print(imagen_mat_2)
fig = [Link](imagen_mat_2)
[Link]()
Figura 1.8
(Imagen original)
#Ahora a grises
import numpy as np fig = [Link](imagen_mat_2,
import [Link] as px color_continuous_scale='gray')
from PIL import Image [Link]()
from [Link] import drive
Código Python 1.1
#Cargamos y convertimos la
imagen [Link]
imagen = 1_MGw_dtCSTLi2EHUMbHrl6qu-lDhB0Il?
[Link]('/content/drive/MyDri usp=sharing
ve/[Link]')
fig = [Link](imagen) Link de Colab 1.1
[Link]()
#Conventimos la imagen a una
matriz
imagen_mat =
[Link](list([Link](ban
d=0)), float)
print(imagen_mat)
imagen_mat.shape =
([Link][1], [Link][0])
print(imagen_mat)
print(imagen_mat.shape)
#Visualizamos la matriz
utilizando Plotly
Figura 1.10
(Imagen alterada a B/N)
Figura 1.9
(Imagen cargada en Python) [[21. 21. 20.9 ... 2.9 2.8
2.7]
[20.9 20.9 20.8 ... 2.8 2.7
2.7]
[210. 210. 209. ... 5. 4. [20.7 20.7 20.6 ... 2.8 2.7
4.] 2.7]
[[210. 210. 209. ... 29. 28. ...
27.] [17.9 17.5 17. ... 0.6 0.4
[209. 209. 208. ... 28. 27. 0.4]
27.] [17. 17.1 17. ... 0.6 0.4
[207. 207. 206. ... 28. 27. 0.4]
27.] [15.6 16.4 17.2 ... 0.5 0.4
... 0.4]]
[179. 175. 170. ... 6. 4.
4.] Imagen alterada B/N en forma de matriz 1.2
[170. 171. 170. ... 6. 4.
4.]
[156. 164. 172. ... 5. 4.
4.]]
(1600, 1200)
Imagen original en forma de matriz 1.1
Figura 1.11 Figura 1.12
(Imagen alterada en Python con escala a (Imagen alterada en Python con escala a
color) grises)
Aquí se muestra en la escala de colores
que maneje por defecto la librería, en
V. Conclusión.
matplotlib mostrara otra escala de
colores. Ahora convertimos una imagen en una
matriz utilizando Python, Numpy y
Plotly. Con esta investigación podremos
explorar aún más la representación de
imágenes en la computadora y
experimentar con diferentes técnicas de
procesamiento de imágenes. Además, se
logró apreciar una que otra propiedad
interesante que tienen las matrices que
contienen nuestras imágenes.
VI. Conclusiones generales
En esta segunda parte del proyecto de
procesamiento de imágenes utilizando
Python hemos explorado diversas interpolación y la conversión de espacios
técnicas y herramientas para manipular de color con matrices resolviendo un
imágenes de manera eficaz y comprender sistema de ecuación matricial. Estas
mejor su estructura interna. Desde la habilidades y conocimientos son
carga inicial de la imagen hasta la fundamentales en una amplia gama de
visualización y manipulación de la matriz aplicaciones, desde la visión por
de píxeles, hemos recorrido un camino computadora hasta el análisis de
que nos ha permitido adentrarnos en los imágenes médicas, y nos brindan una
aspectos fundamentales del base sólida para futuras exploraciones y
procesamiento de imágenes. proyectos en este campo de ingeniería
multimedia.
Comenzamos por familiarizarnos con la
carga de imágenes en Google Colab, VII. Referencias.
desde nuestro sistema local que nos
permitió trabajar con nuestra imagen. A [I] [Link]
continuación, utilizamos bibliotecas como procesamiento-de-imagenes-con-
matplotlib para visualizar las imágenes y matrices/
explorar sus propiedades, como el [II] [Link]
tamaño, el tipo de datos y la distribución transformando-im%C3%A1genes-en-
de los píxeles. matrices-con-python-numpy-y-
plotly-d8eae1686bba
Uno de los puntos destacados de nuestro [III] [Link]
trabajo fue la implementación de la sa=t&source=web&rct=j&opi=89978
interpolación de imágenes utilizando 449&url=[Link]
splines cúbicos. Esta técnica nos permitió [Link]/recacym/article/
observar las funciones de nuestra imagen download/
en su contorno para la realización de este 112/65&ved=2ahUKEwiq1tKA9ceF
preservando al mismo tiempo la calidad AxUkkIQIHZ8GARAQFnoECB4QA
visual y los detalles importantes. Además, Q&usg=AOvVaw2ANBD29oJlR8h3
al mostrar el contorno del cachorro Npk7uVix
mediante líneas de diferentes colores, [IV] [Link]
pudimos resaltar la complejidad y la 12193/files/[Link]
estructura del objeto de interés de una [V] [Link]
manera clara y distintiva. Procesamiento-de-Imagenes/blob/
master/05-Matrices%20en
Otro aspecto importante fue la capacidad
%[Link]
de convertir las imágenes a diferentes
[VI] [Link]
espacios de color, como escala de grises o
lecture-notes-ES/advanced/
RGB, lo que nos permitió explorar y
image_processing/[Link]
comprender mejor la representación de
[VII] [Link]
los colores en las imágenes y su relación
tutoriales/opencv-en-python
con la matriz de píxeles subyacente.
En resumen, a lo largo de este proyecto,
hemos adquirido una comprensión más
profunda y práctica del procesamiento de
imágenes, desde los conceptos básicos
hasta técnicas más avanzadas como la