Commit a47d89cc authored by Mark Chiew's avatar Mark Chiew
Browse files

Made MATLAB consistent with python, added plotting to partial fourier

parent 6e5f1b9a
......@@ -18,7 +18,7 @@ subplot(2,1,2);
plot(pulseq(:,3));
ylabel('Gradient');
% Integrate ODE
%% Integrate ODE
T1 = 1500;
T2 = 50;
t0 = 0;
......@@ -27,20 +27,20 @@ dt = 0.005;
M0 = [0; 0; 1];
[t, M] = ode45(@(t,M)bloch_ode(t, M, T1, T2), linspace(t0, t1, (t1-t0)/dt), M0);
% Plot Results
%% Plot Results
% create figure
figure();hold on;
% plot x, y and z components of Magnetisation
plot(t, M(:,1));
plot(t, M(:,2));
plot(t, M(:,3));
plot(t, M(:,1), 'linewidth', 2);
plot(t, M(:,2), 'linewidth', 2);
plot(t, M(:,3), 'linewidth', 2);
% add legend and grid
legend({'Mx','My','Mz'});
grid on;
% define the bloch equation
%% define the bloch equation
function dM = bloch_ode(t, M, T1, T2)
% get effective B-field at time t
B = B_eff(t);
......@@ -51,7 +51,7 @@ function dM = bloch_ode(t, M, T1, T2)
M(1)*B(2) - M(2)*B(1) - (M(3)-1)/T1];
end
% define effective B-field
%% define effective B-field
function b = B_eff(t)
% Do nothing for 0.25 ms
if t < 0.25
......
......@@ -64,7 +64,8 @@
"In this section:\n",
"- np.random.randn\n",
"- np.fft\n",
"- 0-based indexing"
"- 0-based indexing\n",
"- image plotting"
]
},
{
......@@ -80,7 +81,11 @@
"y = np.fft.fftshift(np.fft.fft2(img), axes=0) + n\n",
"\n",
"# set bottom 24/96 lines to 0\n",
"y[72:,:] = 0"
"y[72:,:] = 0\n",
"\n",
"# show sampling\n",
"_, ax = plt.subplots()\n",
"ax.imshow(np.log(np.abs(np.fft.fftshift(y, axes=1))))"
]
},
{
......@@ -96,7 +101,8 @@
"In this section:\n",
"- np.pad\n",
"- np.hanning\n",
"- reshaping 1D array to 2D array using np.newaxis (or None)"
"- reshaping 1D array to 2D array using np.newaxis (or None)\n",
"- subplots with titles"
]
},
{
......@@ -117,7 +123,14 @@
"low = np.fft.ifft2(np.fft.ifftshift(y*filt, axes=0))\n",
"\n",
"# get phase image\n",
"phs = np.exp(1j*np.angle(low))"
"phs = np.exp(1j*np.angle(low))\n",
"\n",
"# show phase estimate alongside true phase\n",
"_, ax = plt.subplots(1,2)\n",
"ax[0].imshow(np.angle(img))\n",
"ax[0].set_title('True image phase')\n",
"ax[1].imshow(np.angle(phs))\n",
"ax[1].set_title('Estimated phase')"
]
},
{
......@@ -190,7 +203,7 @@
"\n",
"In this section:\n",
"- print formatted strings to standard output\n",
"- plotting, with min/max scales\n",
"- 2D subplots with min/max scales, figure size\n",
"- np.sum sums over all elements by default"
]
},
......@@ -212,15 +225,17 @@
"print(f'RMSE for POCS recon: {err_pocs}')\n",
"\n",
"# plot both recons side-by-side\n",
"_, ax = plt.subplots(1,2,figsize=(16,16))\n",
"_, ax = plt.subplots(2,2,figsize=(16,16))\n",
"\n",
"# plot zero-filled\n",
"ax[0].imshow(np.abs(zf), vmin=0, vmax=1)\n",
"ax[0].set_title('Zero-filled')\n",
"ax[0,0].imshow(np.abs(zf), vmin=0, vmax=1)\n",
"ax[0,0].set_title('Zero-filled')\n",
"ax[1,0].plot(np.abs(zf[:,47]))\n",
"\n",
"# plot POCS\n",
"ax[1].imshow(est, vmin=0, vmax=1)\n",
"ax[1].set_title('POCS recon')"
"ax[0,1].imshow(est, vmin=0, vmax=1)\n",
"ax[0,1].set_title('POCS recon')\n",
"ax[1,1].plot(np.abs(est[:,47]))"
]
}
],
......
......@@ -15,6 +15,10 @@ y = fftshift(fft2(img),1) + n;
% set bottom 24/96 lines to 0
y(73:end,:) = 0;
% show sampling
figure();
imshow(log(abs(fftshift(y,2))), [], 'colormap', jet)
%% Estimate phase
% create zero-padded hanning filter for ky-filtering
filt = padarray(hann(48),24);
......@@ -25,6 +29,16 @@ low = ifft2(ifftshift(y.*filt,1));
% get phase image
phs = exp(1j*angle(low));
% show phase estimate alongside true phase
figure();
subplot(1,2,1);
imshow(angle(img), [-pi,pi], 'colormap', hsv);
title('True image phase');
subplot(1,2,2);
imshow(angle(phs), [-pi,pi], 'colormap', hsv)
title('Estimated phase');
%% POCS reconstruction
% initialise image estimate to be zeros
est = zeros(96);
......@@ -74,11 +88,15 @@ fprintf(1, 'RMSE for POCS recon: %f\n', err_pocs);
figure();
% plot zero-filled
subplot(1,2,1);
subplot(2,2,1);
imshow(abs(zf), [0 1]);
title('Zero-Filled');
subplot(2,2,3);
plot(abs(zf(:,48)), 'linewidth', 2);
% plot POCS
subplot(1,2,2);
subplot(2,2,2);
imshow(est, [0 1]);
title('POCS recon');
subplot(2,2,4);
plot(abs(est(:,48)), 'linewidth', 2);
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment