vtk面繪製的實現

2021-08-04 14:45:00 字數 1527 閱讀 6853

如題:將圖層資料(vtkimagedata)生成3d物件(vtkpolydata)

示例**如下:

vtksmartpointer pmarchingcubes = vtksmartpointer

::new();

pmarchingcubes->setinputdata(vtkimagedata);

pmarchingcubes->setnumberofcontours(1);

pmarchingcubes->setvalue(0, 1);

vtkmarchingcubes簡稱mc方法,是乙個過濾器,該過濾器接受乙個體資料的輸入(三維規則的點集),輸出乙個或者多個等值面。使用它,必須給等值面賦值。或者,你可以設定的乙個scalar的範圍和等值面的間隔來決定這個範圍內的一系列的等值面的值。

輸出的資料往往有雜訊,因此通常會經過一些後續處理,以下是示例**

vtksmartpointer psmoothpolydatafilter = vtksmartpointer

::new();

psmoothpolydatafilter->setinputconnection(pmarchingcubes->getoutputport());

psmoothpolydatafilter->setnumberofiterations(m_nnumberofiterations);

psmoothpolydatafilter->setrelaxationfactor(0.05);

vtksmartpointer ppolydatanormals = vtksmartpointer

::new();

ppolydatanormals->setinputconnection(psmoothpolydatafilter->getoutputport());

ppolydatanormals->setfeatureangle(m_nfeatureangle);

vtksmoothpolydatafilter 實現的是laplacian 平滑,示例中只指定迭代次數和放鬆因子,迭代次數越多,平滑的越厲害,同時細節損失越嚴重。放鬆因子是laplacian演算法的乙個引數,在所有的迭代演算法中,這個引數控制迭代過程的穩定性。一般情況下小的放鬆係數和大的迭代次數會使迭代演算法的收斂過程更穩定。

另外,可以使用其他變數控制平滑過程,boundarysmoothing控制是否對邊界點平滑。featureedgesmoothing控制是否對特徵邊上的點平滑,需用setfeatureangle指定特徵角閾值,如一條邊被兩個相鄰多邊形公用,若這兩個多邊形的法向量的夾角(特徵角)大於定義的閾值,則稱該邊為特徵邊。

vtkpolydatanormals 用於計算polydata的法向量,計算法向量之後會使視覺化之後的資料更加平滑,setfeatureangle用於設定特徵角,兩個相鄰多邊形的角度大於該角,則稱多邊形的共用邊是尖銳的,預設是30度,銳邊**(splitting)開啟,多邊形順序(consistency)一致性開啟。

推薦參考以下部落格,介紹了體繪製與面繪製的基本實現

VTK 面繪製 顯示人頭

rawresolution.cpp 定義控制台應用程式的入口點。include stdafx.h include using namespace std include vtkunsignedchararray.h include vtkpiecewisefunction.h include vtk...

VTK 表面重建 等值面提取

等值面 線 提取是一種常用的視覺化技術,常應用與醫學 地質 氣象學等領域,例如,在醫學影象處理中,由於ct mri等影象解析度越來越高,雖然體繪製可以清晰地對資料結構進行視覺化,但是其計算量和效率卻制約了其使用。此時可以通過等值面提取技術,僅提取感興趣的乙個或幾個組織輪廓,並生成網格模型以供後續的處...

vtk學習筆記 繪製等值線

最近在學習vtk,想嘗試繪製等值線,後來在網上找到乙份教程 vtk培訓教程,裡面有講到這個內容,在這裡非常感謝這位作者的講解與示例,可惜這份文件沒有署名!使用vtk來繪製等值線,需要使用到vtkcontourfilter,它所處理的資料需要是規則網格資料,如規則的正方形網格等。通過使用vtkcont...