summaryrefslogtreecommitdiffstats
path: root/SD-VBS/common/toolbox/toolbox_basic/affine/m_interp4.m
diff options
context:
space:
mode:
Diffstat (limited to 'SD-VBS/common/toolbox/toolbox_basic/affine/m_interp4.m')
-rwxr-xr-xSD-VBS/common/toolbox/toolbox_basic/affine/m_interp4.m49
1 files changed, 49 insertions, 0 deletions
diff --git a/SD-VBS/common/toolbox/toolbox_basic/affine/m_interp4.m b/SD-VBS/common/toolbox/toolbox_basic/affine/m_interp4.m
new file mode 100755
index 0000000..314f140
--- /dev/null
+++ b/SD-VBS/common/toolbox/toolbox_basic/affine/m_interp4.m
@@ -0,0 +1,49 @@
1function [F,mask] = m_interp4(z,s,t)
2%INTERP4 2-D bilinear data interpolation.
3% ZI = INTERP4(Z,XI,YI) assumes X = 1:N and Y = 1:M, where
4% [M,N] = SIZE(Z).
5%
6% Copyright (c) 1984-93 by The MathWorks, Inc.
7% Clay M. Thompson 4-26-91, revised 7-3-91, 3-22-93 by CMT.
8%
9% modified to
10
11
12[nrows,ncols] = size(z);
13
14
15if any(size(z)<[3 3]), error('Z must be at least 3-by-3.'); end
16if size(s)~=size(t), error('XI and YI must be the same size.'); end
17
18% Check for out of range values of s and set to 1
19sout = find((s<1)|(s>ncols));
20if length(sout)>0, s(sout) = ones(size(sout)); end
21
22% Check for out of range values of t and set to 1
23tout = find((t<1)|(t>nrows));
24if length(tout)>0, t(tout) = ones(size(tout)); end
25
26% Matrix element indexing
27ndx = floor(t)+floor(s-1)*nrows;
28
29% Compute intepolation parameters, check for boundary value.
30d = find(s==ncols);
31s(:) = (s - floor(s));
32if length(d)>0, s(d) = s(d)+1; ndx(d) = ndx(d)-nrows; end
33
34% Compute intepolation parameters, check for boundary value.
35d = find(t==nrows);
36t(:) = (t - floor(t));
37if length(d)>0, t(d) = t(d)+1; ndx(d) = ndx(d)-1; end
38d = [];
39
40% Now interpolate, reuse u and v to save memory.
41F = ( z(ndx).*(1-t) + z(ndx+1).*t ).*(1-s) + ...
42 ( z(ndx+nrows).*(1-t) + z(ndx+(nrows+1)).*t ).*s;
43
44mask = ones(size(z));
45
46% Now set out of range values to zeros.
47if length(sout)>0, F(sout) = zeros(size(sout));mask(sout)=zeros(size(sout));end
48if length(tout)>0, F(tout) = zeros(size(tout));mask(tout)=zeros(size(tout));end
49