Imágenes - Parte IV Taller de Informática I DC - FCEyN - UBA 11 de noviembre de 2015
Segmentación Segmentar es subdivir una imagen en sus regiones u objetos de interés Los algoritmos de segmentación están basados en una de las dos propiedades básicas de los valores de intensidad de la imágenes: los bordes dentro de una imagen(prewitt, Sobel, Roberts) similaridad de acuerdo a un criterio predefinido.
Segmentación básica: Umbralización o Thresholding Observando el histograma y tomando como umbral donde haya una separación entre dos grupos de intensidad
Segmentación básica: Umbralización o Thresholding Encontrando un algoritmo que determine el mejor umbral para cada imagen. Matlab tiene implementado el algoritmo de Otsu, su función umbral=graythresh(m)
Segmentar usando morfología Matemática Utiliza elementos estructurantes (se) para analizar imagenes binarias. Un se es una máscara pequeña centrada en cada pixel Matlab crea un se con la función strel.
Operaciones fundamentales Las operaciones fundamentales son erosion y dilation. erosion contrae objetos dilation expande objectos.
Erosión A B = {a b : a A b B} Ejemplo: A={(1,1),(1,2),(1,3),(1,4),(1,5),(2,1),(3,1),(4,1),(5,1)} B={(0,0),(0,1)} A-B ={(1,1),(1,2),(1,3),(1,4)}
Dilatación A B = {a + b : a A b B} Ejemplo: A={(0,1),(1,1),(2,1),(2,2),(3,0)} B={(0,0),(0,1)} A \oplus B={(0,1),(1,1),(2,1),(2,2),(3,0), (0,2),(1,2),(2,2),(2,3),(3,1)}
originalbw = imread( text.png ); se = strel( line,11,90); erodedbw = imerode(originalbw,se); figure, imshow(originalbw) figure, imshow(erodedbw)
% con imgenes de grises originali = imread( cameraman.tif ); se = strel( ball,5,5); erodedi = imerode(originali,se); figure, imshow(originali), figure, imshow(erodedi)
originalbw = imread( text.png ); se = strel( line,11,90); dilatedbw = imdilate(originalbw,se); figure, imshow(originalbw), figure, imshow(dilatedbw)
%con imagen grayscale con mscara rolling ball: originali = imread( cameraman.tif ); se = strel( ball,5,5); dilatedi = imdilate(originali,se); figure, imshow(originali), figure, imshow(dilatedi)
Ejemplo de Segmentación I = imread( rice.png ); I2 = imclearborder(i); figure(1) subplot(1,2,1),imshow(i) subplot(1,2,2), imshow(i2)
Ejemplo de Segmentación umbral=graythresh(i) BW = im2bw(i); %busco un umbral a mano mayor a u y menor a u me quedo con 0.2 BW2 = im2bw(i2,0.3); BW2 = im2bw(i2,0.6); BW2 = im2bw(i2,0.4); %umbral=0.2 BW2 = im2bw(i2,0.2); figure(2),subplot(1,2,1),imshow(bw),subplot(1,2,2), imshow(bw2)
Ejemplo de Segmentación [L n] = bwlabeln(bw2); figure(3),imshow(l)
Ejemplo de Segmentación %selcciono una subimagen donde conozco cuantas regiones hay con ginput(2 imshow(bw2(15:84,200:244)); A=BW2(15:84,200:244); [L n] = bwlabeln(a); %binariza seg\ un umbral automatico y reconoce n re figure(4), imshow(l)
Ejemplo de Segmentación RGB = label2rgb(l, jet, k );%colorea figure(5), imshow(rgb)
Ejemplo de Segmentación P = bwperim(l,8);% toma como regiones los que tienen figure(6),imshow(p) desde 8 conectados
f u n c t i o n [ Hero n1 n2 ] = b a c t e r i a s ( ) %UNTITLED2 Summary o f t h i s f u n c t i o n goes h e r e % D e t a i l e d e x p l a n a t i o n goes h e r e H = imread ( h e l a. j p g ) ; f i g u r e, imshow (H), t i t l e ( o r i g i n a l ) Haux = H; Haux ( :, :, 2) = 0 ; f i g u r e, imshow ( Haux ), t i t l e ( o r i g i n a l, banda 2 = 0 ) Haux ( :, :, 3) = 0 ; f i g u r e, imshow ( Haux ), t i t l e ( o r i g i n a l, Banda 2 = 0, Banda 3 =0 ) f i g u r e, i m h i s t ( Haux ( :, :, 1 ) ), t i t l e ( p l o t Histograma Banda 1 ) Hbin = ones ( s i z e ( Haux ) ) ; Hbin ( f i n d ( Haux < 100) ) = 0 ; f i g u r e, imshow ( Hbin ) ; Z = edge ( Hbin ( :, :, 1 ), s o b e l ) ; f i g u r e, imshow (Z), t i t l e ( edge s o b e l ) [ L1 n1 ] = b w l a b e l n (Z) ; f i g u r e, imshow ( L1 ), t i t l e ( B i n a r i a ) Hero=e r o s i o n a r ( Haux ( :, :, 1 ) ) ; [ L2 n2 ] = b w l a b e l n ( Hero ) ; t i t l e ( e r o s i o n a d a ) f i g u r e, imshow ( L1 ) end
Modelo de Elevación Digital
Modelos digitales de Elevación- Introducción Importancia Los Modelos de Elevación Digital o DEM alcanzan importancia debido a que son datos topográgicos digitales de gran interés por su origen y el conocimiento que representan. La precisión de DEM en la simulación de los verdaderos parámetros terrestres de elevación, pendiente y aspecto mejora significativamente la calidad y calibre del conocimiento en numerosas aplicaciones en la tierra, ambiental y ciencias de la ingeniería.
Qué es un DEM? Definiciones de DEM Un DEM proporciona una representación digital de una porción de la terreno superficie de la tierra sobre una superficie de dos dimensiones (UNEP/GRID) http://www.grid.unep.ch. Un DEM es una matriz ordenada de números que representa la la distribución espacial de las elevaciones por encima de algún arbitraria datums en el paisaje ( Meijerink et al.,1994 ) Un DEM es un archivo digital que consiste en elevaciones del terreno para posiciones suelo a intervalos regularmente espaciados horizontales (USGS )
DEM vs DTM Diferencias Digital Terrain Model (DTM) representa información del terreno usando muestreo de valores dicretos como pendiente, por ej. DEM representa los datos de elevación.
Estructura del DEM Líneas Describen la elevación del terreno por los contornos (almacenada en forma de gráficos digitales de ĺınea, DGLS), los pares x,y a lo largo de cada uno contornos de elevación especificada
Estructura del DEM GRID Las elevaciones se almacenan en una serie de cuadrículas.
Estructura del DEM tin Net Triangular Irregular, es una red de interconexión tringulos con nodos espaciados irregularmente o puntos de observación con coordenadas x, y, z valores. Ventaja sobre GRID es su capacidad para generar ms información en reas de relieve complejo.
Procesamiento DEM Remover hendiduras (Sinks) Cálculo de pendientes (Slopes) Dirección de pendiente (Aspect) GRID Acumulation (Flow Accumulation) Stream Order
Ejemplo Matlab http://dds.cr.usgs.gov/srtm/version2 1/SRTM3/South America/ Archivo: S43W065.hgt indica 43o de latitud sur y 65o longitud oeste
Ejemplo Matlab [ f i d 1, mess ]= fopen ( S35W059. hgt, rb, b ) ; fopen: Abre un archive y obtiene información acerca de él. La información la guarda en fid1 junto a mensaje en mess. fid1: es un número entero que identifica el archivo. mess: mensaje de error si el archivo no puede ser abierto. Argumentos: Nombre del archivo: entre comillas se coloca el nombre del archivo a abrir Permisos: Tipo de archivo En fid1 tengo un identificador de archivo.
Ahora tenemos que recuperar los datos: fread: Lee los datos de un archivo cuyo identificador se obtuvo con fopen. [ A, count ]= f r e a d ( f i d 1, [ 1 2 0 1, 1 2 0 1 ], b i t 1 6 ) ; A: matriz donde se guardan los datos obtenidos count: cantidad de elementos leídos en A Argumentos: fid1: obtenido con fopen [MxN]: tamaño de A bit16 : formato en 16 bits Con fclose cerramos el archivo utilizando el identificador obtenido con fopen: f c l o s e ( f i d 1 ) ;
Procesar la Matriz A 1) Trasponemos para que esté en igual posición que el mapa. A=A ; A=f l i p u d (A) ; 2) Muchas veces los datos de un archivo.htg contienen errores que estn dados por números negativos. Por lo tanto, recorrer la matriz y corregir estos problemas: f o r i =1: s i z e (A, 1 ) f o r j =1: s i z e (A, 2 ) i f ( A( i, j ) < 10000 ) A( i, j ) = A( i 1, j ) ; end ; end ; end ;
Procesar la Matriz A 3) Por último, trataremos de bajar un poco la resolución de la imagen que tenemos para que no tarde tanto al mostrar y usamos la función surf para mostrar la imagen en 3d: B = A( 5 0 0 : 8 0 0, 2 0 0 : 5 0 0 ) ; a x i s ( [ 0, 1 2 0, 0, 1 2 0 ] ) ; s u r f (B)
4) Por último agregamos color a la imagen usando la función shading. Esta función posee 3 maneras de ejecución: a) shading flat: cada segmento de la malla del grfico posee un color constante s u b p l o t ( 3, 1, 1 ) s p h e r e ( 1 6 ) a x i s s q u a r e s h a d i n g f l a t t i t l e ( F l a t Shading )
b) shading faceted: se muestran las ĺıneas negras de la malla. Es la forma default s u b p l o t ( 3, 1, 2 ) s p h e r e ( 1 6 ) a x i s s q u a r e s h a d i n g f a c e t e d t i t l e ( Faceted Shading )
c) shading interp: varía el color de cada segmento interpolando los colores a lo largo de la linea s u b p l o t ( 3, 1, 3 ) s p h e r e ( 1 6 ) a x i s s q u a r e s h a d i n g i n t e r p t i t l e ( I n t e r p o l a t e d S h a d i n g )
Código Completo [ f i d 1, mess ]= fopen ( S35W059. hgt, rb, b ) ; [ A, count ]= f r e a d ( f i d 1, [ 1 2 0 1, 1 2 0 1 ], b i t 1 6 ) ; f c l o s e ( f i d 1 ) ; A=A ; A=f l i p u d (A) ; f o r i =1: s i z e (A, 1 ) f o r j =1: s i z e (A, 2 ) i f ( A( i, j ) < 10000 ) A( i, j ) = A( i 1, j ) ; end ; end ; end ; B = A( 5 0 0 : 8 0 0, 2 0 0 : 5 0 0 ) ; a x i s ( [ 0, 1 2 0, 0, 1 2 0 ] ) ; s u r f (B), s h a d i n g i n t e r p, view ( 0, 9 0 )