使用fo-dicom读取rtstruct文件,拿到roi的轮廓坐标之后再勾画到原始图像上面的时候方向和原始图像的方向是相反的,这个问题怎么处理?

代码如下:
void SetRoiContour()
{
foreach (vtkActor contourActor in ContourActors)
{
imageViewer2.GetRenderer().RemoveViewProp(contourActor);
}
ContourActors = new List<vtkActor>();
string SopUId = dicomDataset.GetStringValue(DicomTag.SOPInstanceUID);
int rows = dicomImageReader.GetHeight();
float[] imagePositionPatient = dicomImageReader.GetImagePositionPatient();
double[] spacing = dicomImageReader.GetDataSpacing();
foreach (RoiSequence roiSequence in RoiSequences)
{
if (roiSequence == null || roiSequence.RoiColor == null || roiSequence.roiContourDatas == null) continue;
List<RoiContourData> roiContourData = roiSequence.roiContourDatas.FindAll(p => p.RefeRenceSopUId == SopUId);
if (roiContourData == null) continue;
foreach (RoiContourData roiContour in roiContourData)
{
if (roiContour.ContourData == null) continue;
// 创建一个空的vtkPoints对象,用于存储轮廓的顶点坐标
var contourPoints = vtkPoints.New();
// 创建一个空的vtkCellArray对象,用于存储轮廓的多边形拓扑信息
var contourCells = vtkCellArray.New();
// 创建一个vtkPolyLine对象,用于表示轮廓的多边形线段
var polyLine = new vtkPolyLine();
// 获取轮廓点数
var contourPointsNumber = roiContour.ContourData.Length / 3;
// 设置polyLine的点数为numberOfContourPoints
polyLine.GetPointIds().SetNumberOfIds(contourPointsNumber);
// 将轮廓坐标添加到vtkPoints对象中,并记录其索引
var contourPointIds = new List<int>();
for (int i = 0; i < roiContour.ContourData.Length; i += 3)
{
double[] doubles = new double[3];
doubles[0] = (roiContour.ContourData[i] - imagePositionPatient[0]);
doubles[1] = (roiContour.ContourData[i + 1] - imagePositionPatient[1]);
doubles[2] = 1;
int contourPointId = (int)contourPoints.InsertNextPoint(doubles[0], doubles[1], doubles[2]);
contourPointIds.Add(contourPointId);
}
// 根据轮廓点数创建一个对应的vtkPolyLine对象,并设置其顶点索引
for (int i = 0; i < contourPointsNumber; i++)
{
polyLine.GetPointIds().SetId(i, contourPointIds[i]);
}
// 将轮廓多边形添加到vtkCellArray对象中
contourCells.InsertNextCell(polyLine);
// 创建一个vtkPolyData对象,用于存储轮廓的顶点和多边形
vtkPolyData contourPolydata = vtkPolyData.New();
contourPolydata.SetPoints(contourPoints);
contourPolydata.SetLines(contourCells);
// 创建一个vtkPolyDataMapper对象,用于映射轮廓的几何数据到图形基元上
var contourMapper = vtkPolyDataMapper.New();
contourMapper.SetInputData(contourPolydata);
// 创建一个vtkActor对象,用于显示轮廓的颜色和透明度
var contourActor = vtkActor.New();
contourActor.SetMapper(contourMapper);
contourActor.GetProperty().SetColor(roiSequence.RoiColor[0], roiSequence.RoiColor[1], roiSequence.RoiColor[2]);
contourActor.GetProperty().SetOpacity(0.5);
ContourActors.Add(contourActor);
}
}
foreach (var contourActor in ContourActors)
{
imageViewer2.GetRenderer().AddActor(contourActor);
}
}