Skip to content

Commit ecbb299

Browse files
committed
[feature] CemrgCommonUtils Extract surface static function using mitk libraries
1 parent ec6290d commit ecbb299

3 files changed

Lines changed: 43 additions & 1 deletion

File tree

Version2.0/Modules/CemrgAppModule/CMakeLists.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
mitk_create_module(CemrgAppModule
2-
DEPENDS PUBLIC MitkQtWidgetsExt MitkQtWidgets MitkAlgorithmsExt MitkCore
2+
DEPENDS PUBLIC MitkSegmentation MitkQtWidgetsExt MitkQtWidgets MitkAlgorithmsExt MitkCore
33
PACKAGE_DEPENDS PRIVATE VMTK ITK
44
)
55

Version2.0/Modules/CemrgAppModule/include/CemrgCommonUtils.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,8 @@ class MITKCEMRGAPPMODULE_EXPORT CemrgCommonUtils {
5959

6060
//Mesh Utils
6161
static mitk::Surface::Pointer LoadVTKMesh(std::string path);
62+
static mitk::Surface::Pointer ExtractSurfaceFromSegmentation(mitk::Image::Pointer image, double thresh=0.5, double blur=0.8, double smoothIterations=3, double decimation=0.5);
63+
static void FlipXYPlane(mitk::Surface::Pointer surf, QString dir, QString vtkname="segmentation.vtk");
6264
static QString M3dlibParamFileGenerator(QString dir, QString filename="param-template.par", QString thicknessCalc="0");
6365
static void ConvertToCarto(std::string vtkPath, std::vector<double>, double, double, int, bool);
6466
static void CalculatePolyDataNormals(vtkSmartPointer<vtkPolyData>& pd, bool celldata=true);

Version2.0/Modules/CemrgAppModule/src/CemrgCommonUtils.cpp

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,9 @@ PURPOSE. See the above copyright notices for more information.
6767
#include <mitkITKImageImport.h>
6868
#include <mitkIOUtil.h>
6969
#include <mitkDataStorage.h>
70+
#include <mitkImagePixelReadAccessor.h>
71+
#include <mitkImageToSurfaceFilter.h>
72+
#include <mitkManualSegmentationToSurfaceFilter.h>
7073
#include <mitkRenderingManager.h>
7174

7275
//Qt
@@ -304,6 +307,43 @@ mitk::Surface::Pointer CemrgCommonUtils::LoadVTKMesh(std::string path) {
304307
}//_catch
305308
}
306309

310+
mitk::Surface::Pointer CemrgCommonUtils::ExtractSurfaceFromSegmentation(mitk::Image::Pointer image, double thresh, double blur, double smooth, double decimation){
311+
auto im2surf = mitk::ManualSegmentationToSurfaceFilter::New();
312+
313+
im2surf->SetInput(image);
314+
im2surf->SetThreshold(thresh);
315+
im2surf->SetUseGaussianImageSmooth(true);
316+
im2surf->SetSmooth(true);
317+
im2surf->SetMedianFilter3D(true);
318+
im2surf->InterpolationOn();
319+
im2surf->SetGaussianStandardDeviation(blur);
320+
im2surf->SetMedianKernelSize(smooth, smooth, smooth);
321+
im2surf->SetDecimate(mitk::ImageToSurfaceFilter::QuadricDecimation);
322+
im2surf->SetTargetReduction(decimation);
323+
im2surf->UpdateLargestPossibleRegion();
324+
325+
mitk::Surface::Pointer shell = im2surf->GetOutput();
326+
return shell;
327+
}
328+
329+
void CemrgCommonUtils::FlipXYPlane(mitk::Surface::Pointer surf, QString dir, QString vtkname){
330+
331+
//Prepare points for MITK visualisation - (CemrgCommonUtils::LoadVTKMesh)
332+
vtkSmartPointer<vtkPolyData> pd = surf->GetVtkPolyData();
333+
for (int ix=0; ix<pd->GetNumberOfPoints(); ix++) {
334+
double* point = pd->GetPoint(ix);
335+
point[0] = -point[0];
336+
point[1] = -point[1];
337+
pd->GetPoints()->SetPoint(ix, point);
338+
}
339+
340+
if(!vtkname.isEmpty()){
341+
vtkname += (!vtkname.contains(".vtk")) ? ".vtk" : "";
342+
QString path = dir + mitk::IOUtil::GetDirectorySeparator()+vtkname;
343+
mitk::IOUtil::Save(surf, path.toStdString());
344+
}
345+
}
346+
307347
QString CemrgCommonUtils::M3dlibParamFileGenerator(QString dir, QString filename, QString thicknessCalc) {
308348

309349
QString path2file = dir + mitk::IOUtil::GetDirectorySeparator() + filename;

0 commit comments

Comments
 (0)