가 UPDATE scipy NumPy와 /과 3 차원 볼륨을 리샘플링 :변형시키는 및
내가 만든 아니라 노트북 ipython 기록. 코드를 원한다면 첫 번째 대답을보십시오.
내가 그레이 스케일 값의 40x40x40 볼륨을 가지고
질문. 회전/시프 팅/셔링이 필요합니다.
여기서 균질 변환 유용한 컬렉션이다 http://www.lfd.uci.edu/~gohlke/code/transformations.py.html
I는 (위치 벡터 값)의 쌍 등 내 볼륨의 모든 복셀을 치료해야한다. 그러면 변환 된 벡터 집합에서 각 좌표의 위치와 새 값을 변환합니다.
샘플링
오히려 어려운 것, 그리고 나는이를 찾을 수 기뻤습니다 : https://docs.scipy.org/doc/scipy-0.18.1/reference/generated/scipy.ndimage.affine_transform.html#scipy.ndimage.affine_transformThe given matrix and offset are used to find for each point in the output the corresponding coordinates in the input by an affine transformation. The value of the input at those coordinates is determined by spline interpolation of the requested order. Points outside the boundaries of the input are filled according to the given mode.
완벽한 소리.
그러나 사용법은 매우 까다 롭습니다. Here 누군가 이미지를 회전하기 위해 해당 코드를 사용하고 있습니다. 그의 회전 행렬은 2x2이므로 동질적인 좌표가 아닙니다. I의 함수 동차 좌표 (2D)에서의 변환 행렬을 통과 시도 :
Traceback (most recent call last):
File "C:/Users/212590884/PycharmProjects/3DAugmentation/main.py", line 32, in <module>
out3=scipy.ndimage.affine_transform(arr,mat)
File "C:\Users\212590884\AppData\Local\Continuum\Anaconda2\lib\site-packages\scipy\ndimage\interpolation.py", line 417, in affine_transform
raise RuntimeError('affine matrix has wrong number of rows')
RuntimeError: affine matrix has wrong number of rows
분명히이 동차 좌표와 함께 작동하지 않는다 : 오류가 발생
dim =10
arr=np.zeros((dim,dim))
arr[0,0]=1
mat=np.array([[1,0,1],[0,1,0],[0,0,1]])
out3=scipy.ndimage.affine_transform(arr,mat)
print("out3: ",out3)
한다. 이 방법을 사용하여 데이터를 이동시킬 수 있습니까? affine matrix has wrong number of rows
이 가능 변환하기 위해이 방법을 사용하려면 :
dim =10
arr=np.zeros((dim,dim,dim))
arr[0,0]=1
angle=10/180*np.pi
c=np.cos(angle)
s=np.sin(angle)
mat=np.array([[c,-s,0,0],[s,c,0,0],[0,0,1,0],[0,0,0,1]])
out3=scipy.ndimage.affine_transform(arr,mat)
print("out3: ",out3)
오류 메시지가 동일합니다
는 그리고 이것은 심지어 볼륨을 회전 할 수 없습니다 3D로, 단지 2D로했다 내 볼륨? https://docs.scipy.org/doc/scipy-0.14.0/reference/ndimage.html
하지만 사용자 정의 변환 행렬을 사용하는 것을 선호 :
나는 그들이 변화를 제공하고 회전하지만 전단하지, 헬퍼 메소드의 컬렉션을 발견했다. NumPy와 함께 map_coordinates그 다음, 좌표의 meshgrid을 생성 바꿀/위치 벡터를 형성하도록 스택 할 수 있습니다 :
이상한 행동은 (y, x, z) 인 (r, c, z) 규칙에 기인한다고 생각합니다. 따라서 x 좌표를 회전시키는 해당 벡터는 (0, 1, 0) – Ariel