-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsubsampler.m
More file actions
97 lines (79 loc) · 2.06 KB
/
subsampler.m
File metadata and controls
97 lines (79 loc) · 2.06 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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
%%subsampler
im = imread('./data/mouse.png');
[m,n,~] = size(im);
ed_im = uint8(edge(rgb2gray(im),'canny'));
% imshow(ed_im)
d=1;
thres=0;
edd_im = padarray(ed_im,[d,d]);
msk_im = uint8(zeros(m,n));
mask_im = padarray(msk_im,[d,d]);
final_mask = uint8(zeros(m,n));
for i=1+d:m+d
for j=1+d:n+d
if edd_im(i,j)==1
msk = uint8(ones(2*d+1,2*d+1));
val = sum(sum(msk.*mask_im(i-d:i+d,j-d:j+d)));
if val<=thres
final_mask(i-d,j-d)=1;
mask_im(i-d:i+d,j-d:j+d)=ones(2*d+1,2*d+1);
end
end
end
end
figure;
imshow(final_mask*255)
window = 3;
pd = (window-1)/2;
pmsk = padarray(uint8(ones(m,n)),[pd,pd]);
for i=pd+1:pd+m
for j=pd+1:pd+n
if final_mask(i-pd,j-pd)
pmsk(i-pd:i+pd,j-pd:j+pd,:) = 0;
end
end
end
pmsk = pmsk(pd+1:pd+m,pd+1:pd+n,:);
pmsk(1,:,:) = 0;
pmsk(m,:,:) = 0;
pmsk(:,1,:)= 0;
pmsk(:,n,:) = 0;
figure;
imshow(pmsk*255)
imwrite(logical(pmsk),'./data/mask.pbm')
res_im = (1-pmsk).*im;
figure;
imshow(res_im)
%%supersampler
win = (2*d+1);
res_ed = padarray(final_mask,[win,win]);
res_resim = padarray(res_im,[win,win]);
col = double(res_resim);
% imshow(col)
% size(col)
[sx,sy,~] = size(res_ed);
cnt = double(ones(sx,sy,3));
for i=1+win:m+win
for j=1+win:n+win
if res_ed(i,j)==1
for k=i-win:i+win
for l=j-win:j+win
if res_ed(k,l)==1
for t=0:0.25:1
cx = floor(t*i+(1-t)*k);
cy = floor(t*j+(1-t)*l);
cnt(cx-d:cx+d,cy-d:cy+d,:)=cnt(cx-d:cx+d,cy-d:cy+d,:)+double(ones(win,win,3));
col(cx-d:cx+d,cy-d:cy+d,:)=col(cx-d:cx+d,cy-d:cy+d,:)+double(res_resim(i-d:i+d,j-d:j+d,:))*t+double(res_resim(k-d:k+d,l-d:l+d,:))*(1-t);
end
end
end
end
end
end
end
size(col)
col = uint8(col./cnt);
col = col(1+win:m+win,1+win:n+win,:);
figure;
imshow(col);
imwrite(col,'./data/res_im.png')