<div dir="ltr">Hi James,<div><br></div><div>When applying thresholds to CT data, use the RescaleIntercept and RescaleSlope so that the thresholding is based on the real data values (in Hounsfield units).</div><div><br></div><div>Also see the "CT and PET rescaled values" section of the following page:</div><div><a href="http://dgobbi.github.io/vtk-dicom/doc/api/image_reader.html" target="_blank">http://dgobbi.github.io/vtk-<wbr>dicom/doc/api/image_reader.<wbr>html</a></div><div><br></div><div>Cheers,</div><div> - David</div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Jan 20, 2017 at 1:04 AM, chenjianyyzz <span dir="ltr"><<a href="mailto:chenjianyyzz@163.com" target="_blank">chenjianyyzz@163.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="line-height:1.7;color:#000000;font-size:14px;font-family:Arial"><div>Hi, </div><div>I wonder why result from below code are different:</div><div>-----------------Code 1: using vtkDICOMImageReader  --------------------------</div><div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">       </span>vtkDICOMImageReader *reader = vtkDICOMImageReader::New();</b></div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">     </span>reader->SetDirectoryName("***"<wbr>);  <----- DICOM folder</b></div></div><div><br></div><div>        <span style="line-height:23.8px">// After get reader, all below are same</span></div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">        </span>vtkSmartPointer<vtkMarchingCub<wbr>es> boneExtraractor = vtkSmartPointer<vtkMarchingCub<wbr>es>::New();</div><div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">       </span>boneExtraractor->SetInputConne<wbr>ction(reader->GetOutputPort())<wbr>;</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">        </span>boneExtraractor->GenerateValue<wbr>s(1, 200, 3097);</div></div><div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">      </span>vtkSmartPointer<vtkPolyDataNor<wbr>mals> boneNormals = vtkSmartPointer<vtkPolyDataNor<wbr>mals>::New();</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">  </span>boneNormals->SetInputConnectio<wbr>n(boneExtraractor->GetOutputPo<wbr>rt());</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">   </span>boneNormals->SetFeatureAngle(6<wbr>0.0);</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">        </span>vtkSmartPointer<vtkStripper> boneStripper = vtkSmartPointer<vtkStripper>::<wbr>New();</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">  </span>boneStripper->SetInputConnecti<wbr>on(boneNormals->GetOutputPort(<wbr>));</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">      </span>vtkSmartPointer<vtkPolyDataMap<wbr>per> boneMapper = vtkSmartPointer<vtkPolyDataMap<wbr>per>::New();</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">        </span>boneMapper->SetInputConnection<wbr>(boneNormals->GetOutputPort())<wbr>;</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">   </span>boneMapper->ScalarVisibilityOf<wbr>f();</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">    </span>vtkSmartPointer<vtkActor> bone = vtkSmartPointer<vtkActor>::New<wbr>();</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">   </span>bone->SetMapper(boneMapper);</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">     </span>vtkRenderer *aRenderer = vtkRenderer::New();</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">        </span>vtkRenderWindow *renWin = vtkRenderWindow::New();</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">   </span>renWin->AddRenderer(aRenderer)<wbr>;</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">       </span>vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New<wbr>();</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">      </span>iren->SetRenderWindow(renWin);</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">   </span>aRenderer->AddActor(bone);</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">       </span>renWin->Render();</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">        </span>iren->Initialize();</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">      </span>iren->Start();</div></div><div><br></div><div>Result: please see attache screenshot: vtkDICOMImageReade<wbr>r.png</div><div><br></div><div><span style="line-height:23.8px">-----------------Code 2: using </span>vtkDICOMReader<span style="line-height:23.8px">----------<wbr>----------------</span></div><div><div> <b>       vtkSmartPointer<vtkStringArray<wbr>> filenames = ****;        //<span style="line-height:23.8px"><----- Fill DICOM files</span></b></div><div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:1.7;white-space:pre-wrap"> </span><span style="line-height:1.7">vtkSmartPointer <vtkDICOMFileSorter> sorter = vtkSmartPointer <vtkDICOMFileSorter>::New();</span></b></div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">        </span>sorter->SetInputFileNames(file<wbr>names);</b></div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">      </span>sorter->Update();</b></div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:1.7;white-space:pre-wrap">     </span><span style="line-height:1.7">int ns= sorter->GetNumberOfSeries();</span></b></div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">       </span>int si= 0;</b></div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">       </span>for (int i = 0; i<<span style="line-height:23.8px">ns</span>; i++) {</b></div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">            </span>if (sorter->GetFileNamesForSeries<wbr>(i)->GetNumberOfValues() > sorter->GetFileNamesForSeries(<span style="line-height:23.8px"><wbr>si</span>)->GetNumberOfValues()) {</b></div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">                 </span><span style="line-height:23.8px">si</span>= i;</b></div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">             </span>}</b></div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">        </span>}</b></div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">        </span>vtkStringArray *sf= sorter->GetFileNamesForSeries(<span style="line-height:23.8px"><wbr>si</span>);</b></div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">       </span>vtkDICOMReader *reader = vtkDICOMReader::New();</b></div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">  </span>reader->RemoveAllInputs();</b></div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">    </span>reader->SetFileNames(sf);</b></div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">     </span>reader->AutoRescaleOff();</b></div><div><b><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">     </span>reader->Update();</b></div></div></div><div><div style="line-height:23.8px"><br></div><div style="line-height:23.8px">        // After get reader, all below are same</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">      </span>vtkSmartPointer<vtkMarchingCub<wbr>es> boneExtraractor = vtkSmartPointer<vtkMarchingCub<wbr>es>::New();</div><div style="line-height:23.8px"><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">  </span>boneExtraractor->SetInputConne<wbr>ction(reader->GetOutputPort())<wbr>;</div><div><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">        </span>boneExtraractor->GenerateValue<wbr>s(1, 200, 3097);</div></div><div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap"> </span>vtkSmartPointer<vtkPolyDataNor<wbr>mals> boneNormals = vtkSmartPointer<vtkPolyDataNor<wbr>mals>::New();</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">     </span>boneNormals->SetInputConnectio<wbr>n(boneExtraractor->GetOutputPo<wbr>rt());</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">      </span>boneNormals->SetFeatureAngle(6<wbr>0.0);</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">   </span>vtkSmartPointer<vtkStripper> boneStripper = vtkSmartPointer<vtkStripper>::<wbr>New();</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap">     </span>boneStripper->SetInputConnecti<wbr>on(boneNormals->GetOutputPort(<wbr>));</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="line-height:23.8px;white-space:pre-wrap"> </span>vtkSmartPointer<vtkPolyDataMap<wbr>per> boneMapper = vtkSmartPointer<vtkPolyDataMap<wbr>per>::New();</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">   </span>boneMapper->SetInputConnection<wbr>(boneNormals->GetOutputPort())<wbr>;</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">      </span>boneMapper->ScalarVisibilityOf<wbr>f();</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">       </span>vtkSmartPointer<vtkActor> bone = vtkSmartPointer<vtkActor>::New<wbr>();</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">      </span>bone->SetMapper(boneMapper);</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">        </span>vtkRenderer *aRenderer = vtkRenderer::New();</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">   </span>vtkRenderWindow *renWin = vtkRenderWindow::New();</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">      </span>renWin->AddRenderer(aRenderer)<wbr>;</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">  </span>vtkRenderWindowInteractor *iren = vtkRenderWindowInteractor::New<wbr>();</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap"> </span>iren->SetRenderWindow(renWin);</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">      </span>aRenderer->AddActor(bone);</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">  </span>renWin->Render();</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap">   </span>iren->Initialize();</div><div style="line-height:23.8px"><span class="m_-7308799837012899778m_-4553734050815588816Apple-tab-span" style="white-space:pre-wrap"> </span>iren->Start();</div><div style="line-height:23.8px"><br></div><div><span style="line-height:23.8px">Result: please see attache screenshot: </span>vtkDICOMReader<span style="line-height:23.8px">.png</span></div></div></div><div><span style="line-height:23.8px">==============================<wbr>=</span></div><div><span style="line-height:23.8px">the result from vtkDICOMImageReader is what I expected. and the result from </span>vtkDICOMImageReader  seems only skin is visuable, and bone is invisable.</div><div>any body can tell me why?  how should I update the code of vtkDICOMReader to visualize the bone structure?</div><div><br></div><div>Thanks </div><div>James</div></div></blockquote></div></div></div>