• No se han encontrado resultados

La camisa de Margarita

Our problem statement is as follows. Given a set E of edge segments and the seed point s0,

classify the edge segments into subsets, each corresponds to a colon fold. Given E={e1, e2, e3, e4, e5}

and s0 which is the CIF location, we group the edge segments in E into subsets by performing region

expansion iteratively to estimate each fold region, starting from the innermost fold to the outerrmost fold. Each subset has a 1-1 mapping with a colon fold. Each fold region is bounded by its assigned edge segments and/or association/restriction lines created to represent the missing real edge segments. The already assigned edge segments are then removed from the subsequent consideration. The process is repeated until E becomes empty. Figure 4.2(a-e) illustrates the first iteration to find the region estimating the innermost fold. The region is conceptually expanding from the seed point s0 in

all directions (Figure 4.2(a)). During the expansion, a tip event occurs when the region reaches a tip of an edge segment for the first time. Figure 4.2(b) shows a tip event at p1. At each tip event, we find

tips must be visible (not blocked by any edge segments or restriction lines) from s0 and in an opposite

(a) (b) (c)

(d) (e) Figure 4.2 (a-e) Illustration of how to find edge segments of the innermost contour using the seed

point s0, which results in e1 and e3 assigned to the innermost contour and removed from consideration

in the next iteration; (f) s1 is the new estimated colon center of the innermost fold. See text for

explanation. Region expansion of the 2nd innermost fold starts with s1 as the seed.

tip direction of the tip creating the tip event. In Figure 4.2(b), p2 is the closest eligible tip of p1. We

connect the two tips if a smooth connection between them is possible by checking whether the angle ∠p1s0p2, the angle between p1p2 and the tangential line of p1, the angle between p1p2 and the

tangential line of p2, each is less than a small threshold. If so, the connection between them is possible

by association. In Figure 4.2(b), the association is possible. We use a line to represent the association between the two tips and treat edge e1, the association line, and edge e3 as one long edge segment. In

Figure 4.2(c), the tip event occurs at p3; however, its closest eligible tip p4 cannot be associated with

p3. In this case, we draw a tangential half-line from p3 as shown in Figure 4.2(c). We call this line the

e3 e1 e2 e4 e5 s0 p1 p2 p3 p4 p5 p6 p7 p8 p1 s0 p2 p3 s0 p4 p4 s0

restriction line. The association or restriction line is created to represent a missing edge segment.

Similarly, restriction lines from p4 and p5 are drawn as shown in Figure 4(d and e). At the end, the

region stops expanding because it is bounded by edge segments and/or association, restriction lines, or image boundary (Figure 4.2(e)). The edge segment of which both tips is on the region boundary (i.e., the associated e1 and e3) is assigned to the current colon fold and the new center point (s1 in Fig.

4(e)) of the bounded region is computed. Notice that edge e2 is not assigned to the innermost fold

because one of its tips, p6, is not on the region boundary. The assigned edge segments are removed

from E and the next iteration of region expansion starts again with the modified E and the new seed point s1 to detect the next fold contour.

The pseudocode of the technique is shown in classifyEdgeSegments(E,s) where E is the set of n edge segments and a seed point s which are the result of the pre-processing step. The output is the set

G which is a set of sets of edge segments for each contour i and C is the set of center points of all

detected fold contours. The technique calls RegionExpansion(E, s, c, G, C) in line 2 with c initialized to one where c is an iteration index. Each edge has two end points and we assign different labels (clockwise or counterclockwise) to these end points according to the direction with respect to s as a center. Thus, we represent edge ei = picpiĉ where c stands for clockwise and ĉ stands for

counterclockwise. Classifying end points into two groups by its direction is important since we only want to connect two end points from different directional groups.

RegionExpansion is a recursive function that does region expansion one fold at a time from the

innermost fold (c=1) to the outermost fold (c=n). Each time it assigns edge segments to a specific fold and adds them into the output set for the fold. We use four temporary sets: Q, Q’, T, and Fc. The

event queue Q keeps visible end points of given edges in increasing order of Euclidean distance from the center of the fold under consideration.

classifyEdgeSegments(E, s){

Input: E={e1, e2,…,en} is a set of n edge segments and ei=picpiĉ.

s(sx, sy): Seed point at the coordinates sx, sy

Output: G={F1, F2,…, Fn} where Fi={ei1, ei2,…,eim} (representing the ith fold)

and eij=pijcpijĉ (representing the edges assigned to the ith fold)

C={s1, s2,…, sn} where si(six, siy) is the center point of the ith fold.

1. G ←{ }, C ←{ } // {} represents an empty set 2. (G, C) ← RegionExpansion(E, s, 1, G, C) 3. return (G, C)

}

