2017-10-30 12 views
0

SPM에서하고 싶은 특정 작업이 있습니다.SPM에서 임의의 변환 행렬을 이미지에 적용 할 수 있습니까?

기본적으로 일부 입력 NII 파일 scan.nii이 있는데 여기에 x y z p r yw으로 정의되는 임의의 아핀 변환을 적용하고 싶습니다.

x,y,z,p,r,yw은 각각의 자유도에서의 변환과 회전을 나타냅니다 (따라서 x=2mm, p=0.7deg 등등). M=spm_matrix([x y z p r yw])으로 적절한 행렬을 얻을 수는 있지만 실제로 어떻게이 행렬을 스캔에 적용 할 수 있는지 알 수 없습니다.

새로운 파일 이름으로 출력하거나 단순히 Matlab 변수로 출력하는 것이 이상적입니다. 동일한 이미지에 여러 번이 작업을 수행 할 수 있지만 명시 적으로 필요하지는 않습니다.

는 당신의 도움을 주셔서 감사합니다.

+0

행렬들는 4 × 4와 이미지 슬라이스가 128x128 그래서 난 당신이 제안하는 일을 할 방법을 잘 모르겠어요 있습니다. – Karl

+0

혼란스럽고 (잘못 된) 의견을 보내 주시면 죄송합니다. 자세한 답변을 참조하십시오. – Adiel

답변

0

어파 인 매트릭스는 이미지 자체가 아닌 이미지 좌표에서 작동합니다. 아핀 행렬에 이미지의 좌표 목록을 곱한 다음 새 좌표를 가져오고 원래 좌표에 해당합니다. 또한 변환은 인덱스 목록의 마지막 행에있는 추가 1을 가진 아핀 행렬의 4 번째 열을 곱하여 수행됩니다 (이 각각의 일치, 해당 행렬의 단일 벡터 곱하기에서).

따라서 3D 좌표의 목록을 3xn 행렬로 생성 한 다음 하단에 1 행을 추가하고 4x4 어파 인 행렬에 4xn 좌표 행렬을 곱해야합니다.

[X Y Z]=ndgrid(1:4); 
ind=reshape(cat(3,X,Y,Z),[],3)'; % list of all of the indices in the image 
ind=[ind; ones(1,size(ind,2))]; % add a row of `1`s 
ind_aff=m*ind; 

ind_aff의 맨 아래 행은 1 's입니다, 당신은 그것을 무시할 수 있습니다 :

는 이미지가 4X4X4 말한다. 처음 세 행은 이제 새로운 좌표이며, 각 열은 ind 행렬의 동일한 열 번호로 조정 된 값의 좌표입니다. 당신이 변화를 얻을 것이다

m=spm_matrix([3 1 10 0.5 0.9 0.3]) 

예를 들어

는 :

% old coordinates (column-wise) 
ind(1:3,1:3)= 

    1  2  3 
    1  1  1 
    1  1  1 

% new coordinates (column-wise) 
ind_aff(1:3,1:3)= 

    4.5609 5.1547 5.7486 
    1.4073 0.7892 0.1711 
    9.3693 8.8542 8.3392