2011年3月21日月曜日

RescaleIntercept タグ と RescaleSlopeタグ

他院からのCDで Rescale Interceptタグ と Rescale Slopeタグがある DICOM Fileを散見。
シーメンスのCTなど。
画像データに傾斜と切片を付加して8bitグレースケールを得る。

fixed (byte* pData = pixelData)
{
    int pixel;
    short* ptr = (short*)pData; //short型ポインタ
    byte* pBitmap = (byte*)bitmapData.Scan0;
    int j = 0, i = 0;
    int difference = max - min;
    if (rescaleIntercept == 0.0d )
    {
        for (int x = 0; x < _columns; x++)
        {
            pixel = (int)(((*ptr + rescaleIntercept - windowCenter) / windowWidth + 0.5d) * 255.0d);
            if (pixel > 255) pixel = 255;
            else if (pixel < 0) pixel = 0;
            *pBitmap = (byte)pixel; ptr++; pBitmap++;
        }
        pBitmap += padding;
    }
    else
    {
        for (int y = 0; y < _rows; y++)
        {
            j = y * _columns;
            for (int x = 0; x < _columns; x++)
            {
                pixel = (int)((((int)ptr[j + x] + rescaleIntercept - windowCenter) / windowWidth + 0.5d) * 255.0d);
                if (pixel > 255) pixel = 255;
                if (pixel < 0) pixel = 0;
                pixel = (int)(rescaleSlope * pixel + rescaleIntercept);
                pBitmap[i] = (byte)pixel;
                i++;
           }
           i += padding;
       }
    }
}

0 件のコメント :

コメントを投稿