Figure 4.3 Pseudo code for assigning edge segments to colon folds

regionExpansion(E, s, c, G, C){

Input: E={e1, e2,…,en} is a set of n edge segments and ei=picpiĉ.

s(sx, sy): Seed point // the estimated center of the current fold

c: Iteration index

G={Fi| Fi={ei1, ei2,…,eim} and 1≤i≤c-1} // G ={ } when c=1

C={si| si is the center of the i th

fold, 1≤i≤c-1} // C ={ } when c=1 Output: G = G ∪ {Fc} where Fc is a set of edge segments assigned to the c

th

innermost fold. C = C ∪ {sc} where sc is the estimated center point of the c

th

innermost fold. 1. if E is empty then return (G, C)

2. Q ← {end points of edges visible from s in increasing order of Euclidean distance from s} 3. Q’←{ }, T ←{ }, Fc ←{ }.

4. while Q is not empty do{

5. Fetch the first element pij from Q . // pij is the nearest end point of any edge i from s

// c denotes the clockwise end point and ĉ denotes the counter clockwise end point

6. Draw a restriction line of pij. (j=c or ĉ).

7. Remove points blocked by the restriction line from Q and Q’. 8. Remove lines containing those points from T.

9. Q’← Q’ ∪{pij}

10. if there exists pi*ĵ in Q’ where ∠pij spi*ĵ < α then { // α is a constant; association occurs

11. Remove pij and pi*ĵ from Q’.

12. Insert line pijpi*ĵ into T. //connect the two points with a line

14. }

// A this point, a region is closed by real edges and restriction lines or image boundary. 15. sc ← Center of the closed region

16. while Q’ is not empty do{ 17. Fetch a point pkj from Q’.

18. F ←{ } // F is a temporary storage. 19. pk*ĵ pkĵ

20. while there exists a line in T that has pk*ĵ as an end point do{

21. Let pk*ĵpk**j be the line.

22. F← F ∪{ek*} // ek* = pk*ĵpk*j

23. pk*ĵ pk**ĵ // Search the chain of association

24. }

25. if there exists pk*ĵ in Q’ then{

26. Fc← Fc ∪ F 27. Fc← Fc ∪{ek*} // ek* = pk*ĵpk*j 28. E ← E - Fc 29. } 30. } 31. G ← G ∪ {Fc} 32. C ← C ∪ {sc} 33. c ← c+1 34. (G, C) ← RegionExpansion(E, sc, c, G, C) 35. return (G, C) }

Figure 4.4 Pseudo code of the region expansion used in our method for assigning edge segments to colon folds

After initialization, line 5 gets the first event point pij from Q which is closest to the seed point

and draw a line from pij which is tangential to ei on pij. We call this tangential line a restriction line. In

Line 7, we update Q and Q’ by removing points blocked by the restriction line. This is to prevent other outer edge segments from being considered. In Line 8, we delete associations containing those blocked points from T. Next, we insert pij into Q’ and check if there is a point associable with pij. If so,

we insert the association into T and remove the two points from Q’. Q’ is used to store points pij

detected by region expansion and is updated in line 9 after each event point is processed where 1 i

n and j = c or ĉ. If there exist pij and pi*ĵ in Q’ where the angle ∠pijspi*ĵ is less than α (set to 25° in

our implementation), we connect pij and pi*ĵ with a line and consider that ei and ei* are conceptually

merged into one edge segment. See Figure 4.5. In other words, there is an association between these two edges. When an association occurs, the two associated poins are removed from Q’ and stored in T.

Fc keeps edge segments that are classified as belonging to the c th

innermost fold and is the output of the cth iteration. piĵ pi*ĵ pi*j pi**j pij pi**ĵ s

Figure 4.5 Diagram showing how an association is formed among edge segments

We repeat line 4-12 until Q is empty. In line 15, we calculate the center of the region defined by edge segments, restriction lines and image boundary and update s with the newly calculated center. Now, we start to get the first element of Q’ and iterate lines 16-19 until Q’ is empty. We also need to check

T since T contains points that got removed from Q’ through the association process. When Q’ is empy,

output Fc and sc and check if E is empty. If it is, the procedure returns; otherwise, c gets incremented

Documento similar