transformaciones e histograma€¦ · e histograma . 1 1 2 3 m 2 3 n f(2,) g(2,3 ) 1 1 2 3 m 2 3 n...

Post on 18-Oct-2020

8 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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)

top related