{//*~get info from file~*//// (0028,0030) 像素间距float[] pixel_space = new float[2];string[] pixel_space_p = Viewer.CurrentImage.DataSet[0x0028, 0x0030].Value as string[];pixel_space[0] = float.Parse(pixel_space_p[0]); //Pixel size (row to row) pixel_space[1] = float.Parse(pixel_space_p[1]); //Pixel size (collom to collom)// (0028,0010) & (0028,0011) 像素行/列数ushort rows = (ushort)(Viewer.CurrentImage.DataSet[0x0028, 0x0010].Value); // number of rowsushort colums = (ushort)(Viewer.CurrentImage.DataSet[0x0028, 0x0011].Value); // number of colloms// (0020,0032) 首像素位置 double[] top_left_corner = new double[3];string[] top_left_corner_p = Viewer.CurrentImage.DataSet[0x0020, 0x0032].Value as string[];top_left_corner[0] = double.Parse(top_left_corner_p[0]); // X pos of frame (Top left) in real space top_left_corner[1] = double.Parse(top_left_corner_p[1]); // Ytop_left_corner[2] = double.Parse(top_left_corner_p[2]); // Z// (0020,0037) 方向double[,] frame_vec = new double[3, 3];string[] frame_vec_p = Viewer.CurrentImage.DataSet[0x0020, 0x0037].Value as string[];frame_vec[0, 0] = double.Parse(frame_vec_p[0]); //top edge frame vector x1frame_vec[0, 1] = double.Parse(frame_vec_p[1]); //top edge frame vector y1frame_vec[0, 2] = double.Parse(frame_vec_p[2]); //top edge frame vector z1frame_vec[1, 0] = double.Parse(frame_vec_p[3]); //left edge frame vector x1frame_vec[1, 1] = double.Parse(frame_vec_p[4]); //left edge frame vector y1frame_vec[1, 2] = double.Parse(frame_vec_p[5]); //left edge frame vector z1// calculate the frame Normal ,即求平面法向量// the frame normal lets us know if the image is Sag(矢状位,侧视), Tran(横断位,俯视) or Coronal(冠状位,正视)frame_vec[2, 0] = frame_vec[0, 1] * frame_vec[1, 2] - frame_vec[0, 2] * frame_vec[1, 1];frame_vec[2, 1] = frame_vec[0, 2] * frame_vec[1, 0] - frame_vec[0, 0] * frame_vec[1, 2];frame_vec[2, 2] = frame_vec[0, 0] * frame_vec[1, 1] - frame_vec[0, 1] * frame_vec[1, 0];// calculat mid frame distance 求中心位置double[] mid_frame = new double[3];mid_frame[0] = top_left_corner[0] + (colums / 2) * pixel_space[0] * frame_vec[0, 0] + (rows / 2) * pixel_space[1] * frame_vec[1, 0];mid_frame[1] = top_left_corner[1] + (colums / 2) * pixel_space[0] * frame_vec[0, 1] + (rows / 2) * pixel_space[1] * frame_vec[1, 1];mid_frame[2] = top_left_corner[2] + (colums / 2) * pixel_space[0] * frame_vec[0, 2] + (rows / 2) * pixel_space[1] * frame_vec[1, 2];// if Sagittal checkif ((Math.Abs(frame_vec[2,0]) > Math.Abs(frame_vec[2,1])) && (Math.Abs(frame_vec[2,0]) > Math.Abs(frame_vec[2,2]))){ if (Math.Abs(frame_vec[2, 0]) < 0.99)MessageBox.Show("Sagittal (" + Convert.ToString(mid_frame[0]) + ")");elseMessageBox.Show("Sagittal " + Convert.ToString(mid_frame[0]));}else //Cor checkif ((Math.Abs(frame_vec[2, 1]) > Math.Abs(frame_vec[2, 0])) && (Math.Abs(frame_vec[2, 1]) > Math.Abs(frame_vec[2, 2]))) {if (Math.Abs(frame_vec[2, 1]) < 0.99)MessageBox.Show("Coronal (" + Convert.ToString(mid_frame[1]) + ")");elseMessageBox.Show("Coronal " + Convert.ToString(mid_frame[1]));}else // Ax { if (Math.Abs(frame_vec[2, 2]) < 0.99)MessageBox.Show("Transverse (" + Convert.ToString(mid_frame[1]) + ")");elseMessageBox.Show("Transverse " + Convert.ToString(mid_frame[1]));}
}
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!