forked from Shrediquette/PIVlab
-
Notifications
You must be signed in to change notification settings - Fork 0
/
PIVlab_postproc.m
69 lines (66 loc) · 1.88 KB
/
PIVlab_postproc.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
% Vector map post processing in PIVlab
function [u_out,v_out] = PIVlab_postproc (u,v,calu,calv, valid_vel, do_stdev_check,stdthresh, do_local_median,neigh_thresh)
%% velocity limits
if numel(valid_vel)>0 %velocity limits were activated
umin=valid_vel(1);
umax=valid_vel(2);
vmin=valid_vel(3);
vmax=valid_vel(4);
u(u*calu<umin)=NaN;
u(u*calu>umax)=NaN;
v(u*calu<umin)=NaN;
v(u*calu>umax)=NaN;
v(v*calv<vmin)=NaN;
v(v*calv>vmax)=NaN;
u(v*calv<vmin)=NaN;
u(v*calv>vmax)=NaN;
end
%% local median check
if do_local_median==1
neigh_filt=medfilt2(u,[3,3],'symmetric');
try
neigh_filt=inpaint_nans(neigh_filt);
catch %above will fail if all vectos are filtered out before.
neigh_filt=NaN(size(neigh_filt));
end
neigh_filt=abs(neigh_filt-u);
u(neigh_filt>neigh_thresh)=nan;
neigh_filt=medfilt2(v,[3,3],'symmetric');
try
neigh_filt=inpaint_nans(neigh_filt);
catch %above will fail if all vectos are filtered out before.
neigh_filt=NaN(size(neigh_filt));
end
neigh_filt=abs(neigh_filt-v);
v(neigh_filt>neigh_thresh)=nan;
end
%% stddev check
if do_stdev_check==1
meanu=mean(u(:),'omitnan');
meanv=mean(v(:),'omitnan');
std2u=std(reshape(u,size(u,1)*size(u,2),1),'omitnan');
std2v=std(reshape(v,size(v,1)*size(v,2),1),'omitnan');
minvalu=meanu-stdthresh*std2u;
maxvalu=meanu+stdthresh*std2u;
minvalv=meanv-stdthresh*std2v;
maxvalv=meanv+stdthresh*std2v;
u(u<minvalu)=NaN;
u(u>maxvalu)=NaN;
v(v<minvalv)=NaN;
v(v>maxvalv)=NaN;
end
%% Gradient filter
%{
if do_gradient==1
u_filled=inpaint_nans(u);
v_filled=inpaint_nans(v);
gradient_filt_x =abs(gradient(u_filled));
gradient_filt_y =abs(gradient(v_filled));
u(gradient_filt_x>neigh_thresh)=nan;
v(gradient_filt_y>neigh_thresh)=nan;
end
%}
u(isnan(v))=NaN;
v(isnan(u))=NaN;
u_out=u;
v_out=v;