0% encontró este documento útil (0 votos)
39 vistas10 páginas

Procesamiento de Imágenes en MATLAB

Este documento describe cuatro secciones de un caso de estudio sobre procesamiento digital de imágenes en MATLAB. La primera sección introduce conceptos básicos de procesamiento de imágenes. Las siguientes tres secciones presentan ejercicios prácticos sobre conversión a escala de grises, ajuste de brillo y contraste, y convolución de imágenes.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
39 vistas10 páginas

Procesamiento de Imágenes en MATLAB

Este documento describe cuatro secciones de un caso de estudio sobre procesamiento digital de imágenes en MATLAB. La primera sección introduce conceptos básicos de procesamiento de imágenes. Las siguientes tres secciones presentan ejercicios prácticos sobre conversión a escala de grises, ajuste de brillo y contraste, y convolución de imágenes.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Álgebra Lineal

RC1
Pregrado
2023-2

RC1- Caos en imagenes: Entrega 1/6


Esta resolución de caso 1 RC1 consta de cuatro secciones junto con algunas preguntas
adicionales que son opcionales. El procedimiento implica la creación de un archivo LiveScript
en MATLAB que contenga los códigos y los resultados obtenidos, y posteriormente, exportarlo
en formato PDF. Para concluir la tarea, es necesario proporcionar dos elementos: el archivo
.mxl y el archivo en formato PDF.

1. Convolución y procesamiento de imagenes


El procesamiento de imágenes se puede definir como el uso de operaciones matemáticas
aplicadas a una imagen con el objetivo de mejorarla en algún sentido u obtener parámetros
de la misma. Con la introducción de los ordenadores, el procesamiento se realiza por medio
de algoritmos gráficos a las imágenes digitales, las cuales se obtienen mediante un proceso de
digitalización o directamente utilizando cualquier dispositivo digital. A este procesamiento se
le llama procesamiento digital de imágenes.

Toda imagen digital en blanco y negro no es más que una matriz numérica de NM pı́xeles,
distribuidos en N pı́xeles por fila y M pı́xeles por columna. En cada pı́xel se asocia un número
que indica su nivel de blanco (0=negro absoluto, pasando por varios niveles de gris, hasta
llegar al blanco absoluto).

1
Por otro lado, una imagen digital en color es la superposición de 3 imágenes: R, G, B que
contienen, respectivamente: nivel de rojo, verde y azul.
Ası́ pues, toda fotografı́a digital es una matriz de M filas y N columnas, o bien la su-
perposición de 3 de este tipo. En otras palabras: toda manipulación de fotografı́a digital no
es más que una operación entre matrices. Quien domine la teorı́a de matrices, dominará las
transformaciones de imágenes digitales .

2. Convolución
El primer procesamiento de imágenes se basó en filtros que permitı́an, por ejemplo, obtener
los bordes de un objeto en una imagen utilizando la combinación de filtros de borde vertical
y borde horizontal. Estos filtros utilizan la operación matricial conocida como ”producto
convolucional”. A continuación pasaremos a definir de forma sencilla esta operación. Nótese
que en todo momento estaremos hablando de una imagen como si fuera una matriz según la
representación que explicamos anteriormente.

Producto convolucional de matrices.


Considere dos matrices cuadradas A = [aij ] y B = [bij ] de orden 3. Diremos que el paso del
producto convolucional entre ellas es el número
X
aij ∗ bij
ij

2
Esto es, la suma de los productos entrada por entrada de las mencionadas matrices. Sabiendo

Figura 1: Representación convolucional de una matriz de A de orden 6 × 6 usando una matriz


B de orden 3 × 3. La matriz de salida muestra tres de sus elementos coloreados que son los
resultados de la convolución de los elementos correspondientes de A con B
.

esto, ahora podemos definir el producto convolucional aplicado a una imagen (vista como
matriz). Para ello tomemos una matriz cuadrada B de orden n la cual se mantendrá fija
durante todo el proceso. La idea de realizar el producto convolucional es tomar submatrices
cuadradas de orden n de la matriz de la imagen e ir ”multiplicándola”, usando el producto
descrito anteriormente, con la matriz B. El resultado de este producto reemplazará el valor
del centro de nuestra submatriz. Este paso se realiza para cada submatriz hasta modificar por
completo la matriz original. En la Figura (1) se ilustra mejor esta operación.

