-
Notifications
You must be signed in to change notification settings - Fork 11
/
simulation_demo.m
52 lines (44 loc) · 1.52 KB
/
simulation_demo.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
% This code is to test Metal artifact simulation.
%
% Mitsuki Sakamoto <[email protected]>
% Nara Institute of Science and Technology
% 2019-06-25
%%
addpath('.\src');
addpath('.\utils');
%% Load images
load('./sample_data/sample_2.mat'); % load "sample" valuable
image = sample.image;
metal = sample.metal;
pixel_size = sample.pixel_size; % [cm]
disp('Load images');
%% Set config
config = set_config_for_artifact_simulation(pixel_size);
disp('Set config');
%% Preprocess
image(image<-500) = -1000; % erase the boundary
image = hu2mu(double(image), config.mu_water, config.mu_air);
disp('Preprocess');
%% Phantom calibration
phantom = create_phantom(512, 512, 200, config.mu_water);
config.correction_coeff = water_correction(phantom, config);
disp('Phantom calibration');
%% Metal Artifact Simulation
sim = metal_artifact_simulation(image, metal, config);
disp('Metal Artifact Simulation');
%% Convert results from mu to HU
sim_hu = mu2hu(sim, config.mu_water, config.mu_air);
disp('Convert results from mu to HU');
%% Save results
save_dir = './outputs';
if ~exist(save_dir, 'dir'); mkdir(save_dir); end
imwrite(set_window(mu2hu(image, config.mu_water, config.mu_air), -150, 350),...
fullfile(save_dir, 'input.png'));
imwrite(set_window(sim_hu, -150, 350),...
fullfile(save_dir, 'output.png'));
if ~verLessThan('matlab', '9.1') % older than 2016b
save_config_as_json(fullfile(save_dir, 'simulation_config.json'), config);
else
save(fullfile(save_dir, 'simulation_config.mat'), 'config')
end
disp('Save results');