學(xué)習(xí)筆記2-基本數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)的讀寫

VTK可視化管線是完成VTK應(yīng)用程序這道菜的基本步驟,VTK數(shù)據(jù)結(jié)構(gòu)就是每一道菜的基本原料

基本數(shù)據(jù)結(jié)構(gòu)

可視化數(shù)據(jù)的基本特點(diǎn):
  1. 離散型:點(diǎn)與點(diǎn)之間的值是不可知的撒强,要得到該值飘哨,需要通過插值的方式獲取
  2. 數(shù)據(jù)具有規(guī)則或不規(guī)則的結(jié)構(gòu)
    對于規(guī)則的結(jié)構(gòu)數(shù)據(jù),只需要存儲起始點(diǎn)顿仇, 相鄰兩點(diǎn)之間的間隔和總數(shù)即可保存完整的信息
    不規(guī)則的數(shù)據(jù)結(jié)構(gòu)在數(shù)據(jù)表達(dá)方面更加自由細(xì)致靈活
  3. 數(shù)據(jù)具有維度
    拓?fù)渚S度
數(shù)據(jù)對象和數(shù)據(jù)集
  1. 數(shù)據(jù)對象
    數(shù)據(jù)一般以數(shù)據(jù)對象形式表現(xiàn)
    只有當(dāng)數(shù)據(jù)對象被組織冊灰姑娘一種結(jié)構(gòu)后臼闻,才能被VTK算法處理
    vtkDataObject 根據(jù)具體可視化數(shù)據(jù)選用
企業(yè)微信截圖_16748939564419.png
  1. 數(shù)據(jù)集
    vtkDataSet 將數(shù)據(jù)對象組織成一種結(jié)構(gòu)并且賦予相應(yīng)的屬性值述呐,就形成了數(shù)據(jù)集.
    vtkDataSet 由拓?fù)浣Y(jié)構(gòu)和幾何結(jié)構(gòu)組成:
    點(diǎn)數(shù)據(jù)定義的坐標(biāo)點(diǎn)形成了幾何結(jié)構(gòu)乓搬,點(diǎn)數(shù)據(jù)的鏈接形成單元數(shù)據(jù)进肯,由單元數(shù)據(jù)形成數(shù)據(jù)集的拓?fù)浣Y(jié)構(gòu)


    企業(yè)微信截圖_16749714227221.png
  2. 單元
    一系列有序的點(diǎn)按照指定類型連接所定義的結(jié)構(gòu)就是單元棉磨,單元是VTK的基礎(chǔ)
    單元類型分為線性單元和非線性單元


    線性單元.png

    非線性單元.png
  1. 屬性數(shù)據(jù)
    主要用于描述數(shù)據(jù)集的屬性特征环形,對數(shù)據(jù)集的可視化實(shí)質(zhì)就是對屬性數(shù)據(jù)的可視化
    分為標(biāo)量數(shù)據(jù)(指標(biāo)是數(shù)據(jù)的大小抬吟,最普遍的可視化數(shù)據(jù))统抬,矢量數(shù)據(jù)(有大小有方向)聪建,張量數(shù)據(jù)
數(shù)據(jù)集

vtkImageData(非常重要) :按照規(guī)則排列在矩形方格中的點(diǎn)和單元的集合 常用于醫(yī)學(xué)圖像
vtkPolyData:多邊形數(shù)據(jù)集,該類由以下數(shù)據(jù)組成,并都是通過vtkDataArray(建立VTK數(shù)據(jù)對象的基礎(chǔ))形式存儲刃鳄,使用時(shí)應(yīng)指定元組大小

  • 幾何數(shù)據(jù) vtkPoints
  • 拓?fù)鋽?shù)據(jù) vtkCellArray
  • 屬性數(shù)據(jù) vtkPointData vtkCellData vtkFieldData

實(shí)現(xiàn)三角形:

#include <iostream>
#include <vtkSmartPointer.h>
#include <vtkSphereSource.h>
#include <vtkActor.h>
#include <vtkConeSource.h>
#include <vtkRenderer.h>
#include <vtkRenderWindow.h>
#include <vtkPolyData.h>
#include <vtkPolyDataMapper.h>
#include <vtkProperty.h>
#include <vtkRenderWindowInteractor.h>
#include <vtkLight.h>
#include <vtkCamera.h>
#include <vtkActor2D.h>
#include <vtkPlaneSource.h>
#include <vtkAxesActor.h>
#include <vtkTransform.h>
#include <vtkTransformFilter.h>
#include <vtkPoints.h>
#include <vtkLine.h>
#include <vtkCellArray.h>
#include "vtkAutoInit.h" 
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);

using namespace std;

