2012-01-31 5 views
5

저는 MATLAB에 3D 데이터 행렬을 가지고 있습니다. 그러나 그 행렬에서 임의로 회전 된 데이터 조각을 추출하여 2D 행렬로 저장할 수 있습니다. 접속하다. slice() 함수가 모든 각도에서 슬라이스 된 데이터를 표시하는 것과 비슷합니다. 단, 배열 인 것처럼 데이터를보고 수정할 수 있어야합니다.2D 배열로 3D 배열에서 임의로 회전 된 데이터면을 추출합니다.

Ax + By + Cz = D 
:

는 I는 (X, Y 및 Z 축), I는 또한 형태의 평면 방정식을 계산 한 평면의 피벗 점의 좌표뿐만 아니라 회전 각도를 가지고

그 평면에있는 데이터 만 포함 된 3D 행렬을 추출 할 수는 있지만 간단한 2D 배열로 변환하는 방법을 알지 못합니다.

또 다른 방법은 원본 평면을 평면 각도의 반대 방향으로 회전시켜 데이터 평면을 XY 축과 일렬로 정렬하고 간단히 해당 부분을 추출하는 것입니다 ,하지만 그와 같은 행렬을 회전시키는 것이 가능한지 나는 모른다.

나는 이것이 다른 곳에서 대답하지 않기를 바란다. 나는 하루 종일 인터넷 검색을 해왔지만 아무 문제도 내 것과 정확히 일치하지 않는다.

감사합니다.

+0

평면 (일반적으로 매우 작은 양의 데이터 점이 될 것임)에 정확하게 속하는 데이터 만 필요합니까? 아니면 데이터를 보간하려고합니까? – yohai

+0

보간법이 나중에 고려 될지라도, 보간법 대신 가장 가까운 셀을 반환하고 싶습니다. –

+0

3 개의 indeces'A [i, j, k] = a_ijk'가있는 행렬을 가지고 있고 2의 배열을 만들고 싶습니다. B''''''''''''''''는'i'''''''''''''''''' 세계의 평면/슬라이스에서 좌표가되는 곳인 B [u, v] = b_uv'입니다. (그리고 모든 indeces는 정수이다.) 또한,'ijk'가'u = 1'과'v = 1'에 해당하는 규칙이 있습니까? – ja72

답변

1

당신은 the code here을 살펴 수있는이 승인됩니다. 나는이 기능이 당신이 해결하고자하는 것과 유사하다고 생각한다.

평면의 크기, 평면의 중심점 및 평면 법선, 즉 [A, B, C]가 주어진 경우 function extracts an arbitrary plane from a volume입니다.또한 평면상의 각 픽셀의 용적 지수 및 좌표를 출력합니다.

0

아하! 방금 직접 해결했을 수도 있습니다.

는 I가 (0,0,1)를 사용하여 회전 행렬의 법선 벡터를 회전 평면 방정식을 생성하고 I은 또한 다음과 같은 벡터를 회전한다면 D.를 찾으려면

(1,0,0) //step in the x direction of our 2D array 

(0,1,0) //step in the y direction of our 2D array 

배열의 다음 열 또는 다음 행으로 이동하기 전에 x, y, z의 좌표가 변경되어야하는 정도를 나타내는 그라디언트가 있습니다. 좋아 약간의 변경 내 벡터를 회전하고있을 때 나는 또한 XYZ를 나타내는 3 차원 공간에있는 점을 회전해야합니다 : 그것은

편집을 작동하는 경우

나는 빨리이를 조롱하고 대답으로 표시됩니다 x = 0, y = 0, z = 0의 좌표 (구조의 중심을 중심으로 회전하고 있기는하지만 실제 크기는 -sizeex/2, -sizey/2, -sizez/2이며 크기는 데이터를 가져온 다음 회전 후의 각 좌표에 크기/2를 추가하여 다시 원래 위치로 변환합니다.

이제 2D 좌표계의 x 좌표를 증가시키고 그라데이션 변화를 증가 시킴에 따라 3D에서 그라디언트가 변경되었으므로 가능한 모든 x 및 y 좌표를 반복 할 수 있습니다. 결과 배열은 50x50x50 배열의 경우 50x50이 될 수 있습니다. 불규칙한 크기의 경우 어떤 모양이 될지 확신하지 못합니다. 결국 2D 배열에서 결과를 얻으 려하고 데이터의 평면에서 3D 좌표를 계산합니다. 회전 된 코너 값이 시작점이됩니다. 만세!

그냥 모든 각도를 포괄 이것에 대한 좋은 테스트를 해결하기 위해 도착하고 나는 대답