ITK 血管空間對象 VesselTubeSpatialObject

ITK文檔對血管空間對象的描述和創建如下:

itk::VesselTubeSpatialObject源自於itk::TubeSpatialObject。它表示從一幅圖像分割而得到的一個血管。一個VesselTubeSpatialObject是以一系列點來描述的,每個點都具有一個位置、一個半徑和法線。

我們從包含相應的頭文件開始:
#include "itkVesselTubeSpatialObject.h"
#include "itkVesselTubeSpatialObjectPoint.h"
VesselTubeSpatialObject
是基於空間的維來模板化的。一個VesselTubeSpatialObject包含一系列VesselTubeSpatialObjectPoints
首先我們定義一些類型並創建管
(tube)
typedef itk::VesselTubeSpatialObject<3> VesselTubeType;
typedef itk::VesselTubeSpatialObjectPoint<3> VesselTubePointType;
VesselTubeType::Pointer VesselTube = VesselTubeType::New( );
我們創建一個點列表並做以下設置:

(1)使用SetPosition( )方式設置每個點在當前座標系中的位置。

(2)使用SetRadius( )設置tube在這個位置上的半徑。

(3)使用SetMedialness( )設置的值描述點是如何分佈在脈管中間的。
(4)使用SetRidgeness( )設置的值描述點是如何分佈在山脊上的。
(5)使用SetBranchness( )設置的值來描述一個支脈點。
(6)使用SetAlpha1( )SetAlpha2( )SetAlpha3( )來設置與Hessian的特徵值相關的3α值。
(7)使用SetMark( )設置標記(mark)值。
(8)在這個例子中點的顏色設置爲紅色,且不透明性爲1
VesselTubeType::PointListType list;
for( i=0; i<5; i++)
{
VesselTubePointType p;
p.SetPosition(i,i+1,i+2);
p.SetRadius(1);
p.SetAlpha1(i);
p.SetAlpha2(i+1);
p.SetAlpha3(i+2);
p.SetMedialness(i);
p.SetRidgeness(i);
p.SetBranchness(i);
p.SetMark(true);
p.SetColor(1,0,0,1);
list.push_back(p);
}
接下來我們創建管(tube)並使用SetName( )設置它的名字。我們也使用SetId( )來設置它的標識號,並在後面增加前面創建的點列表。
VesselTube->GetProperty( )->SetName("VesselTube");
VesselTube->SetId(1);
VesselTube->SetPoints(list);
GetPoints( )
方式返回對象中點內在列表的一個引用:
VesselTubeType::PointListType pointList = VesselTube->GetPoints( );
std::cout << "Number of points representing the blood vessel: ";
std::cout << pointList.size( ) << std::endl;
然後我們可以使用STL迭代器來訪問點。GetPosition( )GetColor( )函數分別返回點的位置和顏色。
VesselTubeType::PointListType::const_iterator
it = VesselTube->GetPoints( ).begin( );
i=0;
while(it != VesselTube->GetPoints( ).end( ))

98
{
std::cout << std::endl;
std::cout << "Point #" << i << std::endl;
std::cout << "Position: " << (*it).GetPosition( ) << std::endl;
std::cout << "Radius: " << (*it).GetRadius( ) << std::endl;
std::cout << "Medialness: " << (*it).GetMedialness( ) << std::endl;
std::cout << "Ridgeness: " << (*it).GetRidgeness( ) << std::endl;
std::cout << "Branchness: " << (*it).GetBranchness( ) << std::endl;
std::cout << "Mark: " << (*it).GetMark( ) << std::endl;
std::cout << "Alpha1: " << (*it).GetAlpha1( ) << std::endl;
std::cout << "Alpha2: " << (*it).GetAlpha2( ) << std::endl;
std::cout << "Alpha3: " << (*it).GetAlpha3( ) << std::endl;
std::cout << "Color = " << (*it).GetColor( ) << std::endl;
it++;
i++;
}
 

上述最關鍵的是三個Hessian的特徵值。

具體參考文獻 3D multi-scale line filter for segmentation and visualization of curvilinear structures in medical images





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章