Transformaciones  e Histograma
Transformaciones básicas La transformación de intensidades puede expresarse por: ó donde: r =  Valor del píxel antes del procesamiento s = Valor del píxel después  del procesamiento  T = Operador aplicado  sobre r 1 1 2 3 M 2 3 N 1 1 2 3 M 2 3 N
Transformación umbral Convierte niveles de gris a blanco y negro >>BW = im2bw(I,magen, nivel) >>BW = im2bw(I,magen, 128)
Transformación complemento L-1 : Máximo nivel de gris con que se representa la imagen
Complemento Origina l %Complemento g=imcomplement(f);
Definición del constraste  (contrast-stretching) Niveles de gris de entrada (f(x,y)) Niveles de gris de salida (g(x,y)) e 1 e 2 s 1 s 2
Función  imadjust Niveles de gris de entrada (f(x,y)) Niveles de gris de salida (g(x,y)) e 1 e 2 s 1 s 2
Complemento con imadjust Origina l % 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);
Transformación gamma >> 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 g<1 g=1 g>1
Corrección de gamma Oscurece Aclara b=imadjust(a, [ ], [ ], 3); b=imadjust(a, [ ], [ ], 0.3); Origina l
Definición de contraste 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) m=0.5    L=128(uint8); E=0.8 Origina l E=10 E=50 E=1000 m=0.5
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
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 Origina l
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)
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 Número de píxeles r k     [0, L-1] >> imhist(a) Niveles de gris
Histograma (II) >> I=imread('fig1.jpg'); >> II=rgb2gray(I);          >> [nk, rk]=imhist(II); >> bar(rk, nk, 1);
Histograma normalizado Número de píxeles r k     [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] Crestas Valle
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 Menor varianza entre clases k=0 k=1 k=2 k=3 k=4 k=5 3.11 1.52 0.55 0.49 0.97 2.24
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 Selección de umbral de cada matriz RGB (2 8 ) 3 =16,777,216 2 3 =8 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]
Ecualización del histograma 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: Se obtiene el histograma Calcular nuevos valores de intensidades Reemplazar intensidades
Ejemplo de ecualización A = 255  250  255 200  200  250 180  180  150 150 1 255 250 200 180 2 >>.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
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)

