VTKmimics Calculate Parts

article/2025/10/12 1:08:57

前言:本博文主要研究mimics中Calculate Parts所采用的方法以及VTK中三维重建的方法,希望对各位小伙伴有所帮助,谢谢!

mimics-Calculate parts - Interpolation

Gray Interpolation

灰度值插值是一种真正的3D插值,它考虑了部分体积效应,因此更准确。使用灰度值插值方法,我们假设骨密度给出了一个像素内骨骼数量的指示。根据灰度值确定表面的所有边缘。另外,这两个像素之间的位置是基于这两个像素的灰度值。

灰度值插值的优点是它提供了大量的细节和尺寸是正确的。缺点是,你得到不必要的细节,由于在图像中的噪声。以大腿骨为例,当使用这个灰度值插值时,你会得到更好的结果(意思是:一个很好的圆润边缘)。当然,你也需要做一些平滑来减少噪音。

然而,重要的是要认识到,灰度值插值并不总是产生良好的结果。当扫描的切片距离明显偏离切片厚度时,得到的网格表面会产生噪声。只有当切片厚度和切片距离相同时,灰度值插值才能很好地工作。在扫描(采集)过程中应满足此条件。因此,Z分辨率的变化(参见关于矩阵缩减的段落)不应与灰度值插值结合使用。降低XY分辨率并不违反该条件。

灰度值插值建议用于CT技术应用。

Contour Interpolation

​​​​​​​

 轮廓插值是在图像平面上平滑扩展到三维空间的二维插值。该插值算法在切片内使用灰度值插值,但在Z方向上使用轮廓之间的线性插值(如下图所示)。这种插值方法为医疗目的提供了最好的结果。

vtkContourFilter

描述:vtkContourFilter是一个过滤器,接受任何数据集的输入并输出等值面或等值线。输出的形式取决于输入数据的维数。若输入数据包含3D单元,则输出等值面。若输入数据包含2D单元,则输出等值线。同样的,若输入数据包含1D或0D,则输出等指点。如果输入维度为混合的,则可以输出混合类型。

ComputeNormal():Set/Get法线的计算。计算法线相当耗费时间和内存。如果输出数据将由修改拓扑或几何的过滤器处理,那么关闭法线和梯度可能是明智的。对于vtkImageData, vtklineargrid, vtkStructuredGrid和vtkUnstructuredGrid输入,此设置默认为On,而对于所有其他输入则为Off。

vtkSynchronizedTemplates3D

描述:用于从结构数据生成等值面。vtkSynchronizedTemplates3D是同步模板算法的3D实现。注意,vtkContourFilter将在适当的时候自动使用这个类。该接口只针对3D图像。

核心函数为ContourImage

根据Image以及设定的Contour值,寻找Contour的边界;

根据添加的点以及所在的位置,建立拓扑关系(拓扑关系基于两个Table进行);

若输入图像为多值图像,即不是二值图像,添加的点会进行插值;

测试代码

