76 lines
2.3 KiB
Matlab
76 lines
2.3 KiB
Matlab
function [errors] = unwrap_comparison(file,t_end, noise_std_percent)
|
|
%unwraps a given file with all five methods (Temporal, 3D Laplacian, 4D
|
|
%Laplacian, Probability, OMME)
|
|
%always uses file with Venc 75 and Venc 150
|
|
%returns arrays of errors (as compared to OMME)
|
|
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) = t_end;
|
|
phi = zeros(si(1), si(2), 1, si(3));
|
|
rng('default')
|
|
rng(100 + str2double(file{1}(2)))
|
|
noise_std = noise_std_percent * pi
|
|
noise = noise_std.*randn(si);
|
|
phi(:, :, 1, 1:si(3)) = (wrapped(:, :, 1:si(3)) + noise).*mask(1:si(1), 1:si(2), 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(1), 1:si(2), 1:si(3));
|
|
phi = phi - 2*pi*(phi > pi);
|
|
phi = phi + 2*pi*(phi < -pi);
|
|
|
|
%%
|
|
%laplacian unwrap
|
|
n_u4 = unwrap_4D(phi);
|
|
lap4d_phi = phi + double(n_u4).*2*pi;
|
|
n_u3 = zeros(size(n_u4), 'int8');
|
|
for i=1:si(3)
|
|
n_u3(:, :, :, i) = unwrap_3D(phi(:, :, :, i));
|
|
end
|
|
lap3d_phi = phi + double(n_u3).*2*pi;
|
|
|
|
%%
|
|
%temporal unwrap
|
|
t_ref = t_end;
|
|
temp_phi = temporal(phi, t_ref);
|
|
|
|
%%
|
|
%probability unwrap
|
|
w_s = 1.0;
|
|
w_t = 2.5;
|
|
t_low = 0.32;
|
|
t_high = 0.75;
|
|
prob_phi = probability(phi, t_low, t_high, w_s, w_t);
|
|
|
|
%%
|
|
%omme
|
|
struct = load('path_to_higher_venc_data_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 = 50;
|
|
high_venc = high_venc.*(highv/pi);
|
|
low_venc = phi_wn.*(lowv/pi);
|
|
[omme_v, dyn, conf, std] = omme([high_venc(:), low_venc(:)], [highv, lowv]);
|
|
omme_v = reshape(omme_v, [si(1), si(2), 1, si(3)]);
|
|
|
|
%%
|
|
%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), high_venc(:, :, 1, t));
|
|
t_error = eval_error(temp_v(:, :, 1, t), high_venc(:, :, 1, t));
|
|
l4_error = eval_error(lap4d_v(:, :, 1, t), high_venc(:, :, 1, t));
|
|
l3_error = eval_error(lap3d_v(:, :, 1, t), high_venc(:, :, 1, t));
|
|
prob_error = eval_error(prob_v(:, :, 1, t), high_venc(:, :, 1, t));
|
|
omme_error = eval_error(omme_v(:, :, 1, t), high_venc(:, :, 1, t));
|
|
errors = [base_error, t_error, l3_error, l4_error, prob_error, omme_error]
|
|
end
|