vtk切平面的提取

2021-09-20 15:17:22 字數 3526 閱讀 4171

/*

1.先通過vtkmetaimagereader讀取一副三維影象,獲取影象範圍、原點和畫素間隔,由這三個引數可以計算影象的中心位置。

2.接下來定義了切面的變換矩陣axialelements,該矩陣的前三列分別表示x、y和z方向向量,第四列為切面座標系原點。通過修改切面座標系原點,可以得到不同位置的切面影象。

3.然後將讀取的影象作為vtkimagereslice的輸入,通過函式setresliceaxes()設定變換矩陣resliceaxis。

*/#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "vtkautoinit.h"

vtk_module_init(vtkrenderingopengl2);

vtk_module_init(vtkinteractionstyle);

class vtkimageinteractioncallback : public vtkcommand

vtkimageinteractioncallback()

void setimagereslice(vtkimagereslice *reslice)

void setimagemaptocolors(vtkimagemaptocolors *maptocolors)

vtkimagereslice *getimagereslice()

void setinteractor(vtkrenderwindowinteractor *interactor)

vtkrenderwindowinteractor *getinteractor()

virtual void execute(vtkobject *, unsigned long event, void *)

else if (event == vtkcommand::leftbuttonreleaseevent)

else if (event == vtkcommand::mousemoveevent)

else

}} }

private:

int slicing;

vtkimagereslice *imagereslice;

vtkrenderwindowinteractor *interactor;

vtkimagemaptocolors *maptocolors;

};int main()

; vtksmartpointerresliceaxes =

vtksmartpointer::new();

resliceaxes->deepcopy(axialelements);

resliceaxes->setelement(0, 3, center[0]);

resliceaxes->setelement(1, 3, center[1]);

resliceaxes->setelement(2, 3, center[2]);

vtksmartpointerreslice =

vtksmartpointer::new();

reslice->setinputconnection(reader->getoutputport());

reslice->setoutputdimensionality(2);

reslice->setresliceaxes(resliceaxes);

reslice->setinterpolationmodetolinear();

vtksmartpointercolortable =

vtksmartpointer::new();

colortable->setrange(0, 1000);

colortable->setvaluerange(0.0, 1.0);

colortable->setsaturationrange(0.0, 0.0);

colortable->setramptolinear();

colortable->build();

vtksmartpointercolormap =

vtksmartpointer::new();

colormap->setlookuptable(colortable);

colormap->setinputconnection(reslice->getoutputport());

colormap->update();

vtksmartpointerimgactor =

vtksmartpointer::new();

imgactor->setinputdata(colormap->getoutput());

vtksmartpointerrenderer =

vtksmartpointer::new();

renderer->addactor(imgactor);

renderer->setbackground(1, 1, 1);

vtksmartpointerrenderwindow =

vtksmartpointer::new();

renderwindow->setsize(500, 500);

renderwindow->addrenderer(renderer);

vtksmartpointerrenderwindowinteractor =

vtksmartpointer::new();

vtksmartpointerimagestyle =

vtksmartpointer::new();

renderwindowinteractor->setinteractorstyle(imagestyle);

renderwindowinteractor->setrenderwindow(renderwindow);

renderwindowinteractor->initialize();

vtksmartpointercallback =

vtksmartpointer::new();

callback->setimagereslice(reslice);

callback->setinteractor(renderwindowinteractor);

callback->setimagemaptocolors(colormap);

imagestyle->addobserver(vtkcommand::mousemoveevent, callback);

imagestyle->addobserver(vtkcommand::leftbuttonpressevent, callback);

imagestyle->addobserver(vtkcommand::leftbuttonreleaseevent, callback);

renderwindowinteractor->start();

return exit_success;

}

VTK虛擬切片提取

計算機系統 win8.1 64 bit vtk版本 6.2.0 1 說明 關於三維資料的重切主要通過vtkimagereslice實現 例項 imageslicing 而更加方便的是通過vtkimageplanewidget類來實現 例項 fourpaneviewer,或者testimageplan...

基於VTK的任意平面切割

切割介紹 對於乙個模型的切割需要怎麼辦呢,想想切西瓜就知道,首先需要有乙個模型 然後有乙個切割平面 接著對於每個切割操作來更新模型,這樣就可以得到切割的效果了 影象本身是與原始影象成某軸對稱因此不能在原圖中找中心點 waitkey endif 做平滑處理 vtksmartpointersmooth ...

HoPE雜亂場景的點雲資料平面的提取

點雲pcl免費知識星球,點雲 速讀。星球id particle 摘要 在雜亂的三維場景中提取水平面是許多機械人應用的基本步驟。針對一般平面分割方法在這一問題上的侷限性,我們提出了一種新的平面提取的演算法,它能夠在雜亂的有序點雲或者是無序點雲資料中高效的提取平面。通過預校準或慣性測量單元獲得的感測器方...