Imagen e histograma

  • 1.
  • 2.
    Transformaciones básicas Latransformación de intensidades puede expresarse por: ó donde: r = Valor del píxel antes del procesamiento s = Valor del píxel después del procesamiento T = Operador aplicado sobre r 1 1 2 3 M 2 3 N 1 1 2 3 M 2 3 N
  • 3.
    Transformación umbral Convierteniveles de gris a blanco y negro >>BW = im2bw(I,magen, nivel) >>BW = im2bw(I,magen, 128)
  • 4.
    Transformación complemento L-1: Máximo nivel de gris con que se representa la imagen
  • 5.
    Complemento Origina l%Complemento g=imcomplement(f);
  • 6.
    Definición del constraste (contrast-stretching) Niveles de gris de entrada (f(x,y)) Niveles de gris de salida (g(x,y)) e 1 e 2 s 1 s 2
  • 7.
    Función imadjustNiveles de gris de entrada (f(x,y)) Niveles de gris de salida (g(x,y)) e 1 e 2 s 1 s 2
  • 8.
    Complemento con imadjustOrigina l % Complemento o negativo g1=imadjust(f, [0 1], [1 0]);
  • 9.
    Corrección de intervalos(I) >> b=imadjust(a, [0 .2], []); f(x,y) g(x,y)
  • 10.
    Corrección de intervalos(II) f(x,y) g(x,y) >> b=imadjust(a, [0.8 1], []);
  • 11.
    Corrección de intervalos(III) f(x,y) g(x,y) >> b=imadjust(a, [], [0 0.2]);
  • 12.
    Corrección de intervalos(IV) f(x,y) g(x,y) >> b=imadjust(a, [], [0.8 1]);
  • 13.
    Definición del contrastef(x,y) g(x,y) b=imadjust(a, [.4 .6], [0.1 .9]);
  • 14.
    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)
  • 15.
    Transformación logarítmica >>II=im2grey(I);; >> III=im2double(II); >> V=2.*log(1+III); >> IV=0.5.*log(1+III);
  • 16.
    Transformación gamma >>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 g<1 g=1 g>1
  • 17.
    Corrección de gammaOscurece Aclara b=imadjust(a, [ ], [ ], 3); b=imadjust(a, [ ], [ ], 0.3); Origina l
  • 18.
    Definición de contraster=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
  • 19.
    Definición de contraste(II) m=0.5  L=128(uint8); E=0.8 Origina l E=10 E=50 E=1000 m=0.5
  • 20.
    Definición de contraste utilizando lógica borrosa Si Píxel es Oscuro Entonces Píxel Resultante es Oscurecer Desarrollo
  • 21.
    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
  • 22.
    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 Origina l
  • 23.
    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')
  • 24.
  • 25.
  • 26.
  • 27.
    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.
  • 28.
  • 29.
    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
  • 30.
    Transformaciones geométricas(IV) Rotación de una imagen
  • 31.
    Transformaciones geométricas(V) Otras transformaciones Traslación Original Empuje horizontal Empuje vertical
  • 32.
    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);
  • 33.
    Transformaciones geométricas(VII) Secuencia de transformaciones afines
  • 34.
    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)
  • 35.
    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
  • 36.
    Transformaciones geométricas(X) Transformaciones geométrica con Simulink
  • 37.
    Registro de lasimá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.
  • 38.
    Registro de lasimágenes (II) Selección de puntos de control ( cpselect )  
  • 39.
    Registro de lasimá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);
  • 40.
    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)
  • 41.
    Otras opciones imtool Ampliar zona Valor de píxeles Ajuste de contraste
  • 42.
    Histograma Número depíxeles r k  [0, L-1] >> imhist(a) Niveles de gris
  • 43.
    Histograma (II) >>I=imread('fig1.jpg'); >> II=rgb2gray(I);         >> [nk, rk]=imhist(II); >> bar(rk, nk, 1);
  • 44.
    Histograma normalizado Númerode píxeles r k  [0, L-1] >> imhist(I)/numel(I) Niveles de gris Número total de píxeles
  • 45.
    Selección de umbral utilizando el histograma [0, 1,..,254,255] [0, 255] Crestas Valle
  • 46.
    Selección de umbral utilizando el histograma (II) Selección visual del umbral
  • 47.
    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
  • 48.
    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
  • 49.
    Selección de umbral utilizando histograma (V) Método de Otsu
  • 50.
    Selección de umbral utilizando histograma (VI) Método de Otsu Menor varianza entre clases k=0 k=1 k=2 k=3 k=4 k=5 3.11 1.52 0.55 0.49 0.97 2.24
  • 51.
    Selección de umbral utilizando histograma (VII) Otsu Kmedias
  • 52.
    Selección de umbral utilizando histograma (VIII) Otsu Kmedias Imagen original
  • 53.
    Reducción a coloresfundamentales Selección de umbral de cada matriz RGB (2 8 ) 3 =16,777,216 2 3 =8 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]
  • 54.
    Ecualización del histogramak = 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: Se obtiene el histograma Calcular nuevos valores de intensidades Reemplazar intensidades
  • 55.
    Ejemplo de ecualizaciónA = 255 250 255 200 200 250 180 180 150 150 1 255 250 200 180 2 >>.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
  • 56.
    Algoritmo de ecualizaciónb=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
  • 57.
  • 58.
    Corrección de intervalo vs ecualización >> I=imread('lincoln.jpg'); >> II=rgb2gray(I); >> maximo=max(II(:)) 189 >> minimo=min(II(:)) 13 >> imhist(II)
  • 59.
    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
  • 60.
    Ecualización >> IV=histeq(II);>> imhist(IV) II IV III
  • 61.
  • 62.
    Resultado (II) EcualizaciónCorrección de intervalo
  • 63.
  • 64.
  • 65.
    Especificación del histogramaFunciones de transformación Función gausiana Función campana Función sigmoide Función sigmoide invertida Combinación de funciones
  • 66.
    Utilizando función deecualizació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)
  • 67.
  • 68.
    Especificación del histogramac=histeq(b, a); Combinación de funciones
  • 69.
  • 70.
  • 71.
  • 72.