#include <vtkAutoInit.h>
VTK_MODULE_INIT(vtkRenderingOpenGL2);
VTK_MODULE_INIT(vtkRenderingVolumeOpenGL2);
VTK_MODULE_INIT(vtkInteractionStyle);
VTK_MODULE_INIT(vtkRenderingFreeType);#include "vtkSmartPointer.h"#include "vtkCamera.h"
#include "vtkDoubleArray.h"
#include "vtkImageData.h"
#include "vtkImageProperty.h"
#include "vtkImageReslice.h"
#include "vtkImageSincInterpolator.h"
#include "vtkImageSlice.h"
#include "vtkImageSliceMapper.h"
#include "vtkInteractorStyleImage.h"
#include "vtkPNGReader.h"
#include "vtkPointData.h"
#include "vtkRenderWindow.h"
#include "vtkRenderWindowInteractor.h"
#include "vtkRenderer.h"#include "vtkTestUtilities.h"
#include <vtkImageData.h>
#include <vtkMetaImageReader.h>
#include <vtkContourFilter.h>
#include <vtkInteractorStyleTrackballCamera.h>
#include <vtkSTLWriter.h>
#include <vtkSTLReader.h>
#include <vtkPolyDataNormals.h>
#include <vtkStripper.h>
#include <vtkXMLPolyDataReader.h>
#include <vtkImageResliceMapper.h>#include "zxContourFilter.h"void CreateColorImage(vtkImageData* image);int main()
{vtkSmartPointer<vtkImageData> image = vtkSmartPointer<vtkImageData>::New();CreateColorImage(image);zxContourFilter* filter = zxContourFilter::New();filter->SetInputData(image);filter->SetValue(0, 4);//filter->GenerateValues(3, -10., 10.);filter->Update();vtkSTLWriter* writer = vtkSTLWriter::New();writer->SetFileName("F:\\contourPolyData.stl");writer->SetInputData(filter->GetOutput());writer->Write();/*vtkPolyDataNormals* normals = vtkPolyDataNormals::New();normals->SetInputData(filter->GetOutput());normals->SetFeatureAngle(60);normals->SetComputePointNormals(true);normals->Update();vtkSTLWriter* writer2 = vtkSTLWriter::New();writer2->SetFileName("F:\\contourNormals.stl");writer2->SetInputData(normals->GetOutput());writer2->Write();vtkStripper* stripper = vtkStripper::New();stripper->SetInputData(normals->GetOutput());stripper->Update();*//*vtkSTLWriter* writer3 = vtkSTLWriter::New();writer3->SetFileName("F:\\contourStripper.stl");writer3->SetInputData(stripper->GetOutput());writer3->Write();*/vtkPolyDataMapper* contourMapper = vtkPolyDataMapper::New();contourMapper->SetInputData(filter->GetOutput());vtkActor* contourActor = vtkActor::New();contourActor->SetMapper(contourMapper);// Setup renderersvtkSmartPointer<vtkRenderer> renderer = vtkSmartPointer<vtkRenderer>::New();//renderer->AddViewProp(imageSlice);renderer->AddActor(contourActor);renderer->ResetCamera();// Setup render windowvtkSmartPointer<vtkRenderWindow> renderWindow = vtkSmartPointer<vtkRenderWindow>::New();renderWindow->SetSize(300, 300);renderWindow->AddRenderer(renderer);// Setup render window interactorvtkSmartPointer<vtkRenderWindowInteractor> renderWindowInteractor =vtkSmartPointer<vtkRenderWindowInteractor>::New();vtkSmartPointer<vtkInteractorStyleTrackballCamera> style =vtkSmartPointer<vtkInteractorStyleTrackballCamera>::New();renderWindowInteractor->SetInteractorStyle(style);// Render and start interactionrenderWindowInteractor->SetRenderWindow(renderWindow);renderWindow->Render();renderWindowInteractor->Initialize();renderWindowInteractor->Start();return EXIT_SUCCESS;
}void CreateColorImage(vtkImageData* image)
{int directSize = 7;int zSize = 5;image->SetDimensions(directSize, directSize, zSize);image->AllocateScalars(VTK_UNSIGNED_CHAR, 1);for (unsigned int z = 0; z < zSize; z++){for (unsigned int y = 0; y < directSize; y++){for (unsigned int x = 0; x < directSize; x++){unsigned char* pixel = static_cast<unsigned char*>(image->GetScalarPointer(x, y, z));pixel[0] = 0;}}}for (unsigned int z = 1; z < 5; z++){for (unsigned int y = z; y < directSize -z; y++){for (unsigned int x = z; x < directSize - z; x++){unsigned char* pixel = static_cast<unsigned char*>(image->GetScalarPointer(x, y, z));pixel[0] = 4;}}}
}


http://chatgpt.dhexx.cn/article/mhOAgoBr.shtml

相关文章

Massive MIMO

