MT420 Unidad 2 Mejora de La Imagen 2021-2
MT420 Unidad 2 Mejora de La Imagen 2021-2
MT420 Unidad 2 Mejora de La Imagen 2021-2
Unidad 2
Mejora de la imagen
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.
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
% 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)
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
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
2
1
3 4 5 6
7
Análisis de histograma a nivel de imagen
1 2 3
Array Plot
Simulink > DSP System Toolbox > Sinks > Array Plot
Simulink > Math Operations > Matrix concatenate
Análisis de histograma a nivel de imagen
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)
𝑓𝑖𝑙𝑎 𝑥
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
𝑦
P(x,y,z)
Rotación cos − sin 0 𝒙
Traslación sin cos 0 𝒚
𝑅=
Eje z 0 0 1 𝒛
𝑥
𝟎 𝟎 𝟎 𝟏
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
t_nonsim = affine2d(T);
I_nonreflective_similarity = imwarp(I,t_nonsim,'FillValues',fill);
figure(2),imshow(I_nonreflective_similarity);
title('Nonreflective Similarity')
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');
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
𝑖𝑓 𝐼𝑥𝑦 < 0
𝐼𝑥𝑦 = 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)
[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
}
}
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.
i 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
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]);
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
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
[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
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.
(𝑥 − 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
𝐼′ 𝑥, 𝑦 = 𝐼 𝑥 + 𝑖, 𝑦 + 𝑗 ∗ 𝐻(𝑖, 𝑗)
𝑖=−1 𝑗=−1
′
𝑝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
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
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
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
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
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)
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)
Procesamiento Digital de imágenes con Matlab y Simulink. Cuevas, Zaldívar, Pérez. Alfaomega
Digital Image Processing, Gonzalez, Woods. 3rd Edition. Pearson