3
3. Ejercicio
3.1. Parte 1: Conversión de Imagen a Escala de Grises
Deseas realizar una conversión de una imagen en color a una imagen en escala de grises.
Para lograr esto, debes implementar un programa en MATLAB que realice el proceso de
conversión siguiendo el método ponderado estándar para obtener la intensidad de gris a partir
de los canales de color rojo, verde y azul (RGB) de cada pı́xel de la imagen.

Para completar la tarea, sigue los pasos a continuación:

1. Lee una imagen (JPG) a formato RGB.

2. Obtiene las dimensiones de la imagen (alto y ancho).

3. Inicializa una matriz para almacenar la imagen en escala de grises.

4. Calcula el valor de gris para cada pı́xel utilizando la siguiente fórmula:

Gris = 0,2989 ∗ Rojo + 0,5870 ∗ V erde + 0,1140 ∗ Azul


donde Gris, Rojo, V erde y Azul son las matrices correspondientes a los canales RGB
de la imagen JPG.

5. Muestra la imagen en escala de grises resultante

Use: Los comandos de Matlab imread, imshow, uint8

3.2. Parte 2: Ajuste de Brillo y Contraste de una Imagen


Estás trabajando en la mejora de imágenes y necesitas implementar un programa en
MATLAB que realice el ajuste de brillo y contraste en una imagen a color. El objetivo es
aplicar transformaciones a los valores de los pı́xeles de manera que puedas controlar el brillo
y el contraste de la imagen final.

4
Para completar la tarea, sigue los siguientes pasos:

1. Lee una imagen en formato RGB.

2. Define valores para el ajuste de brillo (brightness ∈ [0; 1]) y el ajuste de contraste
(contrast∈ [1; 2]).

3. Utiliza el ajuste de brillo y contraste para transformar los valores de los pı́xeles de la
imagen original. Para ello, multiplica cada valor de pı́xel por el valor de contraste y
luego agrega el valor de brillo multiplicado por 255.

4. Asegúrate de que los valores de pı́xeles ajustados estén dentro del rango válido de
[0, 255]. Utiliza las funciones max y min para aplicar la limitación.

5. Convierte la matriz resultante en valores de tipo uint8 para el formato adecuado de


visualización.

6. Muestra la imagen resultante con el brillo y contraste ajustados.

Tu tarea consiste en implementar el código en MATLAB siguiendo estos pasos y verificar que
el ajuste de brillo y contraste se realice de manera efectiva en la imagen.
Puedes utilizar el código que proporcionaste como referencia para llevar a cabo esta tarea.

3.3. Parte 3: Convolución


Usa la imagen en escala de Grises de la Parte 2 Luego defina una matriz B filtro de orden
3x3 y realice el producto convolucional de la imagen con dicha matriz.
Para esto debes realizar los siguientes pasos

Relleno de imagen
Como los bordes de la imagen no pueden ser el centro de ninguna submatriz y por lo tanto
no pueden seer modificadas, a menudo agregamos relleno alrededor de la imagen para tener
en cuenta los pı́xeles de los bordes. Los valores ası́ como el tamaño del borde son variables
y dependen del tipo de procesamiento que se requiere hacer a la imagen. La siguiente figura
ilustra el relleno de una imagen en escala de grises.

5
Ejercicio A continuación, se describen los pasos que debes seguir para completar la tarea:

1. Utiliza la matriz ImageGris ∈ Rm×n de la Parte 2 como punto de partida.

2. Agrega un relleno de ceros en el borde de la matriz anterior y define una nueva matriz
ImageGrisAu ∈ R(m+1)×(n+1) .

3. Aplica una operación de convolución a la matriz ImageGrisAu utilizando una matriz


filtro B ∈ R3×3 .

Tu tarea consiste en seguir estos pasos y realizar la convolución de la matriz de imagen


ImageGrisAu utilizando la matriz filtro B. Asegúrate de comprender el proceso de convolu-
ción y cómo afecta la imagen resultante.

3.4. Parte 4: División de una Imagen en Subimágenes


En el contexto de procesamiento de imágenes, te han asignado la tarea de dividir una
imagen en partes más pequeñas para facilitar su análisis y procesamiento. Para lograr esto,
necesitas implementar un programa en MATLAB que divida una imagen a color en una
cuadrı́cula de subimágenes de tamaño 2x2.

6
A continuación, se describen los pasos que debes seguir para completar la tarea:

1. Lee una imagen en formato RGB.

2. Define el número de filas y columnas en la cuadrı́cula de subimágenes (por ejemplo,


numRows = 2 y numCols = 2).

3. Calcula las dimensiones de cada subimagen dividiendo el alto y ancho de la imagen


original por el número de filas y columnas.

