Dicom 数据集中的像素数据非常特别。它不能作为单个标签轻松读取或写入。
读取标签代码:
var dcmFile = DicomFile.Open(path);
var dcmDataSet = dcmFile.Dataset;string strPatientName = dcmDataSet.GetString(DicomTag.PatientName);
string strPatientSex = dcmDataSet.GetString(DicomTag.PatientSex);//获取原始调窗
double datasetWinC = dcmDataSet.GetValue<double>(DicomTag.WindowCenter, 0);
double datasetWinW = dcmDataSet.GetValue<double>(DicomTag.WindowWidth, 0);//获取宽高
int width = dcmDataSet.GetSingleValueOrDefault<int>(DicomTag.Columns, 0);
int height = dcmDataSet.GetSingleValueOrDefault<int>(DicomTag.Rows, 0);
修改dicom像素数据代码:
DicomFile ctFile = DicomFile.Open(@"C:\Temp\original.dcm");// Create PixelData object to represent pixel data in dataset
DicomPixelData pixelData = DicomPixelData.Create(ctFile.Dataset);
// Get Raw Data
byte[] originalRawBytes = pixelData.GetFrame(0).Data;// Create new array with modified data
byte[] modifiedRawBytes = new byte[originalRawBytes.Length];
for (int i = 0; i < originalRawBytes.Length; i++)
{modifiedRawBytes[i] = (byte)(originalRawBytes[i] + 100);
}// Create new buffer supporting IByteBuffer to contain the modified data
MemoryByteBuffer modified = new MemoryByteBuffer(modifiedRawBytes);// Write back modified pixel data
ctFile.Dataset.AddOrUpdatePixelData(DicomVR.OB, modified);//保存为新更改数据
ctFile.Save(@"C:\Temp\Modified.dcm");//保存回原路径
ctFile.Save(@"C:\Temp\original.dcm");
请注意,有更多的辅助类可以直接以特定格式处理像素数据,例如 PixelDataConverter
和 PixelDataFactory
。
此外,如果您想使用实际图像,请使用 DicomImage
类(class)。
修改标签代码:
string path=@"D:\Test.dcm";
var dcmFile = DicomFile.Open(path);
DicomDataset dataset = dcmFile.Dataset;
dataset.AddOrUpdate(DicomTag.SOPInstanceUID, CreateInstanceUID());
dataset.AddOrUpdate(DicomTag.ContentDate, CreateDateDICOMFormat(DateTime.Now));
dataset.AddOrUpdate(DicomTag.ContentTime, CreateTimeDICOMFormat(DateTime.Now));
dataset.AddOrUpdate(DicomTag.AcquisitionNumber, "00666");
dataset.AddOrUpdate(DicomTag.InstanceNumber, "00666");
dcmFile.Save(path);
关于c# - C#用fo-dicom对CT图像的PixelData进行处理和转换,
在Stack Overflow上找到一个类似的问题: type conversion - Manipulating and Converting PixelData of CT Image with fo-dicom in C# - Stack Overflow
参照:c# - C#用fo-dicom对CT图像的PixelData进行处理和转换 - 代码先锋网