Post on 18-Oct-2020
Transformaciones
e Histograma
1
1
2
3
M
2 3 N
)3,2(g)3,2(f
1
1
2
3
M
2 3 N
Transformaciones básicas
La transformación de intensidades puede expresarse por:
)],([),( yxfTyxg )(rTs ó
donde:
r = Valor del píxel antes
del procesamiento
s = Valor del píxel después
del procesamiento
T = Operador aplicado
sobre r
Transformación umbral
Convierte niveles de gris a blanco y negro
>>BW = im2bw(I,magen, nivel)
>>BW = im2bw(I,magen, 128)
Transformación complemento
rLs )1(
L-1 : Máximo nivel de gris con que se representa la imagen
Complemento
Original Complemento
Original %Complemento
g=imcomplement(f);
Definición del constraste (contrast-stretching)
)],([),( yxfTyxg
Niveles de gris de entrada (f(x,y))
Niv
ele
s d
e g
ris d
e s
alid
a (
g(x
,y))
e1 e2
s1
s2
12
12
sss
eee
2
2
2
21
1
1
1
),(),(255
255
),(),(
),(),(
),(
eyxfsicyxfe
s
eyxfesibyxfe
s
eyxfsiyxfe
s
yxg
bee
ss
11
cee
ss
2
2
22
255
255
Función imadjust
)],__[],__[,( gammaouthighoutlowinhighinlowfimadjustg
]1,0[]255,0[uint8
]1,0[]__[],__[
outhighoutlowinhighinlow
Niveles de gris de entrada (f(x,y)) Niv
ele
s d
e g
ris d
e s
alid
a (
g(x
,y))
e1 e2
s1
s2
Complemento con imadjust
Original Negativo imadjust
Original % Complemento o negativo
g1=imadjust(f, [0 1], [1 0]);
Corrección de intervalos (I)
>> b=imadjust(a, [0 .2], []);
f(x,y)
g(x
,y)
Corrección de intervalos (II)
f(x,y)
g(x
,y)
>> b=imadjust(a, [0.8 1], []);
Corrección de intervalos (III)
f(x,y)
g(x
,y)
>> b=imadjust(a, [], [0 0.2]);
Corrección de intervalos (IV)
f(x,y)
g(x
,y)
>> b=imadjust(a, [], [0.8 1]);
Definición del contraste
f(x,y)
g(x
,y)
b=imadjust(a, [.4 .6], [0.1 .9]);
Función de transformación
por interpolación
x=[0, 121, 141, 161, 255]
y=[0, 25, 255/2, 230, 255]
modelo = interp1(x,y,'linear','pp');
III=uint8(ppval(modelo, double(II)));
f(x,y)
g(x
,y)
Transformación logarítmica
>>II=im2grey(I);;
>> III=im2double(II);
>> V=2.*log(1+III);
>> IV=0.5.*log(1+III);
)),(1log(),( yxfcyxg
Transformación gamma
gcrs
g<1
g=1 g>1
>> a=[0.1:0.2:1]
>> b=[1:1:5]
>> g=[a, b]
r=uint8(0:1:255);
for i=1:10
d(i,:)=imadjust(r, [0 1], [0 1], g(1,i));
plot(r,d(i,:));
hold on
end
Corrección de gamma
)[],[],,( gammafimadjustg
Oscurece Aclara
b=imadjust(a, [ ], [ ], 3); b=imadjust(a, [ ], [ ], 0.3); Original
Definición de contraste
Eyxfmyxg
)),(/(1
1),(
r=0:1:255;
E=10:10:1000;
for i=1:9
d(i,:)=255*(1./(1+(128./r).^E(1,i)));
plot(r,d(i,:));
hold on
end
Definición de contraste (II)
Eyxfmyxg
)),(/(1
1),(
E=10
E=50 E=1000
m=0.5
m=0.5 L=128(uint8); E=0.8
Original
Definición de contraste
utilizando lógica borrosa Si Píxel es Oscuro Entonces Píxel Resultante es Oscurecer
Desarrollo
Definición de contraste
utilizando lógica borrosa (II)
Si Píxel es Oscuro Entonces Píxel Resultante es Oscurecer
Si Píxel es Claro Entonces Píxel Resultante es Aclarar
Si Píxel es Gris Entonces Píxel Resultante es Mantener
Si Píxel es Menos oscuro Entonces Píxel Resultante es Oscurecer
Si Píxel es Menos claro Entonces Píxel Resultante es Aclarar
)],([),( yxfTyxg
Definición de contraste
utilizando lógica borrosa (III)
for i=1:M
for j=1:N
% Se aplica sistema borroso a cada píxel
IV(i,j)=evalfis(III(i,j),MejoraC);
end
end
Original
Interpolación de imágenes(I)
Interpolación: Proceso a través del cual se utilizan datos
conocidos para estimar valores en otras ubicaciones
no conocidas
Ejemplo:
x = 0:1:10;
y = sin(x);
xi = 0:.1:10;
ylin = interp1(x,y,xi); % Interpolación lineal
ycub = spline(x,y,xi); % Interpolación Spline
plot(x,y,'o',xi,ylin,'r',xi,ycub,'g')
Interpolación de imágenes(II)
Interpolación de imágenes(III)
Interpolación de imágenes(IV)
Vecino próximo
Bilineal
Bicúbico
Transformaciones
geométricas (I)
Las transformaciones geométricas se aplican en:
I.- Registro o fusión de imágenes que se han tomado en
diferentes intervalos de tiempo o diferentes sensores.
II.- Corregir la distorsión de una lente.
III.- Corregir los efectos de la orientación de una cámara.
IV.- Incorporar efectos artísticos en las imágenes.
Transformaciones
geométricas (II)
Transformaciones
geométricas (III)
Transformación afín
• Preserva la colinealidad : todos los puntos
pertenecientes a una línea original, permanecen en
esa línea después de la transformación)
• Razón de distancias : El punto medio de una línea
permanece como punto medio de la línea después de
la transformación
Transformaciones
geométricas (IV)
Rotación de una imagen
Transformaciones
geométricas (V)
Otras transformaciones
Traslación
Original Empuje horizontal
Empuje vertical
Transformaciones
geométricas (VI) Programa
I = imread('tabla.jpg');
% Empuje horizontal (cambio en b)
a=1; b=.2; c=0; d=0; e=1; f=0;
tform = maketform('affine',[a d 0; b e 0; c f 1]);
II = imtransform(I,tform);
% Empuje vertical (cambio en d)
a=1; b=0; c=0; d=-.2; e=1; f=0;
tform = maketform('affine',[a d 0; b e 0; c f 1]);
IV = imtransform(I,tform);
% Ampliación (cambio en a y e)
a=5; b=0; c=0; d=0; e=5; f=0;
tform = maketform('affine',[a d 0; b e 0; c f 1]);
VII = imtransform(I,tform);
Transformaciones
geométricas (VII)
Secuencia de transformaciones afines
Transformaciones
geométricas (VIII) I=imread('edificio.jpg'); II=rgb2gray(I);
% Rotación
t=45/(2*pi); % ángulo de rotación
a=cos(t); b=-sin(t); c=0; d=sin(t); e=cos(t); f=0;
t1=[a d 0; b e 0; c f 1];
% Empuje vertical (cambio en d)
a=1; b=0; c=0; d=-.2; e=1; f=0;
t2=[a d 0; b e 0; c f 1];
% Ampliación (cambio en a y e)
a=5; b=0; c=0; d=0; e=5; f=0;
t3=[a d 0; b e 0; c f 1];
% Como producto matricial
tr=t3*t2*t1;
tform = maketform('affine',tr);
VI = imtransform(II,tform);
figure, imshow(II), figure, imshow(VI)
Transformaciones
geométricas (IX)
Transformación geométrica inversa
% Obtiene la inversa (imagen original)
[x,y] = tforminv(tform, xy90(:,1), xy90(:,2));
% A partir de la imagen original, la rotada
[u,v] = tformfwd(tform,x,y); xy xy90
Transformaciones
geométricas (X)
Transformaciones geométrica con Simulink
Registro de las imágenes (I)
Registro de las imágenes: Proceso a través del cual
se alinean dos o más imágenes de una misma escena
Pasos fundamentales
1.- Seleccionar puntos de control, significativos de las
imágenes base y de entrada.
2.- Obtener la matriz de transformación basado en los
puntos de control.
3.- Realizar la transformación espacial.
Registro de las imágenes (II)
Selección de puntos de control (cpselect)
Registro de las imágenes (III)
Selección de puntos de control (cpselect)
% Se crea la matriz de transformación
tform = cp2tform(input_points, base_points, 'projective');
% Se alinea la imagen de entrada
[alineada xdata ydata] = imtransform(II45, tform,...
'FillValues', 255);
% Se superponen ambas imágenes
figure; imshow(alineada, 'XData', xdata, 'YData', ydata)
hold on
imshow(II);
Región de interés
>> size(k)
ans =
494 600
>> l=k(192:453,166:453);
>> l(49:262, 1:193)=255;
Distancia (píxels)
Otras opciones imtool
Ampliar zona
Valor de píxeles
Ajuste de contraste
Histograma
][ kk rhn Número de píxeles rk [0, L-1]
>> imhist(a)
Niveles de gris
kr
kn
Histograma (II)
>> I=imread('fig1.jpg');
>> II=rgb2gray(I);
>> [nk, rk]=imhist(II);
>> bar(rk, nk, 1);
Histograma normalizado
n
rhn k
k
][Número de píxeles rk [0, L-1]
>> imhist(I)/numel(I)
Niveles de gris
Número total de píxeles
Selección de umbral
utilizando el histograma
[0, 1,..,254,255] [0, 255]
),( yxg),( yxf
T
Crestas
Valle T
Selección de umbral
utilizando el histograma (II)
Selección visual del umbral
Selección de umbral
utilizando histograma (III)
Media entre grupos (Clustering)
y=imhist(II);
x=[0:1:255]';
datos=[x, y];
[U, v, sumd, D]=kmeans(datos,2);
plot(datos(:,1),datos(:,2),'*')
hold on
plot(v(:,1),v(:,2),'rs')
uint8(mean(v(:,1)))
99
Método de Otsu
graythresh(II)*255
117
Selección de umbral
utilizando histograma (IV)
Método de Otsu
Para los k=[0, L-1] niveles de grises,
se selecciona la menor
varianza entre clases
Selección de umbral
utilizando histograma (V)
Método de Otsu
Selección de umbral
utilizando histograma (VI)
Método de Otsu
k=0 k=1 k=2 k=3 k=4 k=5
3.11 1.52 0.55 0.49 0.97 2.24 2
w
Menor varianza entre clases
Selección de umbral
utilizando histograma (VII)
Otsu Kmedias
Selección de umbral
utilizando histograma (VIII)
Otsu Kmedias Imagen original
Reducción a colores
fundamentales
Color Combinación
RGB
Negro [0 0 0]
Azul [0 0 1]
Verde [0 1 0]
Cian [0 1 1]
Rojo [1 0 0]
Magenta [1 0 1]
Amarillo [1 1 0]
Blanco [1 1 1]
Selección de umbral de cada matriz RGB
(28)3=16,777,216 23=8
Ecualización del histograma
][ kk rhn
k
j
jk nn
s0
1 k = 0…L-1
n = Número total de píxeles
Función de probabilidad de ocurrencia de cada nivel de intensidad
Ecualización o linealización del histograma:
a) Se obtiene el histograma
b) Calcular nuevos valores de intensidades
a) Reemplazar intensidades
píxeles de No.
intensidaddenivelMáximo
0
k
j
jk ns
Ejemplo de ecualización
A =
255 250 255
200 200 250
180 180 150
150
1
255 250 200 180
2
píxeles de No.
intensidaddenivelMáximo
0
k
j
jk ns
>>.5* 255/9
14.1667
>> 2*255/9
56.6667
>> A=uint8(A)
A =
255 250 255
200 200 197
180 180 150
>> B=histeq(A,256)
B =
255 184 255
142 142 99
56 56 14 >> 5*255/9
141.6667
k=0…255
Algoritmo de ecualización
b=imhist(I);
c=b./numel(a);
d=cumsum(c);
e=d.*255;
plot(0:1:255, e);
Función de transformación
I
>> II=histeq(I,256);
II
Histograma ecualizado
I II
Corrección de intervalo
vs ecualización >> I=imread('lincoln.jpg');
>> II=rgb2gray(I);
>> maximo=max(II(:))
189
>> minimo=min(II(:))
13
>> imhist(II)
Corrección de intervalo
% Se extiende rango
>> III=imadjust(II,[13/255 189/255],[0 1]);
>> maximo=max(III(:))
255
>> minimo=min(III(:))
0
Corrige intervalo
III
II
Ecualización
>> IV=histeq(II);
>> imhist(IV)
II
IV
III
Resultado
Ecualización Corrección de
intervalo
Resultado (II)
Ecualización Corrección de
intervalo
Uso de imtool (I)
Uso de imtool (II)
Especificación del histograma
Funciones de transformación
Función gausiana
Función campana
Función sigmoide
Función sigmoide invertida
Combinación de funciones
][ kk rhn
k
j
jk nn
s0
1 kk sTr 1
Utilizando función de ecualización
% Programa de ecualización basado en Gauss
% Centro de la campana
cg=128;
% Ancho de la campana
ac=50;
% Se crea campana
a=exp(-((([1:1:256]-cg)./ac)).^2)';
plot(a);
% Figura a convertir
figure;
b=imread(‘imagen.tif');
imshow(b);
% Se ecualiza
c=histeq(b, a);
figure;
imshow(c)
imhist(c)
Ecualización
Especificación del histograma
c=histeq(b, a); Combinación de funciones
Especificación del histograma (II)
Especificación del histograma(III)
Especificación del histograma(IV)
Especificación del histograma(V)