-
Notifications
You must be signed in to change notification settings - Fork 0
/
bmp_stack.m
152 lines (133 loc) · 3.86 KB
/
bmp_stack.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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
function y= bmp_stack(stack,n,var)
% Dibuja Cerebrillos
% bmp_stack(stack,n) dibuja un cerebrillo en 'n' filas y ajusta el numero de
% slices por fila de manera q se dibuje todo el cerebro.
% Si el numero de filas no se especifica, el default es 1.
% stack ha de ser 3D, pero si se te olvida hacer squeeze, no
% pasa nada, te lo dibuja igual.
% Ademas, si es un stack que contiene muchos pacientes, te dibuja un slice
% de todos. En caso de que quieras un slice especial, entonces introduce
% var=1 para la primera dimension, var=2 segunda,... Por defecto var=0
if numel(size(stack))>3
stack=squeeze(stack);
end
if nargin < 2
n=floor(sqrt(size(stack,1)));
var=0;
elseif nargin < 3
var = 0;
end
if numel(size(stack))>3
[nump s1 s2 s3]=size(stack);
[so,var]=defso([s1 s2 s3],var);
JPG= [ ];
FILA= [ ];
IMAGENES_POR_FILA= n;
NUM_FILAS= floor(nump/IMAGENES_POR_FILA);
contador= 0;
NUM_IMAGENES= NUM_FILAS*IMAGENES_POR_FILA;
for np=1:nump
stackn(:,:,:)=squeeze(stack(np,:,:,:));
while NUM_IMAGENES<nump
IMAGENES_POR_FILA=IMAGENES_POR_FILA+1;
NUM_IMAGENES= NUM_FILAS*IMAGENES_POR_FILA;
end
fila=0;
% for z=1:so(1)
z=floor(so(1)/2);
if var(1)==1
R= squeeze(stackn(z,:,:));
elseif var(1)==2
R= squeeze(stackn(:,z,:));
elseif var(1)==3
R= squeeze(stackn(:,:,z));
R=flipud(R);
end
% R=imresize(I,20);
FILA= [ FILA R ];
contador= contador + 1;
if contador==IMAGENES_POR_FILA
JPG= [JPG ; FILA ];
FILA = [ ];
contador= 0;
fila=fila+1;
elseif and(np==nump,contador<IMAGENES_POR_FILA)
while contador<IMAGENES_POR_FILA
S=zeros(size(R));
% R=imresize(I,20);
FILA= [ FILA S ];
contador= contador + 1;
end
JPG= [JPG ; FILA ];
end
end
%map= jet(100);
figure
imagesc(JPG);
colorbar;
axis('image');
axis('off');
%caxis([min(stack(:)) max(stack(:))]);
%title('Precision map in SPECT images')
%imwrite(JPG,map,Fichero,'bmp');
else
[s1 s2 s3]= size(stack);
[so,var]=defso([s1 s2 s3],var);
JPG= [ ];
FILA= [ ];
IMAGENES_POR_FILA= floor(so(1)/n);
NUM_FILAS= floor((so(1))/IMAGENES_POR_FILA);
contador= 0;
NUM_IMAGENES= NUM_FILAS*IMAGENES_POR_FILA;
while NUM_IMAGENES<so(1)
IMAGENES_POR_FILA=IMAGENES_POR_FILA+1;
NUM_IMAGENES= NUM_FILAS*IMAGENES_POR_FILA;
end
fila=0;
for z=1:so(1)
if var(1)==1
R= squeeze(stack(z,:,:));
elseif var(1)==2
R= squeeze(stack(:,z,:));
elseif var(1)==3
R= squeeze(stack(:,:,z));
R=flipud(R);
end
% R=imresize(I,20);
FILA= [ FILA R ];
contador= contador + 1;
if contador==IMAGENES_POR_FILA
JPG= [JPG ; FILA ];
FILA = [ ];
contador= 0;
fila=fila+1;
elseif and(z==so(1),fila==NUM_FILAS-1)
while contador<IMAGENES_POR_FILA
S=zeros(size(R));
% R=imresize(I,20);
FILA= [ FILA S ];
contador= contador + 1;
end
JPG= [JPG ; FILA ];
end
end
%map= jet(100);
figure('Color',[0.8 0.8 0.8])
imagesc(JPG);
colorbar;
axis('image');
axis('off');
%map= jet(100);
%caxis([-0.04 0.0427]);
%title('Precision map in SPECT images')
%imwrite(JPG,map,Fichero,'bmp');
end
y= 1;
end
function [res,b]=defso(a,b)
if b==0
[res,b]=sort(a);
else
res=a(b);
end
end