/*
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 摘要 在雜亂的三維場景中提取水平面是許多機械人應用的基本步驟。針對一般平面分割方法在這一問題上的侷限性,我們提出了一種新的平面提取的演算法,它能夠在雜亂的有序點雲或者是無序點雲資料中高效的提取平面。通過預校準或慣性測量單元獲得的感測器方...