Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                

MT420 Unidad 2 Mejora de La Imagen 2021-2

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 79

MT420 Procesamiento Digital de Imágenes

Unidad 2

Mejora de la imagen

Dr. Gustavo Mesones Málaga


Temario
• Transformaciones básicas de los niveles de gris. Procesamiento por
histogramas. Mejora utilizando operaciones aritméticas.
• Filtrado espacial en el dominio del tiempo: filtrado suavizador y de
gradiente. Métodos espaciales combinados.
• Filtrado en el dominio de la frecuencia. Transformada discreta de
Fourier. Interpretación numérica y gráfica.
1

Transformaciones básicas en niveles


de grises

Dr. Gustavo Mesones Málaga


Transformaciones básicas en niveles de gris

El histograma de una imagen es un medio de ayuda para evaluar propiedades


relevantes de una imagen. Son distribuciones que describen la frecuencia con las
que se presentan los valores de intensidad (pixeles) de la imagen. Muestra
importantes características de una imagen, como por ejemplo el contraste y
el rango dinámico. Usualmente se analizan como imágenes monocromáticas
con un rango dinámico 0 2𝑁 − 1 , donde N es el número de bits para determinar
la escala de grises.

5 bits

6 bits

7 bits

8 bits
Análisis de histograma a nivel de imagen
Los errores que se puedan cometer en la captura o toma de una imagen son
fácilmente reconocidos mediante la utilización de un histograma para luego realizar
correcciones preliminares o resaltar características para luego ser analizadas en
las siguientes fases del procesamiento digital.

No se puede reconstruir imágenes a partir de un histograma.

h(i)

6

3

i
face.jpg 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

h(i) 2 10 0 0 6 7 3 10 2 7 3 7 10 …
Análisis de histograma a nivel de imagen
Programa que permite la observación del histograma de una imagen
a niveles de gris.
% EE368/CS232 Digital Image Processing
% Bernd Girod
% Department of Electrical Engineering, Stanford University

% Script by Qiyuan Tian and David Chen


% Example histogram

clear, clc, close all

% Load test image


img=imread('brain.jpg');
[counts, index] = imhist(img);

% Plot histogram
subplot(1, 2, 1), bar(index, counts,'r');
set(gca, 'FontSize', 10);
xlim([0 255]);
xlabel('Gray level'), ylabel('# pixels');

% Show image
subplot(1, 2, 2), imshow(img);
title('Original image');
saveas(gca, 'histobrain.png');
Análisis de histograma a nivel de imagen
Un histograma es una medida estadística de la cuenta de todos los pixeles de un
determinado nivel de gris de una imagen. (en este caso 32x32 = 1024 pixeles)

32x32.jpg Nivel Cantidad de pixeles por nivel de gris


0 14

img=imread('32x32.jpg');
[counts, index] = imhist(img);

