<div>hello:</div>
<div>I want to do a series of DICOM image processing with vtkImageData class, ie, getting the gray value of point (i,j) with GetScalarComponentAsDouble(i, j,0,0), and set it with SetScalarComponentFromDouble(i,j,0,0,grayValue), but there is some problem:
</div>
<div>the program is as follow:</div>
<div>
<table class="t_msg" cellspacing="0" cellpadding="4" border="0">
<tbody>
<tr>
<td class="line" style="PADDING-TOP: 10px" valign="top" height="100%">
<div class="t_msgfont">#include "vtkDICOMImageReader.h"<br>#include "vtkImageViewer.h"<br>#include "vtkRenderWindowInteractor.h"<br>#include "vtkImageData.h"<br>#include "vtkRenderer.h
"<br><br>int main()<br>{<br> vtkDICOMImageReader *reader = vtkDICOMImageReader::New();<br> reader->SetDataByteOrderToLittleEndian();<br> reader->SetFileName("ankle.dcm");<br> //Set the origin of the data (location of first pixel in the file)
<br> reader->SetDataOrigin(0.0,0.0,0.0);<br> reader->Update();<br> int wide=reader->GetWidth();<br> int height=reader->GetHeight();<br><br> vtkImageData *imgData=vtkImageData::New();
<br> imgData->SetDimensions(wide,height,1);<br> imgData->SetScalarTypeToUnsignedChar();<br> imgData->SetNumberOfScalarComponents(4);<br> imgData->AllocateScalars(); <br><br> imgData->DeepCopy(reader->GetOutput());
<br> <br> <br> for(int i=1;i<wide-1;i++)<br> for(int j=1;j<height-1;j++)<br> {<br> double temp; <br> temp=reader->GetOutput()->GetScalarComponentAsDouble(i, j,0,0);
<br> //evaluate imgData with original image's gray value</div>
<div class="t_msgfont"> imgData->SetScalarComponentFromDouble(i,j,0,0,temp);<br> }<br> <br> //grads</div>
<div class="t_msgfont"> for( i=1;i<wide-1;i++)<br> for(int j=1;j<height-1;j++)<br> {<br> <br> int temp1[10];</div>
<div class="t_msgfont"> //the processed image is good when using progarm 2. but the processed image is exceptional when progarm 1 is used. The data in imageData and reader should be the same with "temp=reader->GetOutput()->GetScalarComponentAsDouble(i, j,0,0);
<br> //evaluate imgData with original image's gray value
<div class="t_msgfont"> imgData->SetScalarComponentFromDouble(i,j,0,0,temp);"</div>
<div class="t_msgfont">but the actual result is different. Maybe the class data style is different. It will be thankful if you can tell me why!<br><br> //=====program 1£º<br> /*
<br> temp1[1]=imgData->GetScalarComponentAsDouble(i-1,j-1,0,0); <br> temp1[2]=imgData->GetScalarComponentAsDouble(i, j-1,0,0);<br> temp1[3]=imgData->GetScalarComponentAsDouble(i+1,j-1,0,0);
<br> <br> temp1[4]=imgData->GetScalarComponentAsDouble(i-1,j,0,0);<br> temp1[5]=imgData->GetScalarComponentAsDouble(i, j,0,0);<br> temp1[6]=imgData->GetScalarComponentAsDouble(i+1,j,0,0);*/
<br> <br> //=====program 2£º<br> temp1[1]=reader->GetOutput()->GetScalarComponentAsDouble(i-1,j-1,0,0);<br> temp1[2]=reader->GetOutput()->GetScalarComponentAsDouble(i, j-1,0,0);
<br> temp1[3]=reader->GetOutput()->GetScalarComponentAsDouble(i+1,j-1,0,0);<br> <br> temp1[4]=reader->GetOutput()->GetScalarComponentAsDouble(i-1,j,0,0);
<br> temp1[5]=reader->GetOutput()->GetScalarComponentAsDouble(i, j,0,0);<br> temp1[6]=reader->GetOutput()->GetScalarComponentAsDouble(i+1,j,0,0); </div></div>
<div class="t_msgfont"> //=====program2 <br> <br> temp1[5]=sqrt((temp1[5]-temp1[3])*(temp1[5]-temp1[3])+(temp1[2]-temp1[6])*(temp1[2]-temp1[6]));
<br> imgData->SetScalarComponentFromDouble(i,j,0,0,temp1[5]);<br> <br> }<br><br> <br><br><br>//=======================================================
<br><br> vtkImageViewer *viewer = vtkImageViewer::New();<br> viewer->SetInput(imgData);<br> viewer->SetColorWindow(280);<br> viewer->SetColorLevel(40);<br> viewer->SetPosition(100,100);
<br> viewer->Render();<br><br> vtkRenderWindowInteractor *viewerinter = vtkRenderWindowInteractor::New();<br> viewer->SetupInteractor(viewerinter);<br> viewerinter->Initialize();<br> viewerinter->Start();
<br> <br> reader->Delete();<br> imgData->Delete();<br> viewer->Delete();<br> viewerinter->Delete();<br> <br> return 0;<br>}</div><br><font style="FONT: 12px Tahoma, Verdana; COLOR: #333333">
</font></td></tr>
<tr>
<td align="right"> </td></tr></tbody></table></div>