Documentos de Académico
Documentos de Profesional
Documentos de Cultura
PR ROVA5 Segmentacion
PR ROVA5 Segmentacion
5.2
TCNICAS DE SEGMENTACIN DE LAS IMGENES ...............................................3 TRANSFORMADAS DE HOUGH............................................................................................3 UMBRALIZACIN ................................................................................................................6 SEGMENTACIN ORIENTADO A LAS REGIONES ................................................................8 5.3.1 TCNICAS DE DIVISIN Y FUSIN (SPLIT & MERGE) Y RBOLES CUATERNARIOS (QUADTREE) ....................................................................................................9
Departamento de Electrnica, Automtica e Informtica Industrial Escuela Universitaria de Ingeniera Tcnica Industrial
5.3
En esta prctica se tratar de experimentar con las tcnicas clsicas de segmentacin de imgenes empleando Image Procesing Toolbox de Matlab. Segmentar es dividir la imagen en regiones con inters; crear una descripcin visual de nivel medio. La prctica se inicializar exponiendo la tcnica basadas en las transformadas de Hough para lneas rectas y crculos. Luego se emplearn las tcnicas de umbralizacin combinadas con el procesamiento morfolgico y la extraccin de las caractersticas de los objetos segmentados. Y para acabar, se usarn los mtodos de crecimiento de regiones y algoritmos basados en tcnicas de dividir y fusionar (split & merge), empleando rboles cuaternarios (quadtree).
5.4
Vare los parmetros del detector de Canny para mejorar los resultados de etiquetacin de los bordes. Considrese que slo se desea determinar las lneas de gran extensin. El siguiente paso ser preparar el espacio paramtrico y aplicar posteriormente la transformacin: >>theta = 0:180; >>[acum,rho] = radon(imgBorde,theta); >>imagesc(theta,rho,acum), colorbar; >>xlabel ('theta (grados)'), ylabel ('rho (pixeles desde el centro)') >>title('Espacio de lneas'); Una vez realizada la transformacin, la seleccin de las rectas depender del umbral colocado en las votaciones. La transformada de Hough hace del espacio paramtrico una rejilla de votaciones; por cada pxel seleccionado da unos votos a cada celda elegida segn la variacin del ngulo de la normal de la recta, . Slo se considerarn aquellas rectas que superen ese umbral que sern las que se representen: >> [x,y] = find(acum>100); >>hold on; plot(theta(y),rho(x),'*r');hold off; >>t = -theta(y')*pi/180;pause; >>lineas = [cos(t)' sin(t)' -rho(x)]; >>cy = size(imgEnt,1)/2-1; >>cx = size(imgEnt,2)/2-1; >>lineas(:,3) = lineas(:,3) - lineas(:,1)*cx - lineas(:,2)*cy; >>imshow(imgEnt); >>draw_lines(lineas); Haga una funcin en Matlab donde pueda decirle el nombre del fichero de la imagen, los parmetros del operador de Canny y el umbral de las votaciones. Aplquelo sobre la imagen circuit.tif. Para una mejor comprensin de las transformadas de Hough utilice la funcin demo cvproj :
1
Canada
Departamento de Electrnica, Automtica e Informtica Industrial Escuela Universitaria de Ingeniera Tcnica Industrial
5.5
La siguiente tarea es emplear la transformada de Hough para localizar crculos. Utilice la funcin de houghcircle2 sobre la imagen coins.png. Mida cuantos pxeles es el radio de las monedas y determine el centro de cada una de ellas.
5.6
Resolucin Matlab >>imgEnt = imread('coins.png');radioMoneda = 30; >>[y0,x0,Accumulator]=houghcircle(edge(imgEnt,'canny'),radioMoneda,4) >>UmbralVotaciones = 45; [x,y]=find(Accumulator>UmbralVotaciones); >>imshow(imgEnt);hold on; >>for i=1:size(x,1) dibujarCirculos(radioMoneda,y(i),x(i)); >>end;hold off
5.2 Umbralizacin
La umbralizacin es una tcnica de segmentacin ampliamente utilizada en la industria. Se trata de definir un umbral, de forma que separe los objetos de inters respecto del fondo. Para su aplicacin se exige una clara diferencia entre los objetos y el fondo de la escena. La tcnica ms utilizada es la segmentacin por anlisis del histograma. Cuando ste presenta dos picos y en entre ambos hay un valle, el umbral quedar fijado por la posicin del valle. Los pxeles de los objetos se les aginar 1 y al fondo 0, quedando binarizada la imagen. En esta prctica, se emplear el mtodo de Otsu para la deteccin del umbral. La escena ser una imagen de microscopa. Se trata de determinar cuntas clulas hay en la imagen. Cambie al directorio /Segmentacion/Umbralizacion y haga las siguientes instrucciones: >>imgEnt = imread('n1.bmp');imshow(imgEnt);pause;
Departamento de Electrnica, Automtica e Informtica Industrial Escuela Universitaria de Ingeniera Tcnica Industrial
5.7
>>imhist(imgEnt);nivel = graythresh(imgEnt);pause >>imgBW = im2bw(imgEnt,nivel); >>imshow(imgBW); Ejecute la aplicacin winumb.exe. Visualize la imagen de las clulas y haga una tabla entre los distinto mtodos de obtencin del umbral y el nivel dado. Posteriormente, elija cual es el mejor mtodo.
Umbral
Observaciones
Sin embargo, esta etapa de umbralizacin no completa la interpretacin final de la imagen. El objetivo es contar cuntas clulas hay en ella. Se precisa de una etapa de postprocesamiento. En este caso, se va a emplear tcnicas de procesamiento morfolgico. Obsrvese que las clulas tienen una forma de tipo ovoide y que ocupa un rea de cientos de pxeles contiguos. Para la eliminacin del ruido generado por la umbralizacin se proceder a aplicar un filtrado morfolgico tipo opening: >>se = strel('disk',10); >>imgObj = imopen(imgBW,se); >>imshow([imgBW,imgObj]); Decantado los objetos de la imagen se proceder a etiquetarlos. Esta operacin tiene como finalidad asignar un nmero de 1 hasta L, siendo L el nmero de objetos en la
Departamento de Electrnica, Automtica e Informtica Industrial Escuela Universitaria de Ingeniera Tcnica Industrial
5.8
imagen para su posterior extraccin de sus caractersticas. Se rastrea la imagen y se le coloca una etiqueta buscando la conectividad del objeto: >>imgEtiq = bwlabel(imgObj); >>imshow(label2rgb(imgEtiq)); Cuando la imagen est etiquetada se puede extraer las caractersticas del objeto. En este caso, slo se va a capturar el rea, el centroide y el eje mayor y menor de cada objeto en la imagen: >>datos = regionprops(imgEtiq,'Area','Centroid',... 'MajorAxisLength','MinorAxisLength'); >>matrizSal=[]; >>for i=1:size(datos,1) matrizSal = [matrizSal;datos(i).Area,datos(i).Centroid]; end >>matrizSal
Departamento de Electrnica, Automtica e Informtica Industrial Escuela Universitaria de Ingeniera Tcnica Industrial
5.9
5.3.1 Tcnicas de divisin y fusin (split & merge) y rboles cuaternarios (quadtree) En vez de emplear semillas para el crecimiento de regiones, se pasa a la descomposicin de la imagen en regiones arbitrarias, de forma que si la regin es muy discrepante con algn tipo de regla se dividir, en caso contrario, buscar fusionarse con regiones adyacentes. Para la particin de la imagen en regiones arbitraria se suele emplear rboles cuaternarios. Se toma la imagen y se divide en cuatro rectngulos iguales. Se analiza cada regin, si sta es muy discrepante se vuelve a dividir en otras cuatro, generando un rbol cuaternario. Utilice la demo qtdemo para entender mejor los rboles cuaternarios.
La segmentacin de divisin y fusin de regiones analiza cada subregin generada por el rbol cuaternario, el cual ha dividido la imagen en regiones homogneas a diversas resoluciones. Sitese en el directorio /Segmentacin/Descomposicion:
Departamento de Electrnica, Automtica e Informtica Industrial Escuela Universitaria de Ingeniera Tcnica Industrial
5.10
>>imgEnt = imread('liftingbody.png'); >>im1=imfilter(imgEnt,fspecial('gaussian')); >>imgDescomp = qtdecomp(im1,.27); >>imgDivision = imgEnt; >>for dim = [128 64 32 16 8 4 2 1] [valores,fila,columna] = qtgetblk(im1, imgDescomp, dim); if (~isempty(valores)) doublesum = sum(sum(valores,1,'double'),2); end imgDivision = qtsetblk(imgDivision, imgDescomp, ... dim, doublesum ./ dim^2); end >>imshow([imgEnt,uint8(imgDivision)]); Una vez dividido la imagen se proceder a la fusin de regiones adyacentes empleando tcnicas de crecimiento de regiones: >>[m n] = size(imgEnt); >>D = logical(zeros(m, n,'uint8')); >>imgSegm = zeros(m, n); >>x=1;y=1; >>imgDivision=double(imgDivision); >>i=1; while( size(x,1) ~= 0) imCond = (imgDivision > (imgDivision(x(1),y(1))-20))... & (imgDivision < (imgDivision(x(1),y(1))+20)); imCond = imCond & (~D); im1 = regionGrowing2(imgDivision, x(1), y(1), 20,imCond); imgSegm(im1)=i; i = i +1; D = D | im1; [x,y]= find(D == 0); end >>imgEtiq = label2rgb(imgSegm); >>imshow(imgEtiq); Los resultados de la segmentacin se visualizan sobre la imagen de entrada: >>borde =edge(imgSegm,'canny'); >>imshow(ImagResMarcado(imgEnt,borde));
Departamento de Electrnica, Automtica e Informtica Industrial Escuela Universitaria de Ingeniera Tcnica Industrial
5.11
Departamento de Electrnica, Automtica e Informtica Industrial Escuela Universitaria de Ingeniera Tcnica Industrial