0
我試圖從180度(或翻轉)的DICOM文件中旋轉原始像素數據。然而,在將像素數據寫回到文件(在這種情況下,它是一個DICOM文件)並顯示它之後,我已經成功地翻轉了圖像。圖像的最終輸出不正確。旋轉圖像的原始像素數據180度
下面是我試圖翻轉180 /鏡像的圖像樣本示例。
下面是我使用進行翻轉代碼:
string file = @"adicomfile.dcm";
DicomFile df = new DicomFile();
df.Load(file);
// Get the amount of bits per pixel from the DICOM header.
int bitsPerPixel = df.DataSet[DicomTags.BitsAllocated].GetInt32(0, 0);
// Get the raw pixel data from the DICOM file.
byte[] bytes = df.DataSet[DicomTags.PixelData].Values as byte[];
// Get the width and height of the image.
int width = df.DataSet[DicomTags.Columns].GetInt32(0, 0);
int height = df.DataSet[DicomTags.Rows].GetInt32(0, 0);
byte[] original = bytes;
byte[] mirroredPixels = new byte[width * height * (bitsPerPixel/8)];
width *= (bitsPerPixel/8);
// The mirroring/image flipping.
for (int i = 0; i < original.Length; i++)
{
int mod = i % width;
int x = ((width - mod - 1) + i) - mod;
mirroredPixels[i] = original[x];
}
df.DataSet[DicomTags.PixelData].Values = mirroredPixels;
df.Save(@"flippedicom.dcm", DicomWriteOptions.Default);
這是我的輸出(不正確)。白色和失真不是所需的輸出。
我使用ClearCanvas DICOM庫,但是這不應該的問題,因爲我只是試圖操縱包含在文件本身的原始像素數據。
期望的輸出將優選看起來像原始,但翻轉180 /鏡像。
一些援助將不勝感激。我試過我最好的搜索,但無濟於事。
拍一個小圖像作爲測試,看看它實際移動的是什麼字節 – csharpwinphonexaml
事實上,你的圖像是正確的形狀,並在正確的位置有正確的元素告訴我你的數學是正確的,你正在移動像素正確的地方到正確的地方。所以我不得不懷疑你沒有移動整個像素 - 也許你只是移動紅色或綠色或藍色通道,如果是彩色圖像,或者你沒有正確遮蓋透明度並將其添加回來。我說你的數學會給你正確的位置,但是你不是從原點拾取整個像素,或者不是將整個像素寫回翻轉的圖像。 –
「bitsPerPixel」的值是什麼(以及圖像的PhotometricInterpretation是什麼)?如果它大於8,那麼你將需要一個int數組而不是字節數組 –