什么是MIMO&#xff1f;从SISO到MIMO - 华为 (huawei.com&#xff09; Multiple-Input Multiple-Output&#xff0c;多入多出 概念&#xff1a; 在发送端和接收端都使用多根天线构成多个信道的天线系统&#xff0c;从而在不增加通信带宽的条件下有效提高信道容量&#xff08;…

基于MIMICS的口腔模型的配准

为什么要配准&#xff1f; 在口腔医学领域&#xff0c;为了能更好的对术后的病人的恢复情况进行了解&#xff0c;需要对术前术后的口腔情况进行对比&#xff1b;目前对于病人口腔情况的观察主要通过拍摄CT、CBCT等手段&#xff0c;但是在进行术前术后的CT拍摄时&#xff0c;其…

Massive MIMO简介

目录 1、 MIMO 2、Massive MIMO 3、Massive MIMO&#xff0c;与 distributed Massive MIMO有什么区别&#xff1f; 4、分布式Massive MIMO 4.1 Distributed MIMO 4.2分布式MIMO派生出无蜂窝组网架构&#xff0c;和传统的蜂窝系统对比 5、小结 1、 MIMO 多输入多输出&#xff…

【论文阅读】MIMICS: A Large-Scale Data Collection for Search Clarification

文章目录 MotivationIntroContributionMIMICS-ClickMIMICS-ClickExploreMIMICS-ManualData AnalysisQuestion Template AnalysisAnalyzing Engagement Based on Clarification ImpressionAnalysis Based on Query LengthAnalysis Based on the Number of Candidate AnswersAnal…

使用mimics重建CT图像

1.打开CT图像文件 2.界面左边为CT图像的3个视图&#xff0c;右边三个区域分别是 掩模 3D对象 和多边形 3.用 1选择其中一个视图 2选取骨头阈值 3区域生长选取一个掩模 4对掩模进行编辑&#xff0c;添加消除 5.生成三维线条 我们生成一个3维骨骼模型说明用法 4.对比度选择soft…

【Mimics】口腔牙齿三维重建

前提&#xff1a;我并非医学相关专业&#xff0c;应用软件也非专业的&#xff0c;过程结果都仅供参考 mimics21.0 空格键 放大视窗 ctrl右键上拉 ct视图放大 segment->threshold 区域增长消除噪点 单击牙齿 黄色模型为与牙齿相邻处 裁切框选 下拉选框 提取单颗牙齿分别…

Mimics: Edit mask in 3D

Mimics21.0 操作技巧 MaskEdit mask in 3D Objects使用3-matic编辑几何将3-matic编辑过的模型导入mimics Mask Edit mask in 3D 20.0以及21.0版本的mimics没有Edit mask in 3D这个菜单栏&#xff0c;所以我们要&#xff1a; VIEW --> Visualization options–> Mask 3D…

Mimics医学建模学习笔记

也是前不久开始学习CT三维建模&#xff0c;找了好些建模方法&#xff0c;后来还是采用了Mimics软件平台进行CT三维建模。以下分享下用到的一些资料。 mimics 16软件压缩包及安装方法百度云&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1hFIrdBfRE-VbFV3oGqW26Q …

Mimics:快捷键介绍

Mimics 软件介绍 mimics界面翻译mimics快捷键2D窗格&#xff1a;编辑图层&#xff08;Edit Masks&#xff09;3D窗格&#xff1a;观察几何&#xff08;3D Objects&#xff09; mimics界面翻译 mimics快捷键 视图快捷键 操作快捷方式1快捷方式2适用窗格平移Shift按住鼠标右键移…

Mimics 21.0 安装

文章目录 Mimics 21.0安装教程安装前准备主程序安装Mimics3-matic汉化教程 功能介绍模块介绍基础模块可选模块 软件优势比利时 Materialise 公司介绍 Mimics 21.0 安装教程 安装前准备 1.首先下载安装文件。 2.下载文件后解压文件&#xff0c;在网盘下载的要把几个分卷一起…

