[1422d3]: / util / connComp2.m

Download this file

77 lines (46 with data), 1.1 kB

 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
function [new] = connComp2(maskR2, nCompTen, fill)
%nCompTen = numero di componenti connessi da mantenere (partendo dai pił grandi)
[L,num] = bwlabel(maskR2, 8);
if (nCompTen >= num)
nCompTen = num;
end
count = zeros(num,1);
for c=1:num
count(c) = numel(find(L==c));
end
maxT = max(count);
for t=1:num-nCompTen %for
%fprintf('%d\t',t);
mint = min(count);
if (mint == maxT)
break;
end
clear i j
Ic = find(count == mint);
Ic = Ic(1);
I = find(L==Ic);
maskR2(I) = 0;
count(Ic) = maxT+1000;
end %end for
[L,num] = bwlabel(~maskR2, 8);
count = zeros(num,1);
for (c=1:num)
count(c) = numel(find(L==c));
end
maxT = max(count);
for (t=1:num-nCompTen-1) %for
mint = min(count);
if (mint == maxT)
break;
end
clear i j
Ic = find(count == mint);
Ic = Ic(1);
I = find(L==Ic);
maskR2(I) = 0;
count(Ic) = maxT+1000;
end %end for
if (fill)
maskR2 = imfill(maskR2,'holes');
end
new = maskR2;