2016-05-28 9 views
1

Ich versuche, zwei Ebenen Gleichungen aus den Daten von zwei dicom Bildern zu berechnen und eine Schnittlinie aus diesen beiden Ebenen Gleichungen zu erhalten. Das dicom-Tag ImagePositionPatient hat drei Koordinaten x, y, z und das Tag ImageOrientationPatient hat zwei Vektoren mit jeweils drei Komponenten. Wie Gleichung der Ebene kann mit diesen drei Koordinaten und zwei Vektoren berechnet werden?Wie berechnen Ebenengleichung mit drei Punkten und zwei Vektoren?

Dies ist mein Code:

public void ShowLocalizerLine(View v) 
{ 
    //Getting The Values 
    InfoOfFirst(); //This gets the img position and orientation of src img 
    InfoOfSecond(); //This gets the img position and orientation of dst img 
    String[] src_position_array = new String[3]; 
    src_position_array = firstimg_position.split("\\\\"); 
    Src_Position_Xo = Float.parseFloat(src_position_array[0]); 
    Src_Position_Yo = Float.parseFloat(src_position_array[1]); 
    Src_Position_Zo = Float.parseFloat(src_position_array[2]); 

    String[] src_orientation_array = new String[6]; 
    src_orientation_array = firstimg_orientation.split("\\\\"); 
    Src_Orientation_Vector1_A = Float.parseFloat(src_orientation_array[0]); 
    Src_Orientation_Vector1_B = Float.parseFloat(src_orientation_array[1]); 
    Src_Orientation_Vector1_C = Float.parseFloat(src_orientation_array[2]); 
    Src_Orientation_Vector2_D = Float.parseFloat(src_orientation_array[3]); 
    Src_Orientation_Vector2_E = Float.parseFloat(src_orientation_array[4]); 
    Src_Orientation_Vector2_F = Float.parseFloat(src_orientation_array[5]); 

    String[] dst_position_array = new String[3]; 
    dst_position_array = secimg_position.split("\\\\"); 
    Dst_Position_Xo = Float.parseFloat(dst_position_array[0]); 
    Dst_Position_Yo = Float.parseFloat(dst_position_array[1]); 
    Dst_Position_Zo = Float.parseFloat(dst_position_array[2]); 

    String[] dst_orientation_array = new String[6]; 
    dst_orientation_array = secimg_orientation.split("\\\\"); 
    Dst_Orientation_Vector1_A = Float.parseFloat(dst_orientation_array[0]); 
    Dst_Orientation_Vector1_B = Float.parseFloat(dst_orientation_array[1]); 
    Dst_Orientation_Vector1_C = Float.parseFloat(dst_orientation_array[2]); 
    Dst_Orientation_Vector2_D = Float.parseFloat(dst_orientation_array[3]); 
    Dst_Orientation_Vector2_E = Float.parseFloat(dst_orientation_array[4]); 
    Dst_Orientation_Vector2_F = Float.parseFloat(dst_orientation_array[5]); 

    //Calculations 
    float dst_nrm_dircos_x = Dst_Orientation_Vector1_B*Dst_Orientation_Vector2_F - Dst_Orientation_Vector1_C*Dst_Orientation_Vector2_E; 
    float dst_nrm_dircos_y = Dst_Orientation_Vector1_C*Dst_Orientation_Vector2_D - Dst_Orientation_Vector1_A*Dst_Orientation_Vector2_F; 
    float dst_nrm_dircos_z = Dst_Orientation_Vector1_A*Dst_Orientation_Vector2_E - Dst_Orientation_Vector1_B*Dst_Orientation_Vector2_D; 

    float src_pos_x = Src_Position_Xo - Dst_Position_Xo; 
    float src_pos_y = Src_Position_Yo - Dst_Position_Yo; 
    float src_pos_z = Src_Position_Zo - Dst_Position_Zo; 
    float dst_pos_x = Dst_Orientation_Vector1_A*src_pos_x + Dst_Orientation_Vector1_B*src_pos_y + Dst_Orientation_Vector1_C*src_pos_z; 
    float dst_pos_y = Dst_Orientation_Vector2_D*src_pos_x + Dst_Orientation_Vector2_E*src_pos_y + Dst_Orientation_Vector2_F*src_pos_z; 
    float dst_pos_z = dst_nrm_dircos_x*src_pos_x + dst_nrm_dircos_y*src_pos_y + dst_nrm_dircos_z*src_pos_z;  
} 
+0

Ist das wirklich eine Programmierfrage oder eher für Math.SE geeignet? – paisanco

+0

@paisanco es ist mit Mathematik verbunden, aber die Aufgabe muss in Android App (Java) –

+0

getan werden Sie brauchen nur zwei Vektoren, um die Ebenengleichung zu berechnen - seine normale und eine Position; Was sind die 5 Vektoren, die du präsentiert hast? haben sie variable Namen, die auf ihren Zweck hindeuten? –

Antwort

1

Von den Klassennamen Ich denke, ImagePositionPatient gibt einen Punkt (etwa ein) auf der Ebene und ImageOrientationPatient (sagen wir n) gibt die normal. (Ich würde nicht wissen, das ist richtig, aber da Sie mir gesagt haben, dass sie 3D-Vektoren sind das ist, was ich im Sinn habe).

Dann wird Ihre Ebenengleichung von dot(n, a) = dot(n, x) gegeben, wobei x ist die Position variabel und n normiert wird. Dies ergibt Ax + By + Cz = D, was die kartesische Gleichung ist.

+0

Danke für Hilfe :) –

+0

@Android_Learner kein Problem –