📄 avw_img_write.html
字号:
0150 0151 <span class="keyword">switch</span> double(avw.hdr.dime.datatype),0152 <span class="keyword">case</span> 1,0153 avw.hdr.dime.bitpix = int16( 1); precision = <span class="string">'bit1'</span>;0154 <span class="keyword">case</span> 2,0155 avw.hdr.dime.bitpix = int16( 8); precision = <span class="string">'uchar'</span>;0156 <span class="keyword">case</span> 4,0157 avw.hdr.dime.bitpix = int16(16); precision = <span class="string">'int16'</span>;0158 <span class="keyword">case</span> 8,0159 avw.hdr.dime.bitpix = int16(32); precision = <span class="string">'int32'</span>;0160 <span class="keyword">case</span> 16,0161 avw.hdr.dime.bitpix = int16(32); precision = <span class="string">'single'</span>;0162 <span class="keyword">case</span> 32,0163 error(<span class="string">'...complex datatype not yet supported.\n'</span>);0164 <span class="keyword">case</span> 64,0165 avw.hdr.dime.bitpix = int16(64); precision = <span class="string">'double'</span>;0166 <span class="keyword">case</span> 128,0167 error(<span class="string">'...RGB datatype not yet supported.\n'</span>);0168 <span class="keyword">otherwise</span>0169 fprintf(<span class="string">'...unknown datatype, using type 16 (32 bit floats).\n'</span>);0170 avw.hdr.dime.datatype = int16(16);0171 avw.hdr.dime.bitpix = int16(32); precision = <span class="string">'single'</span>;0172 <span class="keyword">end</span>0173 0174 0175 <span class="comment">% write the .img file, depending on the .img orientation</span>0176 fprintf(<span class="string">'...writing %s precision Analyze image (%s).\n'</span>,precision,machine);0177 0178 fseek(fid,0,<span class="string">'bof'</span>);0179 0180 <span class="comment">% The standard image orientation is axial unflipped</span>0181 <span class="keyword">if</span> isempty(avw.hdr.hist.orient),0182 msg = [ <span class="string">'...WARNING: avw.hdr.hist.orient ~= 0.\n'</span>,<span class="keyword">...</span>0183 <span class="string">' This function assumes the input avw.img is\n'</span>,<span class="keyword">...</span>0184 <span class="string">' in axial unflipped orientation in memory. This is\n'</span>,<span class="keyword">...</span>0185 <span class="string">' created by the avw_img_read function, which converts\n'</span>,<span class="keyword">...</span>0186 <span class="string">' any input file image to axial unflipped in memory.\n'</span>];0187 fprintf(msg)0188 <span class="keyword">end</span>0189 0190 <span class="keyword">if</span> isempty(IMGorient),0191 fprintf(<span class="string">'...no IMGorient specified, using avw.hdr.hist.orient value.\n'</span>);0192 IMGorient = double(avw.hdr.hist.orient);0193 <span class="keyword">end</span>0194 0195 <span class="keyword">if</span> ~isfinite(IMGorient),0196 fprintf(<span class="string">'...IMGorient is not finite!\n'</span>);0197 IMGorient = 99;0198 <span class="keyword">end</span>0199 0200 <span class="keyword">switch</span> IMGorient,0201 0202 <span class="keyword">case</span> 0, <span class="comment">% transverse/axial unflipped</span>0203 0204 <span class="comment">% For the 'transverse unflipped' type, the voxels are stored with</span>0205 <span class="comment">% Pixels in 'x' axis (varies fastest) - from patient right to left</span>0206 <span class="comment">% Rows in 'y' axis - from patient posterior to anterior</span>0207 <span class="comment">% Slices in 'z' axis - from patient inferior to superior</span>0208 0209 fprintf(<span class="string">'...writing axial unflipped\n'</span>);0210 0211 avw.hdr.hist.orient = uint8(0);0212 0213 SliceDim = double(avw.hdr.dime.dim(4)); <span class="comment">% z</span>0214 RowDim = double(avw.hdr.dime.dim(3)); <span class="comment">% y</span>0215 PixelDim = double(avw.hdr.dime.dim(2)); <span class="comment">% x</span>0216 SliceSz = double(avw.hdr.dime.pixdim(4));0217 RowSz = double(avw.hdr.dime.pixdim(3));0218 PixelSz = double(avw.hdr.dime.pixdim(2));0219 0220 x = 1:PixelDim;0221 <span class="keyword">for</span> z = 1:SliceDim,0222 <span class="keyword">for</span> y = 1:RowDim,0223 fwrite(fid,avw.img(x,y,z),precision);0224 <span class="keyword">end</span>0225 <span class="keyword">end</span>0226 0227 <span class="keyword">case</span> 1, <span class="comment">% coronal unflipped</span>0228 0229 <span class="comment">% For the 'coronal unflipped' type, the voxels are stored with</span>0230 <span class="comment">% Pixels in 'x' axis (varies fastest) - from patient right to left</span>0231 <span class="comment">% Rows in 'z' axis - from patient inferior to superior</span>0232 <span class="comment">% Slices in 'y' axis - from patient posterior to anterior</span>0233 0234 fprintf(<span class="string">'...writing coronal unflipped\n'</span>);0235 0236 avw.hdr.hist.orient = uint8(1);0237 0238 SliceDim = double(avw.hdr.dime.dim(3)); <span class="comment">% y</span>0239 RowDim = double(avw.hdr.dime.dim(4)); <span class="comment">% z</span>0240 PixelDim = double(avw.hdr.dime.dim(2)); <span class="comment">% x</span>0241 SliceSz = double(avw.hdr.dime.pixdim(3));0242 RowSz = double(avw.hdr.dime.pixdim(4));0243 PixelSz = double(avw.hdr.dime.pixdim(2));0244 0245 x = 1:PixelDim;0246 <span class="keyword">for</span> y = 1:SliceDim,0247 <span class="keyword">for</span> z = 1:RowDim,0248 fwrite(fid,avw.img(x,y,z),precision);0249 <span class="keyword">end</span>0250 <span class="keyword">end</span>0251 0252 <span class="keyword">case</span> 2, <span class="comment">% sagittal unflipped</span>0253 0254 <span class="comment">% For the 'sagittal unflipped' type, the voxels are stored with</span>0255 <span class="comment">% Pixels in 'y' axis (varies fastest) - from patient posterior to anterior</span>0256 <span class="comment">% Rows in 'z' axis - from patient inferior to superior</span>0257 <span class="comment">% Slices in 'x' axis - from patient right to left</span>0258 0259 fprintf(<span class="string">'...writing sagittal unflipped\n'</span>);0260 0261 avw.hdr.hist.orient = uint8(2);0262 0263 SliceDim = double(avw.hdr.dime.dim(2)); <span class="comment">% x</span>0264 RowDim = double(avw.hdr.dime.dim(4)); <span class="comment">% z</span>0265 PixelDim = double(avw.hdr.dime.dim(3)); <span class="comment">% y</span>0266 SliceSz = double(avw.hdr.dime.pixdim(2));0267 RowSz = double(avw.hdr.dime.pixdim(4));0268 PixelSz = double(avw.hdr.dime.pixdim(3));0269 0270 y = 1:PixelDim;0271 <span class="keyword">for</span> x = 1:SliceDim,0272 <span class="keyword">for</span> z = 1:RowDim,0273 fwrite(fid,avw.img(x,y,z),precision);0274 <span class="keyword">end</span>0275 <span class="keyword">end</span>0276 0277 <span class="keyword">case</span> 3, <span class="comment">% transverse/axial flipped</span>0278 0279 <span class="comment">% For the 'transverse flipped' type, the voxels are stored with</span>0280 <span class="comment">% Pixels in 'x' axis (varies fastest) - from patient right to left</span>0281 <span class="comment">% Rows in 'y' axis - from patient anterior to posterior*</span>0282 <span class="comment">% Slices in 'z' axis - from patient inferior to superior</span>0283 0284 fprintf(<span class="string">'...writing axial flipped (+Y from Anterior to Posterior)\n'</span>);0285 0286 avw.hdr.hist.orient = uint8(3);0287 0288 SliceDim = double(avw.hdr.dime.dim(4)); <span class="comment">% z</span>0289 RowDim = double(avw.hdr.dime.dim(3)); <span class="comment">% y</span>0290 PixelDim = double(avw.hdr.dime.dim(2)); <span class="comment">% x</span>0291 SliceSz = double(avw.hdr.dime.pixdim(4));0292 RowSz = double(avw.hdr.dime.pixdim(3));0293 PixelSz = double(avw.hdr.dime.pixdim(2));0294 0295 x = 1:PixelDim;0296 <span class="keyword">for</span> z = 1:SliceDim,0297 <span class="keyword">for</span> y = RowDim:-1:1, <span class="comment">% flipped in Y</span>0298 fwrite(fid,avw.img(x,y,z),precision);0299 <span class="keyword">end</span>0300 <span class="keyword">end</span>0301 0302 <span class="keyword">case</span> 4, <span class="comment">% coronal flipped</span>0303 0304 <span class="comment">% For the 'coronal flipped' type, the voxels are stored with</span>0305 <span class="comment">% Pixels in 'x' axis (varies fastest) - from patient right to left</span>0306 <span class="comment">% Rows in 'z' axis - from patient inferior to superior</span>0307 <span class="comment">% Slices in 'y' axis - from patient anterior to posterior</span>0308 0309 fprintf(<span class="string">'...writing coronal flipped (+Z from Superior to Inferior)\n'</span>);0310 0311 avw.hdr.hist.orient = uint8(4);0312 0313 SliceDim = double(avw.hdr.dime.dim(3)); <span class="comment">% y</span>0314 RowDim = double(avw.hdr.dime.dim(4)); <span class="comment">% z</span>0315 PixelDim = double(avw.hdr.dime.dim(2)); <span class="comment">% x</span>0316 SliceSz = double(avw.hdr.dime.pixdim(3));0317 RowSz = double(avw.hdr.dime.pixdim(4));0318 PixelSz = double(avw.hdr.dime.pixdim(2));0319 0320 x = 1:PixelDim;0321 <span class="keyword">for</span> y = 1:SliceDim,0322 <span class="keyword">for</span> z = RowDim:-1:1,0323 fwrite(fid,avw.img(x,y,z),precision);0324 <span class="keyword">end</span>0325 <span class="keyword">end</span>0326 0327 <span class="keyword">case</span> 5, <span class="comment">% sagittal flipped</span>0328 0329 <span class="comment">% For the 'sagittal flipped' type, the voxels are stored with</span>0330 <span class="comment">% Pixels in 'y' axis (varies fastest) - from patient posterior to anterior</span>0331 <span class="comment">% Rows in 'z' axis - from patient superior to inferior</span>0332 <span class="comment">% Slices in 'x' axis - from patient right to left</span>0333 0334 fprintf(<span class="string">'...writing sagittal flipped (+Z from Superior to Inferior)\n'</span>);0335 0336 avw.hdr.hist.orient = uint8(5);0337 0338 SliceDim = double(avw.hdr.dime.dim(2)); <span class="comment">% x</span>0339 RowDim = double(avw.hdr.dime.dim(4)); <span class="comment">% z</span>0340 PixelDim = double(avw.hdr.dime.dim(3)); <span class="comment">% y</span>0341 SliceSz = double(avw.hdr.dime.pixdim(2));0342 RowSz = double(avw.hdr.dime.pixdim(4));0343 PixelSz = double(avw.hdr.dime.pixdim(3));0344 0345 y = 1:PixelDim;0346 <span class="keyword">for</span> x = 1:SliceDim,0347 <span class="keyword">for</span> z = RowDim:-1:1, <span class="comment">% superior to inferior</span>0348 fwrite(fid,avw.img(x,y,z),precision);0349 <span class="keyword">end</span>0350 <span class="keyword">end</span>0351 0352 <span class="keyword">otherwise</span>, <span class="comment">% transverse/axial unflipped</span>0353 0354 <span class="comment">% For the 'transverse unflipped' type, the voxels are stored with</span>0355 <span class="comment">% Pixels in 'x' axis (varies fastest) - from patient right to left</span>0356 <span class="comment">% Rows in 'y' axis - from patient posterior to anterior</span>0357 <span class="comment">% Slices in 'z' axis - from patient inferior to superior</span>0358 0359 fprintf(<span class="string">'...unknown orientation specified, assuming default axial unflipped\n'</span>);0360 0361 avw.hdr.hist.orient = uint8(0);0362 0363 SliceDim = double(avw.hdr.dime.dim(4)); <span class="comment">% z</span>0364 RowDim = double(avw.hdr.dime.dim(3)); <span class="comment">% y</span>0365 PixelDim = double(avw.hdr.dime.dim(2)); <span class="comment">% x</span>0366 SliceSz = double(avw.hdr.dime.pixdim(4));0367 RowSz = double(avw.hdr.dime.pixdim(3));0368 PixelSz = double(avw.hdr.dime.pixdim(2));0369 0370 x = 1:PixelDim;0371 <span class="keyword">for</span> z = 1:SliceDim,0372 <span class="keyword">for</span> y = 1:RowDim,0373 fwrite(fid,avw.img(x,y,z),precision);0374 <span class="keyword">end</span>0375 <span class="keyword">end</span>0376 0377 <span class="keyword">end</span>0378 0379 fclose(fid);0380 0381 <span class="comment">% Update the header</span>0382 avw.hdr.dime.dim(2:4) = int16([PixelDim,RowDim,SliceDim]);0383 avw.hdr.dime.pixdim(2:4) = single([PixelSz,RowSz,SliceSz]);0384 0385 <span class="keyword">return</span></pre></div><hr><address>Generated on Fri 21-May-2004 12:38:21 by <strong><a href="http://www.artefact.tk/software/matlab/m2html/">m2html</a></strong> © 2003</address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -