Francesca Pizzorni Ferrarese 05/05/2010 Image Segmentation Francesca Pizzorni Ferrarese 05/05/2010
Introduction Segmentation is one of the most important steps leading to the analysis of processed image data, its main goal is to divide an image into parts that have a strong correlation with objects or areas of the real world contained in the image complete segmentation - set of disjoint regions uniquely corresponding with objects in the input image cooperation with higher processing levels which use specific knowledge of the problem domain is necessary partial segmentation - regions do not correspond directly with image objects image is divided into separate regions that are homogeneous with respect to a chosen property such as brightness, color, reflectivity, texture, etc. In a complex scene, a set of possibly overlapping homogeneous regions may result. The partially segmented image must then be subjected to further processing, and the final image segmentation may be found with the help of higher level information. Simple segmentation problems: contrasted objects on a uniform background simple assembly tasks, blood cells, printed characters, etc. Totally correct and complete segmentation of complex scenes usually cannot be achieved in this processing phase. A reasonable aim is to use partial segmentation as an input to higher level processing. Segmentation methods global knowledge, e.g. using histogram of image features edge-based segmentations region-based segmentations Characteristics used in edge detection or region growing: brightness, texture, velocity field
Hough Transform The Hough Transform (HT) is a robust method for finding lines in images that was developed by Paul Hough. The main idea for the HT is as follows: For each line L, there is a unique line l perpendicular to L which passes through the origin. l has a unique distance and angle from the horizontal axis of the image. This angle and distance define a point in the parameter space, sometimes known as Hough space. A point in image space has an infinite number of lines that could pass through it, each with a unique distance and angle. This set of lines corresponds to a sinusoidal function in parameter space. Two points on a line in image space correspond to two sinusoids which cross at a point in parameter space. That point in parameter space corresponds to that line in image space, and all sinusoids corresponding to points on that line will pass through that point. The real solution to implement this algorithm is to quantize the parameter space by using a 2D array of counters, where the array coordinates represent the parameters of the line; this is commonly known as an accumulator array. The HT method for finding lines in images generally consists of the following three stages: Perform accumulation on the accumulator array using the binary edge image. Find peak values in the accumulator array Verify that the peaks found correspond to legitimate lines, rather than noise. La trasformata di Hough è una tecnica che permette il riconoscimento di configurazioni globali presenti in una immagine (segmenti, curve, forme prestabilite), e si basa sulla trasformazione di tutti i punti costituenti una immagine, in punti di un nuovo spazio detto spazio dei parametri. Nella sua versione tradizionale, la trasformata di Hough si applica ad immagini binarie, ovvero immagini in cui sono presenti due soli livelli, bianco e nero, ed in cui l'informazione associata ad un punto è rappresentata unicamente dalla sua posizione. Questa tecnica, ideata da Hough nel 1962, è basata sulla "validazione delle ipotesi" in cui, definita la curva che si intende cercare nella scena, per ogni punto dell'immagine si calcolano i parametri di tutte le curve che potrebbero passare per quel punto e si incrementano le celle di uno spazio n-dimensionale (con n numero dei parametri) che corrispondono alle varie curve. Si ottiene così una funzione di accumulazione definita nello spazio dei parametri. Alla fine saranno i massimi di questa funzione, ovvero i punti nello spazio dei parametri che hanno accumulato il maggior numero di "voti" a rappresentare le curve che hanno probabilità elevata di essere presenti nell'immagine, come se si trattasse di una ipotesi avvalorata dal maggior numero di conferme sperimentali. Una delle caratteristiche più interessanti della Trasformata di Hough è quella di non risentire del "rumore" presente in una immagine. Infatti, l'altezza dei picchi nella matrice di accumulazione, dipende in maniera del tutto trascurabile da eventuali lacune presenti nella retta di partenza o dall'esistenza di punti spuri presenti nello spazio immagine.
Hough Transform The MATLAB has a function called hough that computes the Hough Transform. Esercizio 1 Costruire un’immagine che contenga pixel bianchi isolati applicare la trasformata di Hough e visualizzare il risultato f=zeros(101,101); f(1,1)=1; f(101,1)=1; f(1,101)=1; f(101,101)=1; f(51,51)=1; H=hough(f); imshow(H,[])
Hough Transform Esercizio 2 Caricare l’immagine beatles.jpg e trasformarla in scala di grigi Creare l’immagine BW applicando un filtro di canny per l’estrazione degli edge Applicare la trasformata di hough a BW: [H,T,R] = hough(BW); Identificare 15 picchi in H applicando la funzione houghpeaks Visualizzare H e plottare i picchi in rosso Estrarre i segmenti di linea con la funzione lines = houghlines(BW,T,R,P,'FillGap',5,'MinLength',7); I = imread('circuit.tif'); rotI = imrotate(I,33,'crop'); BW = edge(rotI,'canny'); [H,T,R] = hough(BW); imshow(H,[],'XData',T,'YData',R,... 'InitialMagnification','fit'); xlabel('\theta'), ylabel('\rho'); axis on, axis normal, hold on; P = houghpeaks(H,5,'threshold',ceil(0.3*max(H(:)))); x = T(P(:,2)); y = R(P(:,1)); plot(x,y,'s','color','white'); % Find lines and plot them lines = houghlines(BW,T,R,P,'FillGap',5,'MinLength',7); figure, imshow(rotI), hold on max_len = 0; for k = 1:length(lines) xy = [lines(k).point1; lines(k).point2]; plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green'); % Plot beginnings and ends of lines plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow'); plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red'); % Determine the endpoints of the longest line segment len = norm(lines(k).point1 - lines(k).point2); if ( len > max_len) max_len = len; xy_long = xy; end % highlight the longest line segment plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');
Hough Transform rotI = rgb2gray(imread('beatles.jpg')); %rotI = imrotate(I,33,'crop'); BW = edge(rotI,'canny'); [H,T,R] = hough(BW); imshow(H,[],'XData',T,'YData',R,... 'InitialMagnification','fit'); xlabel('\theta'), ylabel('\rho'); axis on, axis normal, hold on; P = houghpeaks(H,15); x = T(P(:,2)); y = R(P(:,1)); plot(x,y,'s','color','red'); % Find lines and plot them lines = houghlines(BW,T,R,P,'FillGap',20,'MinLength',7); figure, imshow(rotI), hold on max_len = 0; for k = 1:length(lines) xy = [lines(k).point1; lines(k).point2]; plot(xy(:,1),xy(:,2),'LineWidth',2,'Color','green'); % Plot beginnings and ends of lines plot(xy(1,1),xy(1,2),'x','LineWidth',2,'Color','yellow'); plot(xy(2,1),xy(2,2),'x','LineWidth',2,'Color','red'); % Determine the endpoints of the longest line segment len = norm(lines(k).point1 - lines(k).point2); if ( len > max_len) max_len = len; xy_long = xy; end plot(xy_long(:,1),xy_long(:,2),'LineWidth',2,'Color','cyan');
Thresholding Thresholding algorithm Search all the pixels f(i,j) of the image f. An image element g(i,j) of the segmented image is an object pixel if f(i,j) >=T, and is a background pixel otherwise. Global Thresholding Esercizio 3 Caricare l’immagine text.jpg e trasformarla in scala di grigi Select an initial estimate for T. (A suggested initial value is the midpoint between the minimum and maximun intensity values in the image.) Segment the image using T. This will produce two groups of pixels, G1 consisting of all pixels with intensity values > T, and G2, consisting of pixels with values < T. Compute the average intensity values x1 and x2 for the pixels in regions G1 and G2. Compute a new threshod value: T=1/2(x1+x2) Repeat steps 2 through 4 until the difference in T in successive iterations is smaller than a predifined parameter T0. T = graythresh(f) I = imread('coins.png'); level = graythresh(I); BW = im2bw(I,level); imshow(BW)
Thresholding T=0.5*(double(min(f(:)))+double(max(f(:)))); done = false; while ~done g = f >= T; Tnext = 0.5*(mean(f(g))+mean(f(~g))); done = abs (T-Tnext) < 0.5; T = Tnext; end
Thresholding Local thresholding Esercizio 4 Caricare l’immagine MicroArraySlide e selezionarne una porzione (imcrop) Applicare la sogliatura globale (graythresh) e locale sull’immagine in scala di grigi
Region Based Segmentation Esercizio 5 Caricare l’immagine lungs.jpg e visualizzarla Identificare le coordinate di un seedpoint all’interno della regione del polmone a sx Utilizzare la funzione regiongrow per segmentare il polmone, assegnando una soglia opportuna Il Region Growing è un approccio alla segmentazioneopposto allo split & merge. Si scelgono, generalmente a caso, un certonumero di pixel nell'immagine, e li si e marcacome ìsemiî;Ciascun seme costituisce un ìclusterî.Iterativamente, ogni pixel viene associato alcluster più vicino secondo una distanzaopportuna che tiene conto sia della distanzaspaziale che della similitudine delle features;Quando tutti i pixel sono stati associati ad uncluster (labelled) il processo termina f=imread('lungs.jpg'); imshow(f) [g, NR, SI, TI] = regiongrow(f, 255, 65); subplot(221); imshow(f, []); title('original image'); f=rgb2gray(f); [g, NR, SI, TI] = regiongrow(f, [200 200], 15); mask=zeros(480 640) mask=zeros(480,640); mask(200,200)=1 [g, NR, SI, TI] = regiongrow(f, mask, 15); imshow(g)
Region Based Segmentation Esercizio 6 Copiare nella directory di matlab il file matitk.mexglx Caricare l’immagine penguin.jpg e trasformarla in scala di grigi (f) Concatenare lungo z quattro immagini f Determinare l’immagine gradiente GradMag = matitk('FGMRG',1.7,double(f)); Applicare la funzione di watershed f=imread('penguin.jpg'); f=rgb2gray(f); f=cat(3,f,f,f,f,f,f,f); GradMag = matitk('FGMRG',1.7,f); imshow(GradMag(:,:,1)) Water=matitk('SWS',[0.3 0],GradMag); imshow(Water(:,:,1))