locked
HELP! Moving Through 2D Image Sets...

    Question

  • I have a series of bitmaps (~300-500) that represent slices through a patient's chest taken with a cat scan (CT) machine at a hospital (typically stored in a DICOM file format). Physicians use special workstation computers from healthcare vendors that allow them to scroll through these image sets and re-orient the visible plane through this image set and then scroll through it again, with the new orientation.

    I already have a basic viewer that allows the user to scroll through the image set, displaying each image as it was captured natively. however, I need to be able to provide this same basic capability of allowing the user to re-orient the visible plane within a Windows 8 app, running on a Surface tablet.

    I have never used DirectX before and am not a mathematician.

    can someone please help me understand how to approach this problem. will I need to use a 3D API for this? I am hoping that I can just use the basic Win RT APIs available to Windows 8 apps, but will jump into a deeper API if necessary (i.e. DirectX). I have a hunch that what is involved is some sort of matrix transformation through the 3D matrix represented by the 2D images merged together. is this correct?

    any assistance regarding the approach to this problem, the type of math involved, and especially any sample code or APIs that will assist in this process is greatly appreciated. thank you in advance!

    Monday, February 25, 2013 11:24 PM

Answers

  • If I'm understanding what you are looking for here (I'm not positive - a sketch or screenshot may help) then you would use a 3D API, but likely fairly simply. You could display your image slices on a series of rectangles and then move the camera around as desired.

    I'd start with the Direct3D tutorial sample to get a feel for how to set up objects and the camera and then either experiment or look at other samples to see what looks relevant.

    --Rob

    Tuesday, February 26, 2013 7:01 PM
    Owner

All replies

  • If I'm understanding what you are looking for here (I'm not positive - a sketch or screenshot may help) then you would use a 3D API, but likely fairly simply. You could display your image slices on a series of rectangles and then move the camera around as desired.

    I'd start with the Direct3D tutorial sample to get a feel for how to set up objects and the camera and then either experiment or look at other samples to see what looks relevant.

    --Rob

    Tuesday, February 26, 2013 7:01 PM
    Owner
  • By "reorient the visible plane through this image set" do you mean that you will be taking a slice through the volume of data (seeing pieces of multiple bitmaps combined together)? If so, you could potentially stuff all that data into a volume texture and render a rectangle through it. Memory and GPU limitations on the Surface will be a significant issue. I imagine your source imagery is 8 or 16 bit grayscale data. A 512x512x512 volume texture would take 134MB or 268MB. However, you would need to check the D3D volume texture size limits on your target hardware before even considering this approach. If the GPU is limited to smaller volume texture sizes then you would need to "brick" the volume (e.g. use several 128x128x128 textures and render a slice through each one that's intersected by the viewing plane).

    For noninteractive speeds you might be better off sampling a rectangle in the source volume via C++. Stuff the output in a bitmap and display it on the screen (no D3D required). Optimize the hell out of your sampling code then multithread it and you might achieve acceptable performance. It would be hopeless on a SurfaceRT but might work on a SurfacePro.

    Good luck!

    Tuesday, March 5, 2013 5:47 AM