% Plot histogram
subplot(1, 2, 1), bar(index, counts,'k’);
title('Histogram');
set(gca, 'FontSize', 10);
xlim([0 255])
ylim('auto')
xlabel('Gray level'), ylabel('# pixels');
% Show image
subplot(1, 2, 2), imshow(img);grid;
title('Original image');

255 176
Análisis de histograma a nivel de imagen
Características de una imagen
Los histogramas muestran características importantes de una imagen, tal como

Iluminación. Los histogramas reconocen los errores de iluminación porque alguna


región inicial o final de la escala de intensidad no es utilizada
bay.jpg
Análisis de histograma a nivel de imagen
Contraste. Es el campo de valores de intensidad que en una imagen específica son
utilizadas en un rango de valores entre 𝑎𝑚𝑖𝑛 y 𝑎𝑚𝑎𝑥 = 0 … 2𝑁 − 1 (de negro a blanco).

Dinámica. Es el número de píxeles diferentes que son utilizados en la imagen. Se dice que
una imagen alcanza el máximo rango dinámico cuando todos los valores de intensidad
en ese intervalo aparecen.
moon.jpg
Análisis de histograma a nivel de imagen

Histograma de imágenes a color


En este proceso aplicado a las imágenes, se refiere a
histograma de luminosidad o por componentes (RGB),
como si se tratase de imágenes monocromáticas.

2
1

3 4 5 6
7
Análisis de histograma a nivel de imagen
1 2 3

Sinks > To video display

Image adquisition tools > From Video Device 5

Conversion > data type conversion

Nota: en output dimensión


aparece el vector [1,1]
Statistics > 2-D Histogram Simulink > Math operations > Reshape cambiar a [M,N]
Análisis de histograma a nivel de imagen
6

Array Plot

Simulink > DSP System Toolbox > Sinks > Array Plot
Simulink > Math Operations > Matrix concatenate
Análisis de histograma a nivel de imagen

Histograma por componente de imágenes a color


Análisis de histograma a nivel de imagen
Transformaciones básicas aplicado a imágenes

➢ Cambio de contraste y de iluminación en la imagen


➢ Aplicación de determinadas curvas de iluminación
➢ Inversión o complemento de una imagen
➢ Segmentación por umbral de una imagen
➢ Corrección gamma de una imagen
➢ Transformación de color de una imagen

𝑑1′ 𝑑2′ 𝑑3′


operación
𝑑5 𝑑4′ 𝑑5′ 𝑑6′

𝑓 𝐼 𝑥, 𝑦 = 𝐼 (𝑥, 𝑦)
𝑑7′ 𝑑8′ 𝑑8′

Modified intensities
Transformaciones básicas aplicado a imágenes
Otras operaciones
de interés en el
procesamiento
digital de imágenes
Si bien matemáticamente se puede ubicar puntos como una matriz cualquiera.
Pero hay que tener en cuenta las convenciones de posición de un pixel de imagen,
ángulos de rotación y traslación.
𝑦

cos  − sin  0
Rotación 𝑅 = sin  cos  0 (x,y)
0 0 1 
𝑥
𝑐𝑜𝑙𝑢𝑚𝑛𝑎 𝑦
cos  sin  0

𝑅 = − sin  cos  0
0 0 1 I(x,y)

𝑓𝑖𝑙𝑎 𝑥

Supongamos que se desea rotar los


puntos (4,0); (0,4); (4,4) 90° sentido horario (para fines algorítmicos  positivo)

Tomando el conjunto de puntos de posición dados, se conforma (4,0,1); (0,4,1) y (4,4,1)


El punto rotado I’(4,0) se obtiene de la siguiente manera (0,-4)
90°
cos  sin  0 4 0 1 0 4 0
𝐼´ 4,0 = − sin  cos  0 0 = −1 0 0 0 = −4
0 0 1 𝟏 0 0 1 1 𝟏 (4,0)
Significa que la posición rotada del pixel ocupa la nueva posición (0,-4).
El punto rotado I’(0,4) se obtiene de la siguiente manera
0 1 0 0 4 90° (0,4)
𝐼´ 0,4 = −1 0 0 4 = 0
0 0 1 1 𝟏

Significa que la posición rotada del pixel ocupa la nueva posición (4,0). (4,0)
El punto rotado I’(4,4) se obtiene de la siguiente manera
0 1 0 4 4
𝐼´ 4,4 = −1 0 0 4 = −4
90°
0 0 1 1 𝟏

Significa que la posición rotada del pixel ocupa la nueva posición (4,-4).
(4,-4) (4,4)
Se quiere rotar 90° horario una imagen de 5x5 a través de la variable A

origen origen

1 1 1 1 1 0 0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 0 0 1 0 0 0 0
Si 𝐴 = 0 0 1 0 0 𝐵= 1 1 1 1 1 0 0 0 0
0 0 1 0 0 0 0 0 0 1 0 0 0 0
0 0 1 0 0 0 0 0 0 1 0 0 0 0

Espacio de relleno (padding)


como consecuencia de la rotación.

Por tanto, la matriz será aumentada en 4 columnas adicionales a la izquierda


del origen.
Haciendo analogía con las ecuaciones de rotación-traslación para robots, se pueden aplicar
de manera adaptada para el procesamiento de imágenes.

𝑦
P(x,y,z)
Rotación cos  − sin  0 𝒙
Traslación sin  cos  0 𝒚
𝑅=
Eje z 0 0 1 𝒛 
𝑥
𝟎 𝟎 𝟎 𝟏

x, y, z representa a la traslación del punto P


I(x,y,z)
𝑧
𝑧

Rotación cos  sin  0 𝒙 


𝑦
Traslación −sin  cos  0 𝒚
𝑅=
Imágenes 0 0 1 𝒛
𝟎 𝟎 𝟎 𝟏 𝑥
Supongamos que se desea trasladar el punto (2,0) dos filas abajo y tres columnas derecha

cos  sin  0 𝒙 1 0 0 𝟐 𝟐
−sin  cos  0 𝒚 0 1 0 𝟑 𝟎
𝑅= = y𝑃=
0 0 1 𝒛 0 0 1 𝟎 0 (2,0)
𝟎 𝟎 𝟎 𝟏 𝟎 𝟎 𝟎 𝟏 1

1 0 0 𝟐 𝟐 𝟒
(4,3)
El punto P trasladado será 0 1 0 𝟑 𝟎 𝟑
P’=R*P= =
0 0 1 𝟎 0 0
𝑃′ = (4,3) 𝟎 𝟎 𝟎 𝟏 1 1

Supongamos que se desea trasladar el punto (2,0) dos filas abajo y (0,-2)
tres columnas derecha y a la vez rotar 90° horario 90°
(el ángulo se toma positivo)
0 1 0 𝟐 𝟐 𝟐 (2,0) (2,1)
El punto P trasladado será −1 0 0 𝟑 𝟎 𝟏
P’=R*P= =
0 0 1 𝟎 0 0
𝑃′ = (2,1) 𝟎 𝟎 𝟎 𝟏 1 1
Ejercicios

Aplique matrices de
transformaciones para
hallar la nueva posición
P(x,y) de una imagen para

Translation

Scaling

Shear (vertical)

Shear (horizontal)
Traslación Escalado

1 0 𝑡𝑥 𝑥 𝑥 + 𝑡𝑥 𝑐𝑥 0 0 𝑥 𝑥𝑐𝑥
𝐼´ 𝑥, 𝑦 = 0 1 𝑡𝑦 𝑦 = 𝑦 + 𝑡𝑦 𝐼´ 𝑥, 𝑦 = 0 𝑐𝑦 0 𝑦 = 𝑦𝑐𝑦
0 0 1 1 1 0 0 1 1 1

Shear-V Shear-H

1 𝑠𝑣 0 𝑥 𝑥 + 𝑠𝑣 𝑦 1 0 0 𝑥 𝑥
𝐼´ 𝑥, 𝑦 = 0 1 0 𝑦 = 𝑦 𝐼´ 4,0 = 𝑠ℎ 1 0 𝑦 = 𝑠ℎ 𝑥 + 𝑦
0 0 1 1 1 0 0 1 1 1
Transformaciones básicas aplicado a imágenes
>> I=imread('Lena512x512.tif'); >> I=imread('Lena512x512.tif');
>> J = imrotate(I,-10,'bilinear','crop'); >> K = imrotate(I,10,'bilinear');
>> imshow(J); >> imshow(K);

https://www.mathworks.com/examples/image/mw/images-ex49889463-create-a-gallery-of-transformed-images
Transformaciones básicas aplicado a imágenes
Desde Simulink
se pueden realizar
determinados
procesos a la imagen
Transformaciones básicas aplicado a imágenes

El parámetro [50 150]


significa que en la esquina
superior izquierda se mueve
50 píxeles a la izquierda y la
esquina inferior izquierda se
mueve 150 píxeles a la derecha
Transformaciones básicas aplicado a imágenes

El parámetro [-20 50]


significa que en la esquina
superior izquierda se mueve
20 píxeles hacia arriba y la
esquina inferior derecha se
mueve 50 píxeles hacia abajo
Transformaciones básicas aplicado a imágenes

El parámetro [20 -80]


significa que la imagen se desplaza
20 píxeles hacia abajo y 80 píxeles
a la izquierda.
clc
close all
Operaciones del pixel
clear all
sqsize = 80; % dimensión del chessboard
I = checkerboard(sqsize,4,4);
nrows = size(I,1);
ncols = size(I,2);
fill = 0.3;
figure(1),imshow(I)
title('Original')

% Actividad 1 rotación de imagen

% Try varying these 4 parameters.


scale = 1.2; % scale factor
angle = 40*pi/180; % rotation angle
tx = 0; % x translation
ty = 0; % y translation
sc = scale*cos(angle);
ss = scale*sin(angle);
T = [ sc -ss 0;
ss sc 0;
tx ty 1];

t_nonsim = affine2d(T);
I_nonreflective_similarity = imwarp(I,t_nonsim,'FillValues',fill);
figure(2),imshow(I_nonreflective_similarity);
title('Nonreflective Similarity')

%modificando algunos parámetros de la imagen rotada


[I_nonreflective_similarity,RI] = imwarp(I,t_nonsim,'FillValues',fill);
figure(3),imshow(I_nonreflective_similarity,RI)
axis on
title('Nonreflective Similarity (Spatially Referenced)')
% Actividad 2
Operaciones del pixel
% Try varying these parameters.
scale = 1.5; % scale factor
angle = 10*pi/180; % rotation angle
tx = 0; % x translation
ty = 0; % y translation
a = -1; % -1 -> reflection, 1 -> no reflection
sc = scale*cos(angle);
ss = scale*sin(angle);
T = [ sc -ss 0;
a*ss a*sc 0;
tx ty 1];

t_sim = affine2d(T);

[I_similarity,RI] = imwarp(I,t_sim,'FillValues',fill);
figure(4),imshow(I_similarity,RI)
axis on
title('Similarity')

% Actividad 3
Lena=imread('Lena512x512.tif');

% Try varying the definition of T.


T = [1 0.3 0;
1 1 0;
0 0 1];
t_aff = affine2d(T);
I_affine = imwarp(I,t_aff,'FillValues',fill);
figure(5),imshow(I_affine)
title('Affine')
Operaciones del pixel
% Actividad 4

T = [1 0 0.002;
1 1 0.0002;
0 0 1 ];
t_proj = projective2d(T);
I_projective = imwarp(I,t_proj,'FillValues',fill);
figure(6),imshow(I_projective)
title('Projective')

% Actividad 5

movingPoints = [0 0; 0 nrows; ncols 0; ncols nrows;];


fixedPoints = [0 0; 0 nrows; ncols 0; ncols*1.5
nrows*1.2];
t_piecewise_linear =
fitgeotrans(movingPoints,fixedPoints,'pwl');
I_piecewise_linear =
imwarp(I,t_piecewise_linear,'FillValues',fill);
figure(7),imshow(I_piecewise_linear)
title('Piecewise Linear')
Transformaciones básicas aplicado a imágenes
Otras operaciones de interés en la operación aplicada a los pixeles de una imagen son

➢ Contraste e iluminación o brillo 𝐼 ′ 𝑥𝑦 = 𝑐. 𝐼𝑥𝑦 + 𝑏 𝑐 se vincula con el contraste


𝑏 se vincula con el brillo o
iluminación
➢ Delimitación del valor de un pixel 𝑖𝑓 𝐼𝑥𝑦 > 255 , para imágenes uint8.
𝐼𝑥𝑦 = 255;

𝑖𝑓 𝐼𝑥𝑦 < 0
𝐼𝑥𝑦 = 0;

➢ Complemento de una imagen 𝑓𝑖𝑛𝑣 𝑝 = 𝑝𝑚𝑎𝑥 − 𝑝 [0, 𝑝𝑚𝑎𝑥]

𝑝𝑜 si p < 𝑝𝑡ℎ
➢ Segmentación por umbral 𝑓𝑡ℎ = ቊ 0 < 𝑝𝑡ℎ < 𝑝𝑚𝑎𝑥
𝑝1 si p > 𝑝𝑡ℎ
(binarización)
Transformaciones básicas aplicado a imágenes
Procesos aritméticos y lógicos

>> A=[129 120 110 132; >> A=[129 120 110 132; >> A=[129 120 110 132;
119 100 112 120; 119 100 112 120; 119 100 112 120;
120 130 100 115; 120 130 100 115; 120 130 100 115;
129 108 120 105]; 129 108 120 105]; 129 108 120 105];
>> B=A>110 >> B=A>120&A<140 >> B=A*1.5

B= B= B=

4×4 logical array >> C=1-B 4×4 logical array 193.5000 180.0000 165.0000 198.0000
178.5000 150.0000 168.0000 180.0000
C=
1 1 0 1 1 0 0 1 180.0000 195.0000 150.0000 172.5000
1 0 1 1 0 0 1 0 0 0 0 0 193.5000 162.0000 180.0000 157.5000
0 1 0 0 0 1 0 0
1 1 0 1 0 0 1 0
1 0 1 0 0 1 0 1 1 0 0 0

>> B=A+10 >> B=A-10 >> B=A*2+30 Si el valor final del pixel se excede
de 255, este se trunca a 255
B= B= B=

139 130 120 142 119 110 100 122 255 255 250 255
129 110 122 130 109 90 102 110 255 230 254 255
130 140 110 125 110 120 90 105 255 255 230 255
139 118 130 115 119 98 110 95 255 246 255 240
Transformaciones básicas aplicado a imágenes
Complemento de
una imagen.
Transformaciones básicas aplicado a imágenes
Binarización de La binarización consiste en una reducción de información en la que los únicos valores posibles son
verdadero y falso (1 y 0). En caso de una imagen digital los valores verdadero y falso se corresponden
una imagen. a dos colores: blanco y negro y el termino “valor” define el umbral de dicha binarización.

En Matlab
bw=im2bw(Img,valor)

>> f=imread('Lena512x512.tif');
>> bw=im2bw(f,0.5); % umbral entre [0 1]
>> imshow(bw)

Toolbox: Logic % bit Operations


Transformaciones básicas aplicado a imágenes
clc
close all
clear all
Para T =75
filename=input('Enter file name: ','s');
y=imread('Lena512x512.tif');
T=input('Enter threshold value between 0 to 255:
');
if(ndims(y)==3)
y=rgb2gray(y);
end

[m n]=size(y);
imshow(y);
for i=1:m
for j=1:n
if(y(i,j)>T)
y(i,j)=255;
else
y(i,j)=0;
end
end
end

figure;
imshow(y);
Transformaciones básicas aplicado Conversions
a imágenes
Binarización de
una imagen.
En Simulink.
Toolbox Conversions
El bloque Autothreshold usa el método de Otsu
para la binarización de la imagen
Transformaciones básicas aplicado a imágenes

En Video Viewer1, se selecciona dentro de menú Tools, y luego Pixel Region


se marca el sector de interés para analizar con más detalle la imagen binarizada
Transformaciones básicas aplicado a imágenes
Operaciones aritméticas
Complemento de una imagen

Si en Constant se edita con 0 y en Add


se configuran con ++, se tendrá la
función identidad
Transformaciones básicas aplicado a imágenes
Transformaciones básicas aplicado a imágenes
Transformaciones básicas aplicado a imágenes
Binarización de una imagen - C#

public Bitmap BinaryImage(Bitmap source, int umb)


{
// Bitmap con la imagen binaria
Bitmap target = new Bitmap(source.Width, source.Height, source.PixelFormat);
// Recorrer pixel de la imagen
for (int i = 0; i < source.Width; i++)
{
for (int e = 0; e < source.Height; e++)
{
// Color del pixel
Color col = source.GetPixel(i, e);
// Escala de grises
byte gray = (byte)(col.R * 0.3f + col.G * 0.59f + col.B * 0.11f);
// Blanco o negro
byte value = 0;
if (gray > umb)
{
value = 255;
}
// Asignar nuevo color
Color newColor = System.Drawing.Color.FromArgb(value, value, value);
target.SetPixel(i, e, newColor);

}
}

return target;
}

http://cortesfernando.blogspot.com/2014/05/binarizacion-imagen.html
Transformaciones básicas aplicado a imágenes
Ecualización lineal de un histograma
Si la distribución de niveles de intensidad no es uniforme, existe dos procedimientos para
uniformizar la iluminación en toda la gama de niveles de grises de la imagen.

Histograma original Objetivo


h(i) heq(i)

i i

Histograma acumulado Objetivo


H(i) Heq(i)

i i
El Histograma acumulado es una variante del histograma de luminosidad y las
operaciones se hacen a nivel de pixel por pixel.
Transformaciones básicas aplicado a imágenes
Nivel de intensidad

% Programa de ecualización de imagen

clear, clc, close all


img=imread('book2.png');

figure(1)
subplot(1,2,1),imshow(img),title('imagen Original');
subplot(1,2,2),imhist(img),title('histograma asociado')
ylim('auto')

g=histeq(img, 256);
figure(2)
subplot(1,2,1),imshow(g),title('imagen ecualizada');
subplot(1,2,2),imhist(g),title('histograma asociado')
ylim('auto')
Transformaciones básicas aplicado a imágenes
Transformaciones básicas en niveles de gris
Histograma original
clc
close all
clear all

I = imread('Lena512x512.tif');
I2=rgb2gray(I);
[count,x]=imhist(I2);
figure(1)
subplot(1,2,1)
imshow(I); % imagen de Lena
subplot(1,2,2)
bar(x,count,'k')% graficando histograma original
xlim([0 255]);

% Usando el ajuste de histograma mejorado


J = imadjust(I2);
[count2,x2]=imhist(J);
figure(2);
subplot(1,2,1) Histograma mejorado
imshow(J);
subplot(1,2,2)
bar(x2,count2,'k')% graficando histograma mejorado
xlim([0 255]);

% Usando ajuste de histograma bajo condiciones


K = imadjust(I2,[0.3 0.7],[]);
[count3,x3]=imhist(K);
figure(3);
subplot(1,2,1)
imshow(K);
subplot(1,2,2)
bar(x3,count3,'k')% graficando histograma
xlim([0 255])
Transformaciones básicas en niveles de gris
Histograma bajo un segundo criterio
Transformaciones básicas en niveles de gris
El ajuste de contraste tiene
esta expresión matemática
lim_i_inf lim_i_sup
lim _s_inf lim _s_sup − lim _s_inf
salida (s)=ቐ lim _s_inf + (Entrada − lim _i_inf)
lim _s_sup lim _i_sup − lim _i_inf

Si Entrada = lim_i_inf, entonces salida = lim_s_inf


Si Entrada = lim_i_sup, entonces salida = lim_s_sup
Imagen original Imagen con ajuste de contraste

lim_s_inf lim_s_sup
Transformaciones básicas en niveles de gris
Para ecualizar el histograma de una imagen en Matlab, se puede usar este programa
clc %Programa para obtener la for v=1:256
%ecualización de histograma H(v)=va+cont(v);
clear all va=H(v);
close all end

I=imread('Lena512x512.tif'); for fila=1:m


[cont,x]=imhist(I); for col=1:n
[m,n]=size(I); acum=I(fila,col);
J(fila,col)=H(acum+1)*(255/(m*n));
va=0; % valor acumulado del histograma end
end
J=mat2gray(J);
imshow(J)
Transformaciones básicas en niveles de gris
Corrección Gamma
Es una operación del pixel que permite compensar las diferentes características de
captación y despliegue de imágenes mediante la utilización de un espacio general de
intensidades.

La expresión gamma proviene de la fotografía clásica


donde existe una relación logarítmica entre el nivel de
iluminación y la densidad resultante de la película fotográfica.
Transformaciones básicas en niveles de gris
Una imagen se aplica el factor gamma proveniente de una cámara

Factor Gamma  𝐵 = 𝐴  > 0, depende del dato de fábrica.

Usualmente para los monitores LCD,  es 1.0 (Windows 10)

Corrección
luz 𝐴 Cámara o webcam 𝐴 gamma 𝐴
𝑐 1
ҧ 𝑐 =

R de 220Ω
Transformaciones básicas en niveles de gris
Programa de mejora
con la corrección gamma
% EE368/CS232 Digital Image Processing
% Bernd Girod
% Department of Electrical Engineering, Stanford University

% Script by Qiyuan Tian and David Chen


% Brightness Adjustment and Contrast Adjustment

clear, clc, close all

% Load test image


img = im2double(imread('parrot.jpg'));

%% Brightness adjustment by intensity scaling


scale = 1.2;
scaledImg = scale .* img;
subplot(1, 2, 1), imshow(img, [0, 1]);
title('Original image');
subplot(1, 2, 2), imshow(scaledImg, [0, 1]);
title('Scaled image');
%imwrite(scaledImg, 'chap2_Brightness_scaled.png');

%% Contrast adjustment by changing "gamma"


gamma = 1.5;
gammaImg = img.^gamma;
figure;
subplot(1, 2, 1), imshow(img);
title('Original image');
subplot(1, 2, 2), imshow(gammaImg);
title('\gamma increased by 50%');
%imwrite(gammaImg, 'Contrast_gamma.png');
Transformación avanzada en niveles de gris

Imagen original Imagen ecualizada Imagen con técnica Fuzzy


Transformación avanzada en niveles de gris
clc, clear all, close all
L=256;
image = imread('bay.jpg');
a = mat2gray(image);
a12 = dyaddown(image,'m',1);

[m n]=size(a);
dimx = m; % este valor es para esta imagen
dimy = n;
c = imcrop(a12,[10 1 dimy-1 dimx-1]);
d = double(c);
mx = max(max(d)); mn = min(min(d));
% membership function calculation%
img = (d-mn)./(mx-mn);
% applying INT operator%
for i = 1:dimx/3
for j = 1:dimy/3
if img(i,j) <= 0.5
enh(i,j) = 2*img(i,j)^2;
else
enh(i,j) = 1-2*(1-img(i,j))^2;
end
end
end
enhanceimage = (L-1)*enh;

subplot(1,2,1)
imshow(uint8(enhanceimage))
subplot(1,2,2)
imshow(c)
2

Filtrado espacial en el dominio del


tiempo
Filtrado espacial

Son operaciones que se aplican en las imágenes el cual el nuevo valor del pixel
ya no dependen de sí mismos, sino que también se toman en cuenta los vecinos en
relación a él, no afectando naturalmente la geometría de los objetos que conforman
la imagen.

Luego, un filtro es un proceso de suavizado de una imagen cuando se aprecia cambios


abruptos en zonas locales. En este caso trataremos el proceso de los filtros lineales.
arriba diagonal

(𝑥 − 1, 𝑦 − 1) (𝑥 − 1, 𝑦) (𝑥 − 1, 𝑦 + 1)
Las matrices utilizadas pueden ser
𝑝1 𝑝4 𝑝6
de orden 3x3.
𝑝2 𝑝0 𝑝7 derecha (𝑥, 𝑦 − 1) (𝑥, 𝑦) (𝑥, 𝑦 + 1) Las dimensiones 5x5, 7x7 o 31x31
Se logran mejores índices de
𝑝3 𝑝5 𝑝8
(𝑥 + 1, 𝑦 − 1) (𝑥 + 1, 𝑦) (𝑥 + 1, 𝑦 + 1)
suavizado y está sujeto a la
abajo diagonal
dimensión MxN de la imagen.
Vecindad 8-vecinos
Filtrado espacial
Los filtros lineales espaciales poseen las siguientes características
máscara
j Primero se barren las columnas
y En un procesado de imagen con un
filtro, se dan dos procesos
matemáticos: convolución y
correlación.
i
➢ Convolución
1 1
Luego se barren las filas

𝐼′ 𝑥, 𝑦 = ෍ ෍ 𝐼 𝑥 + 𝑖, 𝑦 + 𝑗 ∗ 𝐻(𝑖, 𝑗)
𝑖=−1 𝑗=−1

➢ Correlación (rotación de 180° del filtro)


1 1
La unión de dos funciones discretas
origina otra función. 𝐼′ 𝑥, 𝑦 = ෍ ෍ 𝐼 𝑥 − 𝑖, 𝑦 − 𝑗 ∗ 𝐻(−𝑖−, 𝑗)
𝑖=−1 𝑗=−1
x
𝐼′ = 𝐼 ∗ 𝐻
Filtrado espacial
Un ejemplo de cómo
se procesa la correlación
y la convolución de
una información
unidimensional
Filtrado espacial
Un ejemplo de cómo
se procesa la correlación
y la convolución de
una información
bidimensional
Filtrado espacial
Los filtros lineales espaciales poseen las siguientes características
máscara
j Primero se barren las columnas
y

Si la imagen 𝐼 se denota 𝐼(𝑥, 𝑦)


i Y el filtro 𝐻se le representa 𝐻(𝑖, 𝑗)
La imagen 𝐼’ filtrada es
1 1
Luego se barren las filas

𝐼′ 𝑥, 𝑦 = ෍ ෍ 𝐼 𝑥 + 𝑖, 𝑦 + 𝑗 ∗ 𝐻(𝑖, 𝑗)
𝑖=−1 𝑗=−1

La operación se procesa así

𝐼 𝑥 − 1, 𝑦 − 1 ∗ 𝐻 −1, −1 + 𝐼 𝑥 − 1, 𝑦 ∗ 𝐻 −1,0 + 𝐼 𝑥 − 1, 𝑦 + 1 ∗ 𝐻(−1,1) +


𝐼′ 𝑥, 𝑦 = 𝐼 𝑥, 𝑦 − 1 ∗ 𝐻 0, −1 + 𝐼 𝑥, 𝑦 ∗ 𝐻 0,0 + 𝐼 𝑥, 𝑦 + 1 ∗ 𝐻(0,1) +
x 𝐼 𝑥 + 1, 𝑦 − 1 ∗ 𝐻 1, −1 + 𝐼 𝑥 + 1, 𝑦 ∗ 𝐻 1,0 + 𝐼 𝑥 + 1, 𝑦 + 1 ∗ 𝐻(1,1)
Filtrado espacial
Utilizando una estructura de 3x3 y deseamos suavizar el valor de un pixel,
de 𝐼(𝑥, 𝑦) a 𝐼 ′ (𝑥, 𝑦) es
I(𝑥, 𝑦)
Vecinos alrededor de I(x,y)


𝑝0 + 𝑝1 + 𝑝2 + 𝑝3 + 𝑝4 + 𝑝5 + 𝑝6 + 𝑝7 + 𝑝8
𝐼 𝑥, 𝑦 =
9
𝐼 𝑥 − 1, 𝑦 − 1 + 𝐼 𝑥 − 1, 𝑦 + 𝐼 𝑥 − 1, 𝑦 + 1 +

1
O bien, 𝐼 𝑥, 𝑦 = 𝐼 𝑥, 𝑦 − 1 + 𝐼 𝑥, 𝑦 + 𝐼 𝑥, 𝑦 + 1 +
9
𝐼 𝑥 + 1, 𝑦 − 1 + 𝐼 𝑥 + 1, 𝑦 + 𝐼 𝑥 + 1, 𝑦 + 1

Para la programación, se expresa en forma compacta


1 1

1
𝐼 𝑥, 𝑦 = ෍ ෍ 𝐼(𝑥 + 𝑖, 𝑦 + 𝑗)
9
𝑖=−1 𝑗=−1 15 15
3 3
2 2
1
Para las estructuras 5x5, 7x7 o 31x31 𝐼′ 𝑥, 𝑦 =
25
෍ ෍ 𝐼(𝑥 + 𝑖, 𝑦 + 𝑗)
−2 −2
49 𝑗= −3 𝑖= −3
961 −15 −15
Filtrado espacial
Promediado
Filtro suavizador

clc
close all
clear all

I=imread('maqueta.jpg');

%convirtiendo a monocromático
I=rgb2gray(I);

figure(1),imshow(I);
[m n]=size(I);
% se cambia a double
Im=double(I);
Im2=Im;

for i=2:m-1
for j=2:n-1
Im2(i,j)=(1/9)*(Im(i-1,j-1)+Im(i-1,j)+Im(i-1,j+1)...
+Im(i,j-1)+Im(i,j)+Im(i,j+1)...
+Im(i+1,j-1)+Im(i+1-1,j)+Im(i+1,j+1));
end
end
Im2=uint8(Im2);
figure(2),imshow(Im2);
Filtrado espacial
Tipos de filtros lineales Gaussiano

0 1 2 1 0
1 3 5 3 1
2 5 9 5 2
1 3 5 3 1
0 1 2 1 0
Transformaciones básicas en niveles de gris
Prueba del filtro gaussiano aplicado a un video *.avi

(*)

0 1 2 1 0
1 3 5 3 1
𝑀= 2 5 9 5 2
1 3 5 3 1
0 1 2 1 0

(*) Se puede grabar un video desde Matlab


Puede modificar M
Transformaciones básicas en niveles de gris

Repujado
−2 −1 0
𝑀 = −1 1 1
0 1 2
Transformaciones básicas en niveles de gris

Desenfoque
1 1 1
𝑀= 1 1 1
1 1 1

Filtro norte
1 1 1
𝑀= 1 −2 1
−1 −1 −1
Filtrado espacial

Filtro este
−1 1 1
𝑀 = −1 −2 1
−1 1 1

Filtro realce de bordes


−1 1 1
𝑀 = −1 −2 1
−1 1 1
Filtrado espacial
Filtrado espacial

ruido

function B = ruido(A)
% genera ruido en la imagen de entrada A
B=A;
[m n]=size(A);
for v=1:300
x=round((m-1)*rand);
y=round((n-1)*rand);
if(x==0)
x=1;
end
if(y==0)
y=1; Se aprecia presencia
end de ruido en la imagen
pix=B(x,y)+((rand-0.4)*2*0.099);
if(pix<0)
pix=0;
end
if(pix>1)
pix=1;
end

B(x,y)=pix;
end
Filtrado espacial
Filtro de la mediana con imágenes salpicados con ruido “sal y pimienta

ruidosp
Filtrado espacial
function B = ruidosp(A)
% genera ruido en la imagen de entrada A
B=A;
[m n]=size(A);
for v=1:300
x=round((m-1)*rand);
y=round((n-1)*rand);
if(x==0)
x=1;
end
if(y==0)
y=1;
end
B(x,y)=1;
end
3

Transformada discreta de coseno - DCT


para compresión de datos de imágenes
Introducción a la Transformada Discreta de Coseno

Bloque 8x8
52 55 61 66 70 61 64 73
63 59 66 90 109 85 69 72
62 59 68 113 144 104 66 73
63 58 71 122 154 106 70 69
67 61 68 104 126 88 68 70
79 65 60 70 77 68 58 75
85 71 64 59 55 61 65 83
87 79 69 68 65 76 78 94

La DCT tiene una buena capacidad de


compresión de datos en el dominio
transformado, es decir, que la transformada
de coseno discreta consigue concentrar la
mayor parte de la información en pocos
Imagen de M x N coeficientes transformados tal y como
muestra la imagen.
Introducción a la Transformada Discreta de Coseno
Cómo se maneja las imágenes desde la perspectiva de la frecuencia
a través de la transformada del coseno (JPEG)
Bloque de Imagen (8x8) Se resta 2𝑁−1 = 128

2𝑁 niveles de grises
52 55 61 66 70 61 64 73 −76 −73 −67 −62 −58 −67 −64 −55
63 59 66 90 109 85 69 72 −65 −69 −62 −38 −19 −43 −59 −56
62 59 68 113 144 104 66 73 −66 −69 −60 −15 16 −24 −62 −55
63 58 71 122 154 106 70 69 −65 −70 −57 −6 26 −22 −58 −59
67 61 68 104 126 88 68 70 −61 −67 −60 −24 −2 −40 −60 −58
79 65 60 70 77 68 58 75 −49 −63 −68 −58 −51 −65 −70 −53
85 71 64 59 55 61 65 83 −43 −57 −64 −69 −73 −67 −63 −45
87 79 69 68 65 76 78 94 −41 −49 −59 −60 −63 −52 −50 −34
La transformada discreta de coseno está dada por
𝑀−1 𝑁−1
2𝑥 + 1 𝑢 2𝑦 + 1 𝑣
𝐶 𝑢, 𝑣 = 𝑢 𝑣 ෍ ෍ 𝑓 𝑥, 𝑦 cos cos
2𝑀 2𝑁
𝑥=0 𝑦=0
Introducción a la Transformada Discreta de Coseno
𝑀−1 𝑁−1
2𝑥 + 1 𝑢 2𝑦 + 1 𝑣
𝐶 𝑢, 𝑣 = 𝑢 𝑣 ෍ ෍ 𝑓 𝑥, 𝑦 cos cos
2𝑀 2𝑁
𝑥=0 𝑦=0

Donde
1 1
,𝑢 = 0 ,𝑣 = 0
𝑀 𝑁
𝑢 = 𝑣 =
2 2
,1 𝑢 𝑀 −1 ,1  𝑣  𝑁 − 1
𝑀 𝑁
DCT
−76 −73 −67 −62 −58 −67 −64 −55 −415 −29 −62 25 55 −20 −1 3
−65 −69 −62 −38 −19 −43 −59 −56 7 −21 −62 9 11 −7 −6 6
−66 −69 −60 −15 16 −24 −62 −55 −46 8 77 −25 −30 10 7 −5
−65 −70 −57 −6 26 −22 −58 −59 −50 13 35 −15 −9 6 0 3
−61 −67 −60 −24 −2 −40 −60 −58 11 −8 −13 −2 −1 1 −4 1
−49 −63 −68 −58 −51 −65 −70 −53 −10 1 3 −3 −1 0 2 −1
−43 −57 −64 −69 −73 −67 −63 −45 −4 −1 2 −1 2 −3 1 −2
−41 −49 −59 −60 −63 −52 −50 −34 −1 −1 −1 −2 −1 −1 0 −1
Introducción a la Transformada Discreta de Coseno
16 DC AC
−415 −29 −62 25 55 −20 −1 3 −26 −3 −6 2 2 0 0 0
7 −21 −62 9 11 −7 −6 6 1 −2 −4 0 0 0 0 0
−46 8 77 −25 −30 10 7 −5 −3 1 5 −1 −1 0 0 0
−50 13 35 −15 −9 6 0 3 −4 1 2 −1 0 0 0 0
11 −8 −13 −2 −1 1 −4 1 AC 1 0 0 0 0 0 0 0
−10 1 3 −3 −1 0 2 −1 0 0 0 0 0 0 0 0
−4 −1 2 −1 2 −3 1 −2 0 0 0 0 0 0 0 0
−1 −1 −1 −2 −1 −1 0 −1 0 0 0 0 0 0 0 0
en la frecuencia discreta (zig-zag)

La secuencia de los coeficientes de la


Secuencia de transformación

DCT quedan establecidas de la siguiente


manera
-26 -3 1 -3 -2 -6 2 -4 1 -4 1 1 5 0
DC
AC
2 0 0 -1 2 0 0 0 0 0 -1 -1 … 0
Información relevante de la imagen
Introducción a la Transformada Discreta de Cosenov
clc
close all
clear all

A=imread('Lena512x512.tif');
%A=imread('Augustine.jpg');
AA=rgb2gray(A);
figure, imshow(AA)
B=dct2(AA);
figure, imshow(B)
% pruebe con 60 160
B(abs(B)>160)=0;
figure,imshow(log(B))

A=idct2(B);
figure,imshow(A)

Escala logarítmica Umbral 160 Umbral 60


Aplicando la transformada
discreta de coseno para
las imágenes.
Bibliografía

 Procesamiento Digital de imágenes con Matlab y Simulink. Cuevas, Zaldívar, Pérez. Alfaomega
 Digital Image Processing, Gonzalez, Woods. 3rd Edition. Pearson

También podría gustarte