Mimics 21安装

Mimics 21破解版是一款非常专业的交互式的医学影像控制系统&#xff0c;全称为“Materialises interactive medical image control system”&#xff0c;是全球领先的致力于快速成型领域的开发与研究的Materialise公司发明的一种医学影像控制系统&#xff0c;是模块化结构的软件…

Mimics 21.0软件学习笔记(一)基本操作

Materialise Mimics Medical 21.0 打开工程窗口化Thresholding 二值化Region growing区域增长创建一个3D表示&#xff0c;并显示股骨头从髋臼中区分出来&#xff0c;并单独为股骨头建立3D模型 CT图像的形态学操作STL过程 STL 生成 打开工程 Opening the Project窗口化 Windowin…

Mimics-基础操作教程-2

本篇主要介绍 MIMICS 中的 VIEW 菜单各项功能。 Camera 各选项功能介绍 1. Rotate选项&#xff1a; 旋转功能 Rotate 旋转功能只能在三维模型视图上使用&#xff0c;有以下几种不同的方法来实现旋转功能。 a. 使用用鼠标右键拖动&#xff1b; b. 使用箭头键进行精确旋转…

Mimics-基础操作教程-1

1. Mimics简介&#xff08;Mimics21&#xff09; Mimics---是一种交互式医学图像处理软件&#xff0c;是一个连接二维图像数据(CT, MRI, 工业扫描数据)和三维工程学应用的图像处理工具。应用领域包括&#xff1a;解剖学测量、三维分析、有限元分析(FEA)、客制化植入体或装置设…

dcl java_Java内存模型之从JVM角度分析DCL

DCL&#xff0c;即Double Check Lock&#xff0c;中卫双重检查锁定。其实DCL很多人在单例模式中用过&#xff0c;LZ面试人的时候也要他们写过&#xff0c;但是有很多人都会写错。他们为什么会写错呢&#xff1f;其错误根源在哪里&#xff1f;有什么解决方案&#xff1f;下面就随…

java dcl_【Java并发(七)】--java内存模型之DCL

如未作特殊说明&#xff0c;本文均为原创&#xff0c;转发请注明出处 [TOC] 前言 ​ 提到双重检查锁(Double-Checked Locking)通常简称为DCL&#xff0c;肯定很多人第一时间想到的就是单例模式。 ​ 单例模式通常有两种方式&#xff1a;饿汉与懒汉模式。那么懒汉模式采用了延迟…

java 单例 dcl_DCL单例到底需不需要volatile修饰

我们先来回答这个问题 DCL单例一定需要volatile修饰。 volatile有两个功能 内存可见 防止指令冲排序 这里主要考察volatile第二个功能。在介绍为什么DCL单例一定需要volatile修饰之前&#xff0c;我们先来看一下DCL单例和类实例化过程。 DCL单例 public class SingleExample { …

DCL命令

目录 1.MySQL中的权限 2.命令 2.1grant&#xff1a;赋权&#xff0c;给某个用户授予指定的权限。 2.2revoke&#xff1a;移除指定用户的权限 1.MySQL中的权限 角色&#xff1a;拥有某一类权限的用户的统称。比如&#xff1a;超级管理员&#xff0c;root&#xff1b;普通用户…

DCL单例模式

一、对象的创建过程 视频教程 对象的创建过程&#xff1a; 创建->初始化->建立连接 1.先申请内存&#xff0c;赋值默认值0 2.构造方法赋值初始值&#xff0c;8 3.建立连接&#xff0c;t->T 二、DCL单例 我们第一次写的单例模式是下面这样的&#xff1a; public cla…

MySQL之DCL

DCL (Data Control Language) DDL&#xff1a; create / alter / dropDML&#xff1a;insert /update/deleteDQL &#xff1a;select /showDCL &#xff1a;grant /revoke ​ 我们现在默认使用的都是 root 用户&#xff0c;超级管理员&#xff0c;拥有全部的权限。但是&#…