B.

12 Segmentierung 2
1. Split and Merge

(a) Wenden Sie auf das folgende Bild den Split-and-Merge-Algorithmus an: Gemeinsame Eigenschaft: gleicher Grauwert (Das darunterliegende Gitter ist nur als Hilfestellung gedacht)!

11

12 131 132 133 422 423

21

22 231 232 233 322 323

14

134 421

24

234 321

41

424

31

324

44

43

34

33

(b) Zeichnen Sie den zugehörigen Quadtree!
R

1

2 1

3

4

11

12

13

14

21

22

23

24

31

32

33

34

41

42

43

44

1 31

1 32

1 33

13 4

23 1

2 32

23 3

2 34

32 1

3 22

3 23

3 24

421

42 2

42 3

42 4

321. 233. G. 324. If necessary. 21. % % Note that in the function call we use @PREDICATE for the value of % fun. ob die Vereinigung es nicht tut. 131. the % program pads the input image with zeros to the nearest square % size that is an integer power of 2.9 of the book. In the % output. 14. 41. 132. MINDIM % (a positive integer power of 2) specifies the minimum dimension % of the quadtree regions (subimages) allowed. 44. Its syntax is % % FLAG = PREDICATE(REGION) which must return TRUE if the pixels % in REGION satisfy the predicate defined by the code in the % function. 232. It sets FLAG to TRUE if the % intensities of the pixels in REGION have a standard deviation % that exceeds 10.m. dass der Hintergrund die Eigenschaft nicht hat. stellen Sie die benötigte Funktion predicate zur Verfügung (welche Eigenschaft soll Ihre Region haben?) und testen Sie die Funktion an einem Bild. % % function flag = predicate(region) . mindim. This guarantees that the % algorithm used in the quadtree decomposition will be able to % split the image down to blocks of size 1-by-1. @PREDICATE) segments image F by using a % split-and-merge approach based on quadtree decomposition. % Otherwise FLAG is set to false. 231. Das Split erfolgt wie in der Vorlesung beschrieben. 424 R2 24. 423 2. 31. 133. PREDICATE is a function in the MATLAB path. 322. Man muss also dafür sorgen. 12. % G = SPLITMERGE(F. 134. wo sich Region und Hintergrund gut unterscheidet. the value of FLAG must be FALSE. each connected region is labeled with a different % integer. fun) %SPLITMERGE Segment an image using a split-and-merge algorithm. Schauen Sie sich die Funktion an splitmerge. 34. Das Merge kontrolliert nur. 234.m. provided by the % user. ob die beiden zu mergenden Regionen die Eigenschaft einzeln erfüllen. Split and Merge: Matlab Auf dem Skripteserver liegt eine Funktion splitmerge. MINDIM. 22. % % The following simple example of function PREDICATE is used in % Example 10. and their mean intensity is between 0 and 125. 323.(c) Listen Sie die zu den zusammengehörigen Bildteilen gehörigen Teilstücke auf! R1 11. 421. otherwise. 43. aber nicht. die ein rudimentäres Split & Merge bereitstellt. 422. function g = splitmerge(f. 33. The result is % cropped back to the original size of the input image.

& S. g)). r. K). meanIm) % THIS FUNCTION IS PART OF FUNCTION SPLIT-MERGE. % Begin the merging stage. Prentice-Hall. L. ylow) = 1. 1:N). yhigh = ylow + K . C. 2004 $Revision: 1.N]. mindim. mindim. if ~isempty(vals) % Check the predicate for each of the regions % of size K-by-K with coordinates given by vectors % r and c. . region = f(xlow:xhigh. f = padarray(f. imshow(MARKER) % Finally. IT DETERMINES % WHETHER QUADREGIONS ARE SPLIT. for I = 1:length(r) xlow = r(I).6 $ $Date: 2003/10/26 22:36:01 $ % Pad image with zeros to guarantee that function qtdecomp will % split regions down to size 1-by-1. Q = 2^nextpow2(max(size(f))). Gonzalez. g = zeros(size(f)). % Now merge by looking at each quadregion and setting all its % elements to 1 if the block satisfies the predicate. if flag g(xlow:xhigh. %-------------------------------------------------------------------% function v = split_test(B. Use full because S is sparse. meanIm). Woods. %Perform splitting first. flag = (sd > 10) & (m > 0) & (m < 125). % Get the size of the largest block. MARKER = zeros(size(f)). % Set the output image initially to all zeros. region. The function returns in v % logical 1s (TRUE) for the blocks that should be split and % logical 0s (FALSE) for those that should not. Copyright 2002-2004 R.meanIm). Q . fun . [M. obtain each connected region and label it with a % different integer value using function bwlabel. 'post').% % % % % % sd = std2(region). ylow:yhigh). flag = feval(fun. m = mean2(region). meanIm = mean2(f). Lmax = full(max(S(:))). MARKER(xlow. @split_test. The MARKER array is % used later to establish connectivity. ylow = c(I). N] = size(f). Eddins Digital Image Processing Using MATLAB. E. xhigh = xlow + K . c] = qtgetblk(f. R. ylow:yhigh) = 1.M. [Q .1. end end end end % nnz(MARKER)/prod(size(MARKER)) %figure. for K = 1:Lmax [vals. fun. S = qtdecomp(f. % Crop and exit g = g(1:M.1. g = bwlabel(imreconstruct(MARKER. S.

end end function result = predicate(region. the appropriate element of v is set to % FALSE. passed by qtdecomp. If the predicate function % (fun) returns TRUE. k = size(B. I). the region is split. :. . Else. so we set the appropriate % element of v to TRUE. meanIm). for I = 1:k quadregion = B(:. if ~flag v(I) = true. % k is the number of regions in B at this point in the procedure. quadregion.% Quadregion B. v(1:k) = false. if size(quadregion. % Perform the split test on each block. result = (sd < 10). continue end flag = feval(fun. meanIm) %UNTITLED1 Summary of this function goes here % Detailed explanation goes here sd = std2(region). 3). 1) <= mindim v(I) = false. is the current decomposition of % the image into k blocks of size m-by-m.

bild7 = bwmorph(bild6.jpg! bild = imread('haus. im2bw. imshow(bild8). z. (b) Lassen Sie den Betrag des Gradienten (z. bild2 = imfilter(bild. graythresh(bild3)).B aus Sobelfiltern) berechnen! filter = fspecial('sobel'). (c) Binarisieren Sie das Gradientenbild mit einem geeigneten Threshhold! bild3 = imadjust(bild2). graythresh(bild5)). haus. figure.jpg').B. fspecial. figure. bwmorph (a) Laden Sie ein Bild mit Kanten. imshow(bild7). bild8 = bwmorph(bild4. 'remove'). Kantendetektion: Matlab nützliche Funktionen: imlter. nach a) nach b) nach c) nach d) . filter). 'remove'). bild6 = im2bw(bild5.3. (d) Verdünnen Sie die Kanten zu einzelnen Pixeln! bild5 = imadjust(bild). bild4 = im2bw(bild3.

(b) Informieren Sie sich über die Funktion edge! (c) Lassen Sie das Kantenbild mit edge mit den default-Einstellungen berechnen für Sobel. z. imshow(bild2). Canny! function result = aufgabe4( ) %UNTITLED1 Summary of this function goes here % Detailed explanation goes here bild = imread('haus. figure('Name'.jpg! bild = imread('haus.'canny'). imshow(bild3). haus. figure('Name'.jpg').B.4.'LoG').'log'). bild2 = edge(bild. imshow(bild1). Sobel LoG Canny (d) Was macht der Canny-Kantendetektor alles zusätzlich zur Filterung? (e) Wählen Sie die Parameter der Funktion edge per Hand und versuchen Sie die interessanten Kanten anzeigen zu lassen (und die weniger interessanten nicht)! .'sobel'). LoG.'Sobel'). Kantendetektion: Matlab nützliche Funktionen: edge (a) Laden Sie ein Bild mit Kanten. bild3 = edge(bild. bild1 = edge(bild. figure('Name'.'Canny').jpg').