当前位置: 首页 > 编程语言 > C#

dicom中如何绘制侦察-参考线分享

时间:2023-04-10 14:59:05 C#

dicom中如何绘制侦察/参考线我是dicom开发组的初学者。我需要在dicom图像上创建一个定位器图像线。那么,有什么好主意吗?任何极客。DavidBlaclasset已经为您指明了正确的方向(如果您想使用DICOM,您绝对应该阅读并珍惜dclunie的医学图像常见问题解答)。让我们看看我是否可以详细说明并让您更轻松。我假设您有一个工具/库可以从DICOM文件中提取标签(Offis的DCMTK?)。为了说明,我将参考CT扫描(许多切片,即许多图像)和侦察图像,您要在其上显示定位线。每个DICOM图像(包括CT切片和侦察)都包含关于它们在空间中的位置的完整信息,在这两个标签中:Group,ElemVRValue标签的名称----------------------------------------------------------------------(0020,0032)DS[-249.51172-417.51172-821]#ImagePositionPatientX0Y0Z0(0020,0037)DS[11]#ImageOrientationPatientABCDEF)表示第一个传输的全局坐标(以左上角像素为单位)像素。我将它们标记为X0、Y0、Z0。ImageOrientationPatient包含两个向量,具有三个分量,指定图像第一行像素和第一列像素的方向余弦。知道方向余弦不会有什么坏处(参见例如http://mathworld.wolfram.com/DirectionCosine.html),但dclunie建议的方法直接与它们一起工作,所以现在让我们假设它们给你空间方向图像平面。我将它们标记为AF以使公式更容易。现在,在dclunie给出的代码中(我相信它打算是C,但它足够简单,应该像Java、C#、awk、Vala、Octave等一样工作),约定如下:scr_*=referstoImage,即CTslicedst_*=指目标图像,即scout*_pos_x,*_pos_y,*_pos_z=X0,Y0,Z0above*_row_dircos_x,*_row_dircos_y,*_row_dircos_z=A,B,Cabove*_col_dircos_x,*_col_dircos_y,*_col_dircos_z=上面的D,E,F设置正确的值后,只需要应用以下内容:dst_nrm_dircos_y=dst_row_dircos_z*dst_col_dircos_x-dst_row_dircos_x*dst_col_dircos_z;dst_nrm_dircos_z=dst_row_dircos_x*dst_col_dircos_y-dst_row_dircos_y*dst_col_dircos_x;src_pos_x-=dst_pos_x;src_pos_y-=dst_pos_y;src_pos_z-=dst_pos_z;dst_pos_x=dst_row_dircos_x*src_pos_x+dst_row_dircos_y*src_pos_y+dst_row_dircos_z*src_pos_z;dst_pos_y=dst_col_dircos_x*src_pos_x+dst_col_dircos_y*src_pos_y+dst_col_dircos_z*src_pos_z;dst_pos_z=dst_nrm_dircos_x*src_pos_x+dst_nrm_dircos_y*src_pos_y+dst_nrm_dircos_z*src_pos_z;或者,如果你有一些奇特的矩阵类,你可以建立这个矩阵并将它与你的点坐标相乘[dst_row_dircos_xdst_row_dircos_ydst_row_dircos_z-dst_pos_x]M=[dst_col_dircos_xdst_col_dircos_ydst_col_dircos_z-dst_pos_y][dst_nrm_dircos_xdst_nrm_dircos_ydst_nrm_dircos_z-dst_pos_z][0001]那将是这样的:Scout_Point(x,y,z,1)=M*CT_Point(x,y,z,1)说了这么多,我们应该在Scoutcreate上转换哪些CT点一条线?同样对于这个dclunie已经提出了一个通用的解决方案:“我的方法是投影作为源图像边界框的正方形(即连接切片的TLHC、TRHC、BRHC和BLHC的线)。”如果将四个CT切片投影到角点,您将有一条垂直于侦察器的CT切片线和一条非垂直切片的梯形线。现在,如果您的CT切片是轴对齐的(即ImageOrientationPatient=[100010]),这四个点是微不足道的。您可以使用行数/列数和沿x/y方向的像素距离计算图像的宽度/高度(以毫米为单位),并相应地求和。如果你想实现常见的情况,那么你需要一点三角学......或者可能不需要。也许是时候阅读方向余弦的定义了,如果您还没有的话。我会尽力让你走上正轨。例如,在TRHC上工作,您知道体素在图像平面中的位置:#TRHC的像素位置x_pixel=number_of_columns-1#从0开始计数y_pixel=0z_pixel=0#我们在平面上!DICOM中的像素距离值指的是图像平面,所以你可以简单地将x和y乘以这些值,使其位置以mm为单位,z为0(像素和mm)。我说的是这些值:(0028,0011)US512#2,1Columns(0028,0010)US512#2,1Rows(0028,0030)DS[0.9765625.9765625]#20,2PixelSpacing以上矩阵M是从全局坐标到图像坐标的一般变换,具有可用的方向余弦。您现在需要的是执行反向作业(图像到全局)和源图像(CT切片)的操作。我会让你挖一本几何书来确定,但我认为它应该是这样工作的(旋转部分转置,平移没有符号变化,当然我们使用src_*值):[src_row_dircos_xsrc_col_dircos_xsrc_nrm_dircos_xsrc_pos_x]M2=[src_row_dircos_ysrc_col_dircos_ysrc_nrm_dircos_ysrc_pos_y][src_row_dircos_zsrc_col_dircos_zsrc_nrm_dircos_zsrc_pos_z][0001]将CT切片中的点(例如四个角)转换为毫米,然后将它们置于全局坐标中M2然后您可以将它们提供给dclunie报告的程序。在使用之前交叉检查我的数学,例如供患者诊断!?希望这有助于更好地理解dclunie的方法。干杯以上就是C#学习教程:如何在dicom中绘制侦察/参考线分享的所有内容,如果对大家有用,需要进一步了解C#学习教程,希望大家多加关注——本文来自来自网络收藏,不代表立场,如涉及侵权,请点击右边联系管理员删除。如需转载请注明出处: