Cuando trabajamos con imágenes, habrá ocasiones en que queramos realizar operaciones aritméticas (Suma, resta, multiplicación y división) con ellas. En este artículo les explicaremos como realizar operaciones aritméticas en imágenes utilizando el software MATLAB.
Una operación puntual tiene como función transformar una imagen de entrada a una nueva, utilizando cada pixel de la imagen entrada y aplicándosele una transformación, es decir, la imagen de salida dependerá de dos factores: la imagen de entrada y la transformación que se le aplique. La ecuación que define una operación puntual es la siguiente:
Dónde:
Las operaciones aritméticas pertenecen al grupo de las operaciones puntuales, a continuación analizaremos los resultados que se obtienen al aplicar estas operaciones y como hacerlas en MATLAB. Es muy importante notar que para que se puedan realizar operaciones entre imágenes, ambas deben ser del mismo tamaño.
Se pueden sumar imágenes entre si y también se le puede sumar una constante a una imagen. Cuando realizamos la operación de sumar una constante a una imagen se aumenta el brillo de esta. Aquí un ejemplo de una imagen que se le sumó la constante “50”:
La sintaxis para sumar imágenes entre si es la siguiente:
Código:
Resultado= imadd(Imagen1,Imagen2); |
---|
La sintaxis para sumar una constante a una imagen es la siguiente:
Código:
Resultado= imadd(Imagen1,valor_constante); |
---|
Donde “valor_constante” puede ser cualquier número, 20, 50, 100, etc. Mientras más alto el valor, más será el brillo e incluso se puede saturar la imagen, es decir, se mostraría totalmente blanca.
Al igual que en la suma, se pueden restar imágenes entre si y también se le puede restar una constante a una imagen. Como podrán imaginarse, la operación de resta produce el efecto contrario al de la suma, oscurece la imagen. Aquí un ejemplo de una imagen que se le restó la constante “50”:
La sintaxis para restar imágenes entre si es la siguiente:
Código:
Resultado= imsubtract(Imagen1,Imagen2); |
---|
La sintaxis para restar una constante a una imagen es la siguiente:
Código:
Resultado= imsubtract(Imagen1,valor_constante); |
---|
Donde “valor_constante” puede ser cualquier número, 20, 50, 100, etc. Mientras más alto el valor, más oscura será e incluso se puede saturar la imagen, es decir, la imagen se mostraría totalmente negra.
La multiplicación en imágenes crea un efecto parecido al de sumar una imagen a otro, pero al multiplicarse es muy fácil que estas se saturen, por lo que es recomendable aumentar la resolución de imagen para que tenga más capacidad. Supongamos que queremos cambiar una imagen de 8 bits a 16 bits, la sintaxis seria la siguiente:
Código:
Nueva_16 = uint16(Imagen_original); |
---|
Aquí un ejemplo de una imagen que se multiplicó con otra, en este caso se les aumentó la resolución, pues al hacerlo en 8 bits se saturaba a blanco.
La sintaxis para multiplicar imágenes entre si es la siguiente:
Código:
Resultado= immultiply(Imagen1,Imagen2); |
---|
La multiplicación puede usarse para reducir o aumentar el brillo de una imagen, para aumentar el brillo debe multiplicarse por un valor mayor a 1, y para reducir el brillo se debe multiplicar por un valor mayor a 0 pero menor a 1 (Por ejemplo, 0.55, 0.22). Hay que tener en cuenta que si lo multiplicamos por valores muy altos puede llegar a saturarse. La sintaxis para multiplicar por una constante (A esta operación también se le conoce como “Escalamiento”) a una imagen es la siguiente:
Código:
Resultado= immultiply(Imagen1,valor_constante); |
---|
La división en imágenes (También conocida como “Racionalización”) es muy utilizada para detectar cambios entre una imagen y otra, por ejemplo, si tenemos una cámara y queremos detectar movimiento, la operación de división se puede utilizar para esto. Dicha operación crea un efecto parecido que restar una imagen a otro. Aquí un ejemplo de una imagen que se dividió entre otra, como pueden ver la imagen está casi saturada a negro.
La sintaxis para dividir imágenes entre si es la siguiente:
Código:
Resultado= imdivide(Imagen1,Imagen2); |
---|
La división también puede usarse para reducir o aumentar el brillo de una imagen, para reducir el brillo debe dividirse entre un valor mayor a 1, y para aumentar el brillo se debe dividir entre un valor mayor a 0 pero menor a 1. La sintaxis para dividir entre una constante a una imagen es la siguiente:
Código:
Resultado= imdivide(Imagen1,valor_constante); |
---|
Aplicar distintas operaciones aritméticas (Suma, resta, multiplicación y división) a una serie de imágenes.
Código:
%Operaciones aritméticas en imágenes - Por Solución Ingenieril clear all; %Limpiamos close all; clc; I=imread('rice.png'); %Leemos y guardamos la imagen Y=imread('cameraman.tif'); %Leemos y guardamos la imagen %Sumas J= imadd(Y,I); %Sumamos ambas imágenes X= imadd(Y,50); %Sumamos Y + 50 figure; %Mostramos los resultados de sumas subplot(2,2,1), imshow(I), title('Rice'); subplot(2,2,2), imshow(Y), title('Cameraman'); subplot(2,2,3), imshow(J), title('Cameraman + Rice'); subplot(2,2,4), imshow(X), title('Cameraman + 50'); %Restas Q= imsubtract(Y,I); %Restamos ambas imágenes W= imsubtract(I,100); %Restamos I - 100 figure; subplot(2,2,1), imshow(I), title('Rice'); subplot(2,2,2), imshow(Y), title('Cameraman'); subplot(2,2,3), imshow(Q), title('Cameraman - Rice'); subplot(2,2,4), imshow(W), title('Rice - 100'); %Multiplicación E1=imread('moon.tif'); %Leemos y guardamos la imagen E16=uint16(E1); %Convertimos imagen de 8 bits a 16 en resolución de intensidad para no saturar R= immultiply(E16,500); %Multiplicamos la imagen por 500 figure; %Mostramos los resultados subplot(1,2,1), imshow(E1), title('Moon'); subplot(1,2,2), imshow(R), title('Moon x 500'); %División I2=imread('rice.png'); %Leemos y guardamos la imagen J2=imdivide(I2,2);%Dividimos la imagen entre 2 figure; %Mostramos el resultado subplot(1,2,1), imshow(I2), title('Rice'); subplot(1,2,2), imshow(J2), title('Rice / 2'); |
---|
Sumas
Restas
Multiplicación
División
En este artículo analizamos las distintas operaciones aritméticas que se le pueden aplicar a una imagen, y notamos los efectos que producen estas operaciones en las imágenes, algunos aumentan el brillo, otros lo disminuyen, etc. Además aprendimos a aumentar la resolución de intensidad de una imagen a 16 bits, dándole más espacio de niveles de grises en imágenes que con una menor resolución se saturarían.