4. Crea una matriz para almacenar las subimágenes. Utiliza la función cell para crear
una matriz de celdas.

5. Utiliza bucles anidados para iterar a través de las filas y columnas de la cuadrı́cula.
Para cada subimagen, calcula las coordenadas de inicio y fin en la imagen original y
almacena la subimagen en la matriz de celdas.

6. Muestra las subimágenes en una cuadrı́cula en una nueva figura utilizando la función
subplot y imshow.

Tu tarea consiste en implementar el código en MATLAB siguiendo estos pasos y verificar


que la imagen se divida correctamente en subimágenes y se muestre en una cuadrı́cula.
Puedes utilizar el código que proporcionaste como referencia para llevar a cabo esta tarea.

7
4. Preguntas adicionales (opcional)
A continuación se presentan los códigos incompletos que permiten aplicar diversos tipos
de filtro a nuestra imagen. Se pide completar dichos códigos en función de lo visto en clase.
Utilizaremos esta imagen como referencia

2. Difuminado
Para obtener el difuminado deseado utilizaremos el método ”desenfoque de caja”. Este
funciona tomando cada pı́xel y cambiando su valor por el promedio de sus pı́xeles vecinos. El
nuevo valor de cada pı́xel serı́a la media de los valores de todos los pı́xeles que están dentro
de 1 fila y columna del pı́xel original (formando una caja de 3x3). El valor del propio pı́xel
también debe ser incluido en el cálculo del promedio.
Considere la siguiente representación de bits:

Para el pı́xel 6, se obtendrı́a el nuevo valor promediando los valores de color originales de
los pı́xeles 1, 2, 3, 5, 6, 7, 9, 10 y 11 (nótese que el propio pı́xel 6 está incluido en la media).

8
Asimismo, los valores de color del pı́xel 11 se obtendrı́an promediando los valores de color de
los pı́xeles 6, 7, 8, 10, 11, 12, 14, 15 y 16. Para un pı́xel a lo largo del borde o de la esquina,
como el pı́xel 15, seguirı́amos buscando todos los pı́xeles dentro de 1 fila y columna: en este
caso, los pı́xeles 10, 11, 12, 14, 15 y 16.

Ejercicio 1.
El siguiente código sirve para aplicar un difuminado utilizando un relleno adecuado. Primero
aplicaremos un relleno de tamaño 25 y de color aleatorio a la imagen usando el siguiente
código.

function border = aplicar_relleno(obj)

[m n o] = size(obj) % para completar


border_width = 25; %para completar

border = zeros(m+(border_width*2),n+(border_width*2),3);

c = [randi(255) randi(255) randi(255)]; %para completar

border(:,:,1) = c(1);
border(:,:,2) = c(2);
border(:,:,3) = c(3);

for i = 1 : m
for j = 1 : n
border(i+border_width,j+border_width,:) = (obj(i,j,:));
end
end

En este caso usaremos una matriz cuadrada A de orden 13 para el filtro.

lista_3d = leer_imagen(’[Link]

lista_3d
guardar_imagen(’eg_utec.bmp’, aplicar_difuminado(lista_3d));

imshow(’eg_utec.bmp’)

function result = aplicar_difuminado(obj)

9
% SU SOLUCION EMPIEZA AQUI
A = ones(13,13)/169 % Esto es para completar
result = imfilter(obj,A)
% SU SOLUCION TERMINA AQUI
end

function lista_3d = leer_imagen(ruta)


% La función leer_imagen recibe una cadena con la ruta
% de una imagen en formato BMP y devuelve una matriz
% tridimensional con el mapa de bits de la imagen.
% Convertimos la matriz a un tipo de dato común en lugar de usar la librerı́a numpy.

img = imread(ruta);
lista_3d = int32(img);
end

function guardar_imagen(ruta, lista_3d)


% La función guardar_imagen recibe una matriz tridimensional
% con el mapa de bits de la imagen y la guarda en formato bmp.

imwrite(uint8(lista_3d), ruta);
end

Ejercicio 2.
Sea F ilter ∈ R3×3 y los vectores v1 = (1, 0, 1), v2 = (1, 2, 0) y v3 = (−2, 0, 1). Si se cumple
que      
0 1 −3
F ilter ∗ v1′ =  0  , F ilter ∗ v2′ =  1  y F ilter ∗ v3′ =  −3  .
0 1 −3
Hallar la matriz F ilter.
Luego aplicar este filtro a nuestra imagen de referencia dos veces. Para ello solo deben
modificar la matriz utilizada en el código anterior.

10

También podría gustarte