Print

Print


Dear Meghana, dear Karl,

sometimes flipping of images without prior normalization is appropriate.
Indeed flipped normalized images are not normalized any more. Exactly
for this reason I rewrote Karls code. My version also writes flipped
images. But now the mat-files are properly adjusted for the flipped
image data. For interactive use start with "spm_flip".

I missed the mail from Meghana: Please forward this one.

The name of my snippet is "spm_flip.m", too. If it is renamed, the first
and third line should be changed accordingly:

function spm_flip(V)
% flips images, writes them and adjusts their mat-files
% FORMAT spm_flip
% V - a vector of structures containing image volume information.
% For explanation of the elements of the structure see spm_vol
%___________________________________________________________________________

%
% If spm_flip is called without argument, the interactive function
spm_get
% is used for getting images.
%
% The data of the images is flipped in voxel-x-direction.
% The new images are written to img-files with a leading "f".
% The associated new mat-files are calculated to obtain a flipping in
% world-x-direction (the left-right-direction, if the respective prior
image
% is aligned properly).
%___________________________________________________________________________

% Author:       Thomas Kamer
% Last change:  2001/04/12
% Version:      1.0
% Dependencies: SPM99
%
% Usage of code from Karl Friston
%
% Distributed under GNU General Public License (GPL) as published by the

% Free Software Foundation (Version 2 or higher)
%
% Laboratory for Psychiatric Brain Research,
% Department for Psychiatry,
% University of Bonn

if nargin==0
        % get image names
        P     = spm_get(Inf,'*.img',{'select images for flipping'});

        % start progress bar
        spm_progress_bar('Init',length(P),'flipping','');

        % circle through images
        for i = 1:length(P)

                % flip and write
                flip( spm_vol(P{i}) );

                % show progress
                spm_progress_bar('Set',i);
        end

        % end progress bar
        spm_progress_bar('Clear')
else
        % circle through images
        for i = 1:length(V)

                % flip and write
                flip( V(i) );
        end
end


function flip(Vi)
% flips image, calculates mat-data, writes all

        % get image data
        Y             = spm_read_vols(Vi,0);

        % flip image data
        Y             = flipdim(Y,1);

        % prepare name and header of image
        Vo            = Vi;
        [p,f,e,v]     = fileparts(Vi.fname);
        Vo.fname      = fullfile(p,['f' f e]);
        Vo.descrip    = [Vo.descrip ' - flipped'];

        % calculate adjusted mat-file data
        Vo.mat(1:3,4) = Vo.mat(1:3,4)+Vo.mat(1:3,1)*Vo.dim(1);
        Vo.mat(2:3,1) = -Vo.mat(2:3,1);
        Vo.mat(1,2:4) = -Vo.mat(1,2:4);

        % write flipped image
        Vo            = spm_write_vol(Vo,Y);


Best wishes,
Thomas Kamer

--
Thomas Kamer
Computer scientist

University of Bonn
Department for Psychiatry
Laboratory for Psychiatric Brain Research
Sigmund-Freud-Straße 25
D-53105 Bonn
Germany

Tel: +49-(0)228-287-6366
Fax: +49-(0)228-287-6369
[log in to unmask]

For verification of my signature see https://trust.web.de/root.htm