-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmakeRadonMatrix.m
More file actions
executable file
·56 lines (44 loc) · 1.49 KB
/
Copy pathmakeRadonMatrix.m
File metadata and controls
executable file
·56 lines (44 loc) · 1.49 KB
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
function radonMatrix = makeRadonMatrix( Ny, Nx, delta, ...
nDetectors, dSize, thetas )
nThetas = numel( thetas );
nPossible = 100000;
rowIndxs = zeros(1,nPossible);
colIndxs = zeros(1,nPossible);
values = zeros(1,nPossible);
nValues = 0;
nIncrease = 100000;
for i=1:Ny*Nx
disp(['makeRadonMatrix ', num2str(i), ' of ', num2str(Ny*Nx)]);
in = zeros( Ny, Nx );
in(i) = 1;
sino = ctRadon( in, delta, nDetectors, dSize, thetas );
nonzeroIndxs = find( sino > 0 );
nNonzero = numel( nonzeroIndxs );
if nNonzero == 0 continue; end;
if nValues + nNonzero > nPossible
while nValues + nNonzero > nPossible
newRowIndxs = zeros(1,nPossible+nIncrease);
newColIndxs = zeros(1,nPossible+nIncrease);
newValues = zeros(1,nPossible+nIncrease);
nPossible = nPossible + nIncrease;
end
if nValues > 0
newRowIndxs(1:nValues) = rowIndxs;
newColIndxs(1:nValues) = colIndxs;
newValues(1:nValues) = values;
end
rowIndxs = newRowIndxs;
colIndxs = newColIndxs;
values = newValues;
end
rowIndxs(nValues+1:nValues+nNonzero) = nonzeroIndxs;
colIndxs(nValues+1:nValues+nNonzero) = i;
values(nValues+1:nValues+nNonzero) = sino(nonzeroIndxs);
end
save( 'rowIndxs.mat', 'rowIndxs' );
save( 'colIndxs.mat', 'colIndxs' );
save( 'values.mat', 'values' );
radonMatrix = sparse( rowIndxs, colIndxs, values, Ny*Nx, ...
nDetectors*nThetas );
save( 'radonMatrix.mat', 'R' );
end