// 切割介紹
// 對於乙個模型的切割需要怎麼辦呢,想想切西瓜就知道,首先需要有乙個模型、然後有乙個切割平面
// 接著對於每個切割操作來更新模型,這樣就可以得到切割的效果了
// 影象本身是與原始影象成某軸對稱因此不能在原圖中找中心點
waitkey();
#endif
/**做平滑處理**/
vtksmartpointersmooth = vtksmoothpolydatafilter::new();
smooth->setinput( skinextractor->getoutput());
smooth->setnumberofiterations( 100 );
//重新計算法向量
vtksmartpointerskinnormals =
vtksmartpointer::new();
skinnormals->setinputconnection(smooth->getoutputport());
skinnormals->setfeatureangle(60.0);
vtksmartpointerskinstripper = //create ******** strips and/or poly-lines 為了更快的顯示速度
vtksmartpointer::new();
skinstripper->setinputconnection(skinnormals->getoutputport());
vtksmartpointerskin =
vtksmartpointer::new();
vtksmartpointeroutlinedata =
vtksmartpointer::new();
outlinedata->setinputconnection(dicomreader->getoutputport());
mapoutline->setinputconnection(outlinedata->getoutputport());
vtksmartpointeroutline =
vtksmartpointer::new();
outline->getproperty()->setcolor(0, 0, 0);
vtksmartpointeracamera =
vtksmartpointer::new();
acamera->setviewup (0, 0, -1);
acamera->setposition (0, 1, 0);
acamera->setfocalpoint (0, 0, 0);
acamera->computeviewplanenormal();
acamera->azimuth(30.0);
acamera->elevation(30.0);
acamera->dolly(1.5);
arenderer->addactor(outline);
arenderer->addactor(skin);
arenderer->setactivecamera(acamera);
arenderer->resetcamera ();
arenderer->setbackground(.2, .3, .4);
arenderer->resetcameraclippingrange ();
renwin->setsize(640, 480);
vtksmartpointerstyle =
vtksmartpointer::new();
iren->setinteractorstyle( style );
/設定截面
vtksmartpointercliper = vtkclippolydata::new();
cliper->setinput(skinstripper->getoutput());
// 此平面box可以通過右鍵來進行放大縮小處理(只有當滑鼠控制區域只有切割體才單一有效)
vtksmartpointerimplicitplanewidget = vtkimplicitplanewidget::new();
implicitplanewidget->setinteractor(iren);
implicitplanewidget->setplacefactor(1.25);
//initially position the widget
implicitplanewidget->setinput(skinstripper->getoutput());
implicitplanewidget->placewidget();
//render2
vtksmartpointerconeskinactor = vtkactor::new();
vtksmartpointerrrenderer =
vtksmartpointer::new();
rrenderer->setbackground( 0.2, 0.3, 0.5 );
rrenderer->setviewport(0.5, 0.0, 1.0, 1.0);
rrenderer->addactor(coneskinactor);
vtksmartpointerpcall = buildvtkwidgetcall::new();
pcall->setactor(coneskinactor);
pcall->setcliper(cliper);
renwin->addrenderer(rrenderer);
///implicitplanewidget->addobserver(vtkcommand::endinteractionevent, pcall);
implicitplanewidget->on();
// render
renwin->render();
// initialize the event loop and then start it.
iren->initialize();
iren->start();
}
閾值的切割 基於opencv
一 基於固定閾值的分割 全域性 1 基本定義 固定閾值的分割是 最為簡單的一種影象分割方法,即選取乙個全域性閾值,然後就把整幅影象分成了非黑即白的二值影象。2 關鍵函式 ret,th cv2.threshold img,127,255,cv2.thresh binary ret return val...
基於OpenCV的任意方向投影
目前在opencv中,有reduce函式可以進行水平或者垂直方向的投影。c voidreduce inputarraymtx,outputarrayvec,intdim,intreduceop,intdtype 1 parameters reduction operation that could ...
求解任意多邊形的面積(平面內)
平面內多邊形的計算,也就是平面座標系內多邊形的計算,已知各定點座標,有順序的,逆時針或者順時針。根據給出座標求面積。這裡介紹一種比較簡單的方法,用積分求多邊形面積。對每條邊對x軸積分之和即可得出面積。注意如果按順時針方向求積分和得出的是面積,逆時針為面積的相反數。不明白的可以自己畫圖驗證,原理很簡單...