-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathalnsig.m
50 lines (44 loc) · 1.52 KB
/
alnsig.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 [fsig,sf,bl,bd] = alnsig(bl,bd)
%ALNSIG aligns the signals
%
% Copyright Han Gong 2014
global deb
alen = max(bl.l); % average bl.vnal length
vlen = length(bl.l); % number of valid samples
rsig = zeros(alen,3,vlen); % re-scaled intensity
ri = linspace(0,1,alen); % re-scaled sample sites
%% re-scale intensity
for i = 1:vlen, rsig(:,:,i) = resize(bl.v{i},[alen,3]); end
ags = mean(mean(rsig,3),2); ags = ags/ags(end); % average signal
cs = zeros(vlen,1); ss = zeros(vlen,1);
rgs = squeeze(mean(rsig,2)); rgs = bsxfun(@rdivide,rgs,rgs(end,:));
for i = 1:vlen % find alignment parameters
[cs(i),ss(i)] = optfit(ags,rgs(:,i));
end
%% re-align
fsig = zeros(alen,3,vlen); % re-aligned intensity
for i = 1:vlen
% re-align intensity
si = cs(i)+linspace(ss(i),1-ss(i),alen); % re-aligned sites
for ch = 1:3
fsig(:,ch,i) = interp1(si,rsig(:,ch,i),ri,'nearest','extrap');
end
end
%% rectify boundary points and sampling line
sf.s = ss; % vertical stretching
sf.c = cs; % central shift
nbdv = bl.e-bl.s; % updated sampling vector
vw = arrayfun(@(x) norm(nbdv(:,x)), 1:length(bl.s));
bd.w = zeros(1,length(bd.t)); bd.w(~bd.t) = vw;
if deb
% re-aligned RGB wrap
rsview = permute(rsig,[1,3,2]);
sview = permute(fsig,[1,3,2]);
% plot stuff
figure('Name','Penumbra Unwrap');
subplot(2,1,1);imshow(rsview);title('unwrapped penumbra');
axis off; axis image;
subplot(2,1,2);imshow(sview);title('aligned penumbra');
axis off; axis image;
end
end