-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathexudates_detection.m
69 lines (62 loc) · 1.51 KB
/
exudates_detection.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
function exu = exudates_detection(im, mask)
im = Norm(im.*mask);
h = 1/9*ones(3*3);
mu = conv2FFT(h, im);
mu = (mu-min(mu(:)))./(max(mu(:))-min(mu(:)));
h = 1/9*ones(3*3);
sigma = sqrt(conv2FFT(h, (im-mu).^2));
thres = 0.8;
% figure
% imshow(mu,[])
% figure
% imshow(sigma,[])
bw = ((mu > 0.7) & (sigma > 0.05)) .* mask;
if sum(bw(:)) > 0.05*sum(mask(:))
exu = zeros(size(im));
return;
end
cc = bwconncomp(bw);
% figure
% imshow(bw)
addpath F:\Dropbox\Code\Retinal\neat_code
% group adjacent pixels
idx = [];
index = [];
numPixels = cellfun(@numel,cc.PixelIdxList);
for i = 1:cc.NumObjects
idx = [idx; cc.PixelIdxList{i}];
index = [index; i*ones(numPixels(i),1)];
end
[r,c] = ind2sub(size(im),idx);
uind = unique(index);
for i = 1:length(uind)
pr = r(index==uind(i),:);
pc = c(index==uind(i),:);
cmin = inf;
gid = 0;
for j = 1:length(uind)
if j == i
continue;
end
cr = r(index==uind(j),:);
cc = c(index==uind(j),:);
[cmin, pos] = min([cmin, min(min(dist([cr,cc],[pr,pc]')))]);
if pos == 2
gid = uind(j);
end
end
if cmin < 10
index(index==uind(i)) = gid;
end
end
exu = zeros(size(im));
uind = unique(index);
for i = 1:length(uind)
if sum(index==uind(i)) < 5
continue;
end
tmp_mask = zeros(size(im));
tmp_mask(idx(index==uind(i))) = 1;
region_mask = getConvHull(tmp_mask);
exu = exu | region_mask;
end