-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathThinning.m
120 lines (90 loc) · 3.4 KB
/
Thinning.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
function Img = Thinning(BW )
BW=~BW;
[l,m] = size(BW);
for I=1:100
BW = padarray(BW,[1 1],0,'both');
BW = double( BW ) ;
OutBW = BW ;
[row col] = find( BW == 1 ) ;
for i = 1 : length(row)
indx = row(i) ;
indy = col(i) ;
Mask = [ BW(indx-1:indx+1,indy-1:indy+1)];
if Mask(2,3) == 0 && ( Mask(1,3) == 1 || Mask(1,2) == 1)
b1 = 1;
else
b1 = 0;
end
if Mask(1,2) == 0 && ( Mask(1,1) == 1 || Mask(2,1) == 1)
b2 = 1;
else
b2 = 0;
end
if Mask(2,1) == 0 && ( Mask(3,1) == 1 || Mask(3,2) == 1)
b3 = 1;
else
b3 = 0;
end
if Mask(3,2) == 0 && ( Mask(3,3) == 1 || Mask(2,3) == 1)
b4 = 1;
else
b4 = 0;
end
b = b1 + b2 + b3 + b4 ;
Mask = logical(Mask) ;
N1 = double( Mask(2,3) | Mask(1,3) ) + double( Mask(1,2) | Mask(1,1) ) + double( Mask(2,1) | Mask(3,1) ) + double( Mask(3,2) | Mask(3,3) );
N2 = double( Mask(1,3) | Mask(1,2) ) + double( Mask(1,1) | Mask(2,1) ) + double( Mask(3,1) | Mask(3,2) ) + double( Mask(3,3) | Mask(2,3) ) ;
NCondition2 = min(N1,N2) ;
Mask = logical(Mask) ;
Mask(3,3) = ~Mask(3,3) ;
NCondition3 = ( Mask(1,3) | Mask(1,2) | Mask(3,3) ) & Mask(2,3) ;
if NCondition3 == 0 && NCondition2>=2 && NCondition2<=3 && b == 1
OutBW(indx,indy) = 0 ;
end
end
OutBW = OutBW([2:end-1],[2:end-1]) ;
BW=OutBW;
BW = padarray(BW,[1 1],0,'both');
BW = double( BW ) ;
OutBW = BW ;
[row col] = find( BW == 1 ) ;
for i = 1 : length(row)
indx = row(i) ;
indy = col(i) ;
Mask = [ BW(indx-1:indx+1,indy-1:indy+1)];
if Mask(2,3) == 0 && ( Mask(1,3) == 1 || Mask(1,2) == 1)
b1 = 1;
else
b1 = 0;
end
if Mask(1,2) == 0 && ( Mask(1,1) == 1 || Mask(2,1) == 1)
b2 = 1;
else
b2 = 0;
end
if Mask(2,1) == 0 && ( Mask(3,1) == 1 || Mask(3,2) == 1)
b3 = 1;
else
b3 = 0;
end
if Mask(3,2) == 0 && ( Mask(3,3) == 1 || Mask(2,3) == 1)
b4 = 1;
else
b4 = 0;
end
b = b1 + b2 + b3 + b4 ;
Mask = logical(Mask) ;
N1 = double( Mask(2,3) | Mask(1,3) ) + double( Mask(1,2) | Mask(1,1) ) + double( Mask(2,1) | Mask(3,1) ) + double( Mask(3,2) | Mask(3,3) );
N2 = double( Mask(1,3) | Mask(1,2) ) + double( Mask(1,1) | Mask(2,1) ) + double( Mask(3,1) | Mask(3,2) ) + double( Mask(3,3) | Mask(2,3) ) ;
NCondition2 = min(N1,N2) ;
Mask = logical(Mask) ;
Mask(1,1) = ~Mask(1,1) ;
NCondition3 = ( Mask(3,1) | Mask(3,2) | Mask(1,1) ) & Mask(2,1);
if NCondition3 == 0 && NCondition2>=2 && NCondition2<=3 && b == 1
OutBW(indx,indy) = 0 ;
end
end
OutBW = OutBW([2:end-1],[2:end-1]) ;
end
Img=~OutBW;
Img=Img(101:100+l,101:100+m);