/
sogliavarianza.m
50 lines (40 loc) · 1.32 KB
/
sogliavarianza.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
function [out] = sogliavarianza(fingerprint,blocksize,soglia,se_close,se_erosion)
bxv = blocksize;
byv = blocksize;
soglia_var = soglia;
dimseclose = se_close;
dimseerode = se_erosion;
[dimx,dimy]=size(fingerprint);
img = double(fingerprint);
imgd=double(fingerprint);
dimxr=dimx-mod(dimx,bxv);
dimyr=dimy-mod(dimy,byv);
imgr=imgd(1:dimxr,1:dimyr);
nbx=dimxr/bxv;
nby=dimyr/byv;
mat_var=zeros(dimxr,dimyr);
for ii=1:nbx
for jj=1:nby
blocco=imgr((ii-1)*bxv+1:ii*bxv,(jj-1)*byv+1:jj*byv);
media=sum(sum(blocco))/(bxv*byv);
varianza=1/(bxv*byv)*sum(sum(abs(media.^2-blocco.^2)));
mat_var((ii-1)*bxv+1:ii*bxv,(jj-1)*byv+1:jj*byv)=sqrt(varianza);
end
end
mat_ok=zeros(dimxr,dimyr);
pos=find(mat_var>soglia_var);
mat_ok(pos)=1;
mat_ok(dimx,dimy)=0;
bordo = 20;
mat_temp = zeros(size(mat_ok)+2*bordo);
mat_temp(bordo+1:bordo+dimx,bordo+1:bordo+dimy)=mat_ok;
mat_ok = mat_temp;
mat_ok=imclose(mat_ok,ones(dimseclose));%------------------------- close
mat_ok = mat_ok(bordo+1:bordo+dimx,bordo+1:bordo+dimy);
bordo = 20;
mat_temp = zeros(size(mat_ok)+2*bordo);
mat_temp(bordo+1:bordo+dimx,bordo+1:bordo+dimy)=mat_ok;
mat_ok = mat_temp;
mat_ok=imerode(mat_ok,ones(dimseerode));%------------------------- erode
mat_ok = mat_ok(bordo+1:bordo+dimx,bordo+1:bordo+dimy);
out = mat_ok;