int main()
{
    /// <summary>
    /// 創(chuàng)建坐標(biāo)點(diǎn)叔锐,幾何數(shù)據(jù)
    /// </summary>
    /// <returns></returns>
    vtkSmartPointer<vtkPoints> source = vtkSmartPointer<vtkPoints>::New();
    source->InsertNextPoint(1.0, 0.0, 0.0);
    source->InsertNextPoint(0.0, 1.0, 0.0);
    source->InsertNextPoint(0.0, 0.0, 0.0);

    /// <summary>
    /// 連接點(diǎn)愉烙,實(shí)現(xiàn)拓?fù)浣Y(jié)構(gòu)
    /// </summary>
    /// <returns></returns>
    vtkSmartPointer<vtkLine> line0 = vtkSmartPointer<vtkLine>::New();
    line0->GetPointIds()->SetId(0, 0);
    line0->GetPointIds()->SetId(1, 1);

    vtkSmartPointer<vtkLine> line1 = vtkSmartPointer<vtkLine>::New();
    line1->GetPointIds()->SetId(0, 1);
    line1->GetPointIds()->SetId(1, 2);

    vtkSmartPointer<vtkLine> line2 = vtkSmartPointer<vtkLine>::New();
    line2->GetPointIds()->SetId(0, 2);
    line2->GetPointIds()->SetId(1, 0);

    ///創(chuàng)建單元數(shù)組
    vtkSmartPointer<vtkCellArray> lines = vtkSmartPointer<vtkCellArray>::New();
    lines->InsertNextCell(line0);
    lines->InsertNextCell(line1);
    lines->InsertNextCell(line2);

    //以上數(shù)據(jù)組合成一個(gè)vtkPolyData
    vtkSmartPointer<vtkPolyData> polyData =
        vtkSmartPointer<vtkPolyData>::New();
    polyData->SetPoints(source);
    polyData->SetLines(lines);




    vtkSmartPointer<vtkPolyDataMapper> mapper =
        vtkSmartPointer<vtkPolyDataMapper>::New();
    mapper->SetInputData(polyData);


    vtkSmartPointer<vtkActor> actor =
        vtkSmartPointer<vtkActor>::New();
    actor->SetMapper(mapper);

    
    //vtkSmartPointer<vtkAxesActor> axesActor =
    //    vtkSmartPointer<vtkAxesActor>::New();

    vtkSmartPointer<vtkRenderer> renderer =
        vtkSmartPointer<vtkRenderer>::New();
    renderer->AddActor(actor);
    //renderer->AddActor(axesActor);
    renderer->SetBackground(0, 0, 0);

    vtkSmartPointer<vtkRenderWindow> renderWindow =
        vtkSmartPointer<vtkRenderWindow>::New();
    renderWindow->AddRenderer(renderer);

    vtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =
        vtkSmartPointer<vtkRenderWindowInteractor>::New();
    renderWindowInteractor->SetRenderWindow(renderWindow);

    renderer->ResetCamera();
    renderWindow->Render();
    renderWindowInteractor->Start();
    return 0;
}

VTK數(shù)據(jù)的讀寫

數(shù)據(jù)的獲取方式
  1. 生成模型,然后處理模型數(shù)據(jù)
  2. 從外部存儲介質(zhì)里導(dǎo)入相關(guān)的數(shù)據(jù)文件,步驟如下:
  • 實(shí)例化Reader對象
  • 指定要讀取的文件名
  • 調(diào)用Update()方法促使管線執(zhí)行
vtkImageData

vtkDicomImageReader用于讀取dicom圖像遂鹊,但是不支持多幀圖像 ITK封裝了GDCM對DICOM讀寫
對于序列圖像文件秉扑,可以采用SetFileNames來設(shè)置多個(gè)圖像文件名调限,由多個(gè)二維圖像組成三維

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末耻矮,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子踱承,更是在濱河造成了極大的恐慌米母,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件妙色,死亡現(xiàn)場離奇詭異身辨,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)煌珊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門定庵,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蔬浙,“玉大人贞远,你說我怎么就攤上這事±吨伲” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵途凫,是天一觀的道長咱揍。 經(jīng)常有香客問我棚饵,道長,這世上最難降的妖魔是什么硼砰? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任题翰,我火速辦了婚禮诈胜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘焦匈。我一直安慰自己缓熟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布垦写。 她就那樣靜靜地躺著梯投,像睡著了一般况毅。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上咆疗,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天午磁,我揣著相機(jī)與錄音,去河邊找鬼迅皇。 笑死,一個(gè)胖子當(dāng)著我的面吹牛搅荞,可吹牛的內(nèi)容都是我干的框咙。 我是一名探鬼主播,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼茉贡,長吁一口氣:“原來是場噩夢啊……” “哼腔丧!你這毒婦竟也來了作烟?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤衣厘,失蹤者是張志新(化名)和其女友劉穎绷雏,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體坤检,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡早歇,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年箭跳,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了潭千。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡路翻,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茂契,到底是詐尸還是另有隱情掉冶,我是刑警寧澤脐雪,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布,位于F島的核電站召锈,受9級特大地震影響获询,放射性物質(zhì)發(fā)生泄漏吉嚣。R本人自食惡果不足惜蹬铺,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一甜攀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧恒序,春花似錦谁撼、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至何暮,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間砍聊,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留词疼,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像舵盈,于是被迫代替她去往敵國和親秽晚。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

推薦閱讀更多精彩內(nèi)容