<body bgcolor="#ffffff" background="https://img.web.de/v/p.gif" class="bgRepeatYes" style="background-repeat: repeat; background-color: rgb(255, 255, 255); color: rgb(0, 0, 0); font-family: verdana,geneva; font-size: 9pt; padding-left: 0px;"><div style="min-height: 200px; background-image: url(https://img.web.de/v/p.gif); background-repeat: repeat; background-color: #ffffff; font-family: verdana,geneva; font-size: 9pt; padding-left: 0px;">Hi,<br /><br />i need to get a result image of a MIP VolumeRendering to use it in another window. There is the RayCastImage function in vtkFixedPointVolumeRayCastMapper which provides an unsigned short array. I don't understand the values in vtkFixedPointRayCastImage. The input for the volumemapper are medical images(CT series) which are stored in a vtkImageData object. The datatype is short. There are negativ and positiv values in the images(HU Units). Here is how I configured the voluemmapper:<br /><br />m_vtkOpacityTransferFunction = vtkPiecewiseFunction::New();<br /> <br /> m_vtkOpacityTransferFunction->AddPoint(pVolumedata->GetDicomInfo()->minValue , 0.0 ); //min voxel Value of the Series<br /> m_vtkOpacityTransferFunction->AddPoint(pVolumedata->GetDicomInfo()->maxValue, 1.0 ); //max voxel Value of the Series<br /><br /> m_vtkGrayTransferFunction = vtkPiecewiseFunction::New();<br /> m_vtkGrayTransferFunction->AddSegment(pVolumedata->GetDicomInfo()->minValue, 0.0 ,<br /> pVolumedata->GetDicomInfo()->maxValue, 1.0 );<br /><br /> <br /> m_vtkMipProperty = vtkVolumeProperty::New();<br /> m_vVtkObjects.push_back(m_vtkMipProperty);<br /> m_vtkMipProperty->SetScalarOpacity( m_vtkOpacityTransferFunction );<br /> m_vtkMipProperty->SetColor( m_vtkGrayTransferFunction );<br /> m_vtkMipProperty->SetInterpolationTypeToLinear(); <br /> <br /> m_vtkMIPVolumeMapper = CImageFixedPointRayCastMapper::New(); <br /> m_vtkMIPVolumeMapper->SetBlendModeToMaximumIntensity(); //Max Mip<br /> m_vtkMIPVolumeMapper->SetInput(pVolumedata->getImageData()); //vtkImageData with the short array<br /><br />To get the resultimage I call Render() and with the following code i try to get the resultimage:<br /><br />vtkFixedPointRayCastImage *pVtkRayCastImage = m_vtkMIPVolumeMapper->GetRayCastImage();<br /><br /> if (pVtkRayCastImage)<br /> {<br /> <br /> int nFullSize[2];<br /> pVtkRayCastImage->GetImageMemorySize(nFullSize);<br /> int nUsedSize[2];<br /> pVtkRayCastImage->GetImageInUseSize(nUsedSize);<br /> <br /> unsigned short *pSrcPtr = pVtkRayCastImage->GetImage();<br /><br /> int nImageWidth = nUsedSize[0];<br /> int nImageHeight = nUsedSize[1];<br /> <br /> short *pDstPtr = (short *) malloc((nImageWidth) * (nImageHeight) * sizeof(short));<br /><br /> int nMinValue = 10000;<br /> int nMaxValue = -10000;<br /> int nOffset =0;<br /> <br /> int nUnusedLinePixels = 4 * (nFullSize[0] - nUsedSize[0]); <br /> <br /> if(pDstPtr) <br /> { <br /> int j = 0; <br /> int iptrTemp = 0;<br /> while( j < nImageHeight)<br /> { <br /> int i = 0;<br /><br /> while( i < nImageWidth)<br /> { <br /> short nValue = pSrcPtr[iptrTemp]/3.6 - m_nMIPValueOffset;<br /><br /> if (nValue<nMinValue)<br /> nMinValue = nValue;<br /><br /> if (nValue>nMaxValue)<br /> nMaxValue = nValue;<br /><br /> pDstPtr[nOffset] = nValue;<br /> iptrTemp += 4; //plus 4 steps,because of the RGBA- values per pixel<br /> i++;<br /> nOffset++;<br /> }<br /> //den Rest der Zeile überspringen<br /> iptrTemp+= nUnusedLinePixels; <br /> j++;<br /> } <br /><br /> <br /> //import the result back to a vtkImageData object: m_vtkBackupData<br /> m_vtkImageImport->SetImportVoidPointer(NULL,0);<br /> m_vtkImageImport->SetDataScalarTypeToShort();<br /> m_vtkImageImport->SetDataSpacing(1,1,1);<br /> m_vtkImageImport->SetWholeExtent(0 , nImageWidth-1, 0 ,nImageHeight -1, 0 , 0);<br /> m_vtkImageImport->SetNumberOfScalarComponents(1);<br /> m_vtkImageImport->SetDataExtentToWholeExtent(); <br /> m_vtkImageImport->SetImportVoidPointer(pDstPtr);<br /> m_vtkImageImport->Update();<br /> m_vtkBackupData->DeepCopy(m_vtkImageImport->GetOutput());<br /><br /> //cleanup<br /> delete pDstPtr; <br /> }<br /> }<br /> else<br /> return false;<br /><br />I can see the the result but in wrong grayvalues. They are always very high. I tried already to to add an offset to the inputvalues that i only have positiv input but it also doesn't work. <br />What i am doing wrong or is there another way to get the image? <br /><br />Thanks in advance<br />Andreas</div> <br><br><table cellpadding="0" cellspacing="0" border="0"><tr><td bgcolor="#000000"><img src="https://img.web.de/p.gif" width="1" height="1" border="0" alt="" /></td></tr><tr><td style="font-family:verdana; font-size:12px; line-height:17px;">WEB.DE DSL SOMMER-SPECIAL: Surf & Phone Flat 16.000 für <br>nur 19,99 ¿/mtl.!* <a href="http://web.de/DSL"><b>http://web.de/DSL</b></a>-Doppel-Flatrate/</td></tr></table>
</body>