added codes
This commit is contained in:
114
matlab_code/unwrap.m
Normal file
114
matlab_code/unwrap.m
Normal file
@@ -0,0 +1,114 @@
|
||||
%%PHASE UNWRAP
|
||||
%unwraps given data with three different unwrapping methods
|
||||
%compares quantitatively to OMME results
|
||||
%%
|
||||
clear
|
||||
clc
|
||||
|
||||
%these are from the repository for the Loecher 2014 paper
|
||||
addpath('4dflow-lapunwrap/utils');
|
||||
addpath('4dflow-lapunwrap/unwrap');
|
||||
%%
|
||||
struct = load('path_to_data_file');
|
||||
wrapped = struct.pca_p;
|
||||
mask_struct = load('path_to_mask_file');
|
||||
mask = mask_struct.labels;
|
||||
si = size(wrapped);
|
||||
si(3) = 15;
|
||||
phi = zeros(si(1), si(2), 1, si(3));
|
||||
noise_std_percent = 0.15;
|
||||
noise_std = noise_std_percent *pi;
|
||||
rng('default')
|
||||
rng(100 + file{1}(2))
|
||||
noise = noise_std.*randn(si);
|
||||
phi(:, :, 1, 1:si(3)) = (wrapped(:, :, 1:si(3)) + noise).*mask(:, :, 1:si(3));
|
||||
phi_wn = zeros(si(1), si(2), 1, si(3));
|
||||
phi_wn(:, :, 1, 1:si(3)) = (wrapped(:, :, 1:si(3))).*mask(:, :, 1:si(3));
|
||||
phi = phi - 2*pi*(phi > pi);
|
||||
phi = phi + 2*pi*(phi < -pi);
|
||||
masked = zeros(si(1), si(2), si(3));
|
||||
masked(:, :, :) = phi(:, :, 1, :);
|
||||
|
||||
%%
|
||||
%laplacian unwrap
|
||||
tic
|
||||
n_u4 = unwrap_4D(phi);
|
||||
toc
|
||||
lap4d_phi = phi + double(n_u4).*2*pi;
|
||||
n_u3 = zeros(size(n_u4), 'int8');
|
||||
tic
|
||||
for i=1:si(3)
|
||||
n_u3(:, :, :, i) = unwrap_3D(phi(:, :, :, i));
|
||||
end
|
||||
lap3d_phi = phi + double(n_u3).*2*pi;
|
||||
toc
|
||||
|
||||
%%
|
||||
%temporal unwrap
|
||||
t_ref = 15;
|
||||
tic
|
||||
temp_phi = temporal(phi, t_ref);
|
||||
toc
|
||||
|
||||
%%
|
||||
%probability unwrap
|
||||
w_s = 1.0;
|
||||
w_t = 2.5;
|
||||
t_low = 0.32;
|
||||
t_high = 0.75;
|
||||
tic
|
||||
prob_phi = probability(phi, t_low, t_high, w_s, w_t);
|
||||
toc
|
||||
|
||||
%%
|
||||
%omme
|
||||
struct = load('path_to_higher_venc_file');
|
||||
high_data = struct.pca_p;
|
||||
high_venc = zeros(size(phi));
|
||||
high_venc(:, :, 1, :) = (high_data(:, :, 1:si(3))).*mask(:, :, 1:si(3));
|
||||
highv = 150;
|
||||
lowv = 75;
|
||||
high_venc = high_venc.*(highv/pi);
|
||||
low_venc = phi.*(lowv/pi);
|
||||
tic
|
||||
[omme_v, dyn, conf, std] = omme([high_venc(:), low_venc(:)], [highv, lowv]);
|
||||
omme_v = reshape(omme_v, [si(1), si(2), 1, si(3)]);
|
||||
toc
|
||||
|
||||
%%
|
||||
%evaluate!
|
||||
temp_v = temp_phi.*lowv/pi;
|
||||
lap3d_v = lap3d_phi.*lowv/pi;
|
||||
lap4d_v = lap4d_phi.*lowv/pi;
|
||||
prob_v = prob_phi.*lowv/pi;
|
||||
v = phi.*lowv/pi;
|
||||
|
||||
t = 1:si(3);
|
||||
base_error = eval_error(v(:, :, 1, t), omme_v(:, :, 1, t))
|
||||
t_error = eval_error(temp_v(:, :, 1, t), omme_v(:, :, 1, t))
|
||||
l4_error = eval_error(lap4d_v(:, :, 1, t), omme_v(:, :, 1, t))
|
||||
l3_error = eval_error(lap3d_v(:, :, 1, t), omme_v(:, :, 1, t))
|
||||
prob_error = eval_error(prob_v(:, :, 1, t), omme_v(:, :, 1, t))
|
||||
|
||||
%%
|
||||
%display!
|
||||
t = 4;
|
||||
slice = 1;
|
||||
h = 145:180;
|
||||
w = 35:80;
|
||||
im0 = v(h, w, slice, t);
|
||||
im1 = temp_v(h, w, slice, t);
|
||||
im2 = lap4d_v(h, w, slice, t);
|
||||
im4 = prob_v(h, w, slice, t);
|
||||
im3 = omme_v(h, w, slice, t);
|
||||
im5 = lap3d_v(h, w, slice, t);
|
||||
figure();
|
||||
|
||||
imshow([[im0 im3 im1], [im5, im2 im4]], [], 'border', 'tight', 'InitialMagnification', 300)
|
||||
axis off
|
||||
colormap("jet")
|
||||
a = colorbar
|
||||
ylabel(a,'velocity (cm/s)')
|
||||
caxis([-160, 220])
|
||||
axis off
|
||||
|
||||
Reference in New Issue
Block a user