forked from brandondube/AberrationSwissArmyKnife
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMTFPlotter.m
94 lines (84 loc) · 2.93 KB
/
MTFPlotter.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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
classdef MTFPlotter
methods (Static)
function [fig, ax] = plot3D(AberrationSwissArmyKnife, plotType)
%plot 3D rendition of MTF
if nargin < 2
plotType = 'surf';
end
checkMTF(AberrationSwissArmyKnife);
fig = figure;
pt = lower(plotType);
[Fx, Fy] = meshgrid(AberrationSwissArmyKnife.mtfAxis, AberrationSwissArmyKnife.mtfAxis');
switch pt
case 'mesh'
mesh(Fx, Fy, AberrationSwissArmyKnife.mtf);
case 'surf'
surf(Fx, Fy, AberrationSwissArmyKnife.mtf, 'EdgeColor', 'none');
shading interp;
end
view(49,16);
xlim([0 1]);
ylim([0 1]);
xlabel('lp/mm-x');
ylabel('lp/mm-y');
zlabel('MTF');
c = colorbar();
c.Label.String = 'Normalized Intensity';
ax = gca;
end
function [] = plotTan(AberrationSwissArmyKnife)
%plots slice of Tangential MTF
checkMTF(AberrationSwissArmyKnife);
plot(AberrationSwissArmyKnife.mtfAxis, AberrationSwissArmyKnife.mtfTan)
xlabel('lp/mm');
ylabel('MTF');
ylim([0 1]);
grid on
end
function [] = plotSag(AberrationSwissArmyKnife)
%plots slice of Tangential MTF
checkMTF(AberrationSwissArmyKnife);
plot(AberrationSwissArmyKnife.mtfAxis, AberrationSwissArmyKnife.mtfSan)
xlabel('lp/mm');
ylabel('MTF');
ylim([0 1]);
grid on
end
function [fig, ax] = plotBoth(AberrationSwissArmyKnife, dashTan)
% plots both the tangential and sagittal MTF
a = AberrationSwissArmyKnife;
if nargin < 2
dashTan = false;
end
checkMTF(a);
fig = figure;
hold on;
if dashTan
plot(a.mtfAxis, a.mtfTan, 'LineStyle', '--');
plot(a.mtfAxis, a.mtfSag, 'LineStyle', '-');
else
plot(a.mtfAxis, a.mtfTan, 'LineStyle', '-');
plot(a.mtfAxis, a.mtfSag, 'LineStyle', '--');
end
hold off;
xlabel('lp/mm');
ylabel('MTF');
ylim([0 1]);
xlim([0, 200]);
grid on
legend('Tangential', 'Sagittal', 'Location', 'southwest', 'Orientation', 'vertical');
ax = gca;
end
end
end
function [] = checkMTF(AberrationSwissArmyKnife)
if (isempty(AberrationSwissArmyKnife.mtf))
if (isempty(AberrationSwissArmyKnife.psf))
if (isempty(AberrationSwissArmyKnife.w))
AberrationSwissArmyKnife.buildPupil();
end
AberrationSwissArmyKnife.w2psf();
end
AberrationSwissArmyKnife.psf2mtf();
end
end