- 博客(208)
- 资源 (10)
- 收藏
- 关注
原创 VTK例子--使用不同的vtkActor同时显示灰度图、体渲染、多边形
下面两张图是渲染效果,从两张图上也发现了问题,第一张图灰度图和体渲染和多边形渲染是有遮挡关系的;可能是VTK中对image图像和体渲染的遮挡关系的bug,之前也发现了在一个平面上纹理映射一张图像,也存在这种透明关系的错误;例子中展示的效果图里包含了体渲染、多边形和灰度图像,就是我想要实现的效果,写个笔记记录一下;如网格多边形与灰度图像的显示、体渲染与多边形的显示、体渲染与灰度图像的显示,如下面几张图的效果;灰度图像则是直接由vtkImageActor设置图像范围,取得一个矢状位的图像;
2023-03-02 09:30:25
2807
1
原创 CUDA笔记--2D高斯卷积实现
__global__ void convolution_1D_basic_kernel(float *N, float *P, int Mask_Width, int Width, int Height){ int i = blockIdx.x * blockDim.x + threadIdx.x; int j = blockIdx.y * blockDim.y + threadIdx.y; int n = size_kernel / 2; // 在共享存储器上分配一个TILE_SIZE*T.
2023-01-29 10:51:57
736
原创 OpenCV笔记-对轮廓进行平滑处理
有一个像素数较少的图像,在上面找轮廓,显示轮廓锯齿严重;如何将轮廓进行平滑?一开始是想着将轮廓上的拐点拟合出一个贝塞尔曲线,由于要绘制回原图像上,且贝塞尔曲线的生成也没有找到很好的办法;后来又想到可以将图像和轮廓的绘制分为两个图层,将轮廓的绘制图层放大,计算出一个高精度的轮廓线,这样的轮廓线更加平滑,采样更高;然后缩小合并在原图上;
2022-11-08 21:27:24
10306
4
原创 VTK例子--使用vtkNIFTIImageReader读unsigned char的nii.gz文件并使用vtkImageReslice切面显示RGB
// bits是input数组的类型长度:char,short,int,long,float,double等等,是sizeof(T)void Buffer2Mat_123(const unsigned char *input, int width, int height, int bits, cv::Mat &img){ if (input == NULL) return; int bytes = width * height * bits / 8; img...
2022-05-18 21:40:10
4544
1
原创 VTK问题记录--vtkImageData的更新,渲染结果未改变
问题: 每次更新渲染管线中的vtkImageData的内容时,都需要重新生成一个vtkImageData来替换原来的vtkImageData;如果不这样,渲染出来的图像就不会改变;原因:当vtk渲染管线中正在使用的vtkImageData内容发生改变时,如果没有使用Modifed方法更新时间戳,则渲染的结果不会发生改变;...
2022-05-18 15:39:10
828
4
原创 VTK源码阅读--VTK里的智能指针vtkSmartPointer类
vtkSmartPointer是一个类模板,为vtkSmartPointerBase超类持有的对象提供自动强制转换。
2022-05-14 20:08:05
4056
原创 VTK源码阅读--vtkWeakPointerBase类
vtkWeakPointerBase类vtkWeakPointerBase类中持有一个指向vtkObjectBase或者vtkObjectBase派生类的指针,但它从不影响vtkObjectBase的引用计数。但是,当引用的vtkObjectBase被销毁时,指针被初始化为 nullptr,从而避免了悬空引用。vtkWeakPointerBase类声明vtkWeakPointerBase类的头文件声明如下:class VTKCOMMONCORE_E...
2022-05-01 12:35:17
617
原创 VTK源码阅读--时间戳-vtkTimeStamp类
前言 VTK框架里,大多数的类都是从vtkObject派生,vtkObject实现了观察者/命令(Observer/Command)设计模式,内部维护一个修改时间,用于控制可视化管线的执行。可视化管线是VTK里的重要概念,管线的连接应该使用SetInputConnection()/GetOutputPort()接口进行连接。VTK采用“惰性赋值”(Lazy Evaluation)的方案来控制管线的执行,只有当发出“请求数据”时,管线才会被执行。 具体讲,惰...
2022-04-30 19:12:50
2831
原创 VTK源码阅读--从vtkObjectBase开始
vtkObjectBase类vtkObjectBase类是所有引用计数类的基类,其内部使用了原子(atomic)操作的引用计数ReferenceCount和vtkWeakPointerBase类型的WeakPointers;vtkObjectBase类执行引用计数:只要另一个对象使用它们,引用计数的对象就存在。一旦对引用计数对象的最后一个引用被删除,该对象将自发销毁。vtkObjectBase类将构造函数和析构函数访问权限设置为protected,...
2022-04-30 13:17:11
1492
原创 CUDA笔记-卷积计算
CUDA 3D convolution - ijpq - 博客园overview https://www.cnblogs.com/ijpq/p/15405106.html
2022-04-26 18:12:24
4849
原创 CUDA笔记--GPU的存储结构
1.GPU存储结构模型 从上面的存储结构可以看到如下内容: 1.CPU可以读写GPU设备中的Global Memory、Constant Memory以及Texture Memory内存储的内容;主机代码可以把数据传输到设备上,也可以从设备中读取数据; 2.GPU中的线程使用Register、Shared Memory、Local Memory、Global Memory、Constant Memory以及Texture Memory;不同Me...
2022-03-25 16:02:59
3660
原创 CUDA笔记--实现一个__global__向量加法
目标:实现两个长向量的加法; 代码规范:在主机代码的每一段中,给那些只由主机处理的变量名字加上前缀h_,给主要设备处理的变量名加上前缀d_;使用CPU代码的版本void vecAdd(float* h_A, float* h_B, float* h_C, int n) { for (int i = 0; i < n; i++) { h_C[i] = h_A[i] + h_B[i]; }}void init(float* ptr, in...
2022-03-24 11:32:02
1044
原创 linux-查看CPU温度
使用lm-sensors;root@ubuntu:~# sudo apt-get install lm-sensors -yroot@ubuntu:~# watch sensors
2022-03-23 21:07:00
2726
原创 linux--服务器降频
问题 这两天在排查一个问题,服务器上同一段代码的性能不稳定,运行时间时长时段,差别很大; 排查的第一步,将耗时不稳定的代码优化后(使用多线程),运行时间任然忽长忽段; 排查的第二步,将耗时不稳定的代码,在调用时,连续跑N次,观察现象,时间很稳定,运行都很短; 排查的第三步,在服务接受到请求后,开始N次任务,每个任务的那段代码,运行稳定,时间很短; 排查的第四步,在N次任务中夹杂sleep(200),运行时间任然忽长...
2022-03-22 10:47:59
3992
原创 阅读DCMTK笔记-ofstd-Base64转换
ofstd内部的Base64编码// Base64 translation table as described in RFC 2045 (MIME)static const char enc_base64[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";OFCondition OFStandard::encodeBase64(STD_NAMESPACE ostream &ou...
2022-03-18 15:00:52
448
原创 C++笔记-用指定字符串替换目标字符串中的字串-find-substr-replace
功能是:用字符串zhangsan、lisi、wangwu替换目标字符串names=[\"#1\",\"#2\",\"#3\"]中的#1、#2、#3;结果是:names=[\"zhangsan\",\"lisi\",\"wangwu\"];1.使用std::string的replace方法;std::string org_str = "names=[\"#1\",\"#2\",\"#3\"]";std::string str_0 = "zhangsan";std::string str_1 = "l
2022-02-17 11:44:27
1783
原创 VTK笔记-vtkProbeFilter探针类
vtkProbeFilter类 vtkProbeFilter类可以在指定点位置采样数据值,可以在指定点位置过滤源数据的标量数据(标量值、向量值),是一种过滤器类;vtkProbeFilter类支持两种输入,包括了输入过滤几何结构和待过滤的源数据;在计算指定点位置数值时,将采用插值算法计算;vtkProbeFilter类复制每个指定点位置的源数据到输出中。 vtkProbeFilter类可以在三维体数据中过滤一个平面所经过的源数据,类似MPR功能; vtkProbeFilter类也可以重新采样数据
2022-02-10 16:06:30
5144
4
原创 VTK笔记-使用vtkCutter类对多边形取切面轮廓
vtkCutter类vtkCutter可以使用使用用户指定的隐式函数切割vtkDataSet。vtkCutter是一个过滤器,可以使用vtkImplicitFunction 的任何子类来切割数据。也就是说,对应于隐式函数 F(x,y,z) = value(s) 创建了一个多边形表面,可以在其中指定一个或多个用于切割的值。在VTK中,切割意味着将尺寸为N的单元减少为尺寸为N-1的切割表面。例如,一个四面体在被平面切割时(即vtkPlane隐函数)会生成三角形。(相比之下,裁剪采用 N 维单元并创建 N
2022-01-09 17:06:40
9492
15
原创 VTK笔记-使用vtkImageImport类将内存数组转换为vtkImageData
vtkImageImport类vtkImageImport提供了从独立于 VTK 的数据源(例如简单的C数组或第三方管道)导入图像数据所需的方法。请注意,VTK约定是将图像体素索引(0,0,0)设为图像的左下角,而大多数2D图像格式使用左上角。在图像加载到VTK 后,可以使用vtkImageFlip来校正方向。请注意,也可以从 Python 字符串而不是从C数组导入原始数据。该数组仅适用于标量点数据,不适用于单元数据。void SetImportVoidPointer(void* ptr);设置
2021-12-29 20:40:20
2327
3
原创 VTK笔记-使用vtkImageStencilData转换polygon时出现random bad lines
使用vtkImageStencilData转换polygon到image时,偶尔会出现丢失数据的情况,如下图;查了很多资料,发现vtkImageStencilData会出现random bad lines的错误;1.使用vtkFeatureEdges和vtkCleanPolyData并不能解决这个问题;2.设置tolerance = 1.0只是将四舍五入扩大了,并不能解决问题;...
2021-12-29 19:58:00
542
原创 VTK笔记-使用vtkHull类获取多边形数据的凸包
1.vtkHull类 vtkHull是一个过滤器,它将在给定一组n个平面的情况下生成一个n边凸包。(凸面外壳限制输入多边形数据。)外壳是通过向输入vtkPolyData挤压平面生成的,直到平面刚好接触vtkPolyData。然后,生成的平面用于生成由三角形表示的多面体(即外壳)。 n个平面可通过多种方式定义,包括 1)手动指定每个平面; 2)选择输入边界框的六个面平面; 3)选择输入边界框的八个顶点平面; 4)选择输入边界框的12个边平面;和/或5)使用递归细分的八面
2021-12-29 13:57:29
1546
原创 VTK笔记-使用vtkTubeFilter类把一条线扩展成一个管腔
vtkTubeFilter类vtkTubeFilter是一种在每条输入线周围生成一个管的过滤器。管由三角形条带组成,并随着线法线的旋转围绕管旋转。(如果不存在法线,则会自动计算法线。)可以将管的半径设置为随标量或矢量值而变化。如果半径随标量值变化,则将线性调整半径。如果半径随矢量变化,则使用质量流量保持变化。如果半径按向量范数变化,则半径将线性调整为其范数。还可以指定管的边数。还可以指定哪些边是可见的。这对于生成有趣的条带效果非常有用。其他选项包括为管状体加盖和生成纹理坐标的功能。纹理坐标可以与关联的纹理
2021-12-02 11:51:33
2637
3
原创 杂识-HSV与伪彩图
HVSHSV(Hue, Saturation,Value)是根据颜色的直观特性由A. R. Smith在1978年创建的一种颜色空间,也称六角锥体模型(Hexcone Model)。这个模型中颜色的参数分别是:色调(H),饱和度(S),明度(V)。色调H用角度度量,取值范围为0°~360°,从红色开始按逆时针方向计算,红色为0°,绿色为120°,蓝色为240°。它们的补色是:黄色为60°,青色为180°,紫色为300°;饱和度S饱和度S表示颜色接近光谱色的程度。一种颜色,可以看成是某种光谱色与
2021-11-21 20:11:08
5923
原创 医学杂识-血管周围脂肪组织(PVAT)
PVAT血管周围脂肪组织(PVAT)指紧绕血管周围的脂肪组织以往认为血管周围脂肪组织是与血管伴行起支撑保护作用的结缔组织。近年来的研究表明PVAT中不仅含有脂肪细胞,而且含有多种免疫细胞,功能上不仅具有支撑血管和储存能量的作用,而且具有活跃的内分泌功能,可分泌多种脂肪因子和细胞因子,调节血管和全身的免疫微环境。PVAT功能的异常与高血压,动脉粥样硬化等多种心血管疾病的发生发展关系密切。血管周围脂肪主要由脂肪细胞、成纤维细胞、干细胞、肥大细胞以及神经细胞等构成。除脑血管外,全身各处血管(大到主动脉,小到真
2021-11-20 21:42:17
5467
原创 VTK笔记-使用vtkSplineFilter类处理3D空间曲线
double p0[3] = { 1.0, 0.0, 0.0 }; double p1[3] = { 0.0, 1.0, 0.0 }; double p2[3] = { 0.0, 0.0, 1.0 }; double p3[3] = { 1.0, 2.0, 3.0 }; vtkNew<vtkPoints> points; points->InsertNextPoint(p0); points->InsertNextPoint(p1); points->Inser
2021-11-20 20:45:07
2093
3
原创 vim常用操作命令
VIM中的复制剪切移动多行删除1、复制使用yy复制一行使用 行数n+yy 复制n行使用p对复制的行进行粘贴2、剪切使用dd剪切一行使用 行数n+dd 剪切n行使用p对剪切的行进行粘贴3、移动Vim用数字+G来移动行,比如你要移动到342行,那就是342G4.多行删除首先在命令模式下,输入“:set nu”显示行号;通过行号确定你要删除的行;命令输入“:32,65d”,回车键,32-65行就被删除了...
2021-11-20 19:55:32
828
原创 VTK笔记-使用vtkCleanPolyData/vtkCleanPolyData/WarpSurface/扩张多边形数据
vtkCleanPolyData合并重复点,和/或删除未使用的点和/或删除退化单元。vtkCleanPolyData是一个过滤器,它将多边形数据作为输入并生成多边形数据作为输出。vtkCleanPolyData将合并重复点(在指定公差范围内,如果启用),消除任何单元中未使用的点,如果启用,则将退化单元转换为适当的形式(例如,如果合并三角形的两点,则将三角形转换为直线)。退化单元的转化由ConvertLinesToPoints、ConvertPolysToLines、ConvertStripsToPol
2021-11-20 19:53:42
3470
原创 VTK笔记-高斯滤波器-vtkImageGaussianSmooth类代码阅读
初始变量值 默认计算Dimensionality为三维;每个方向上的标准标准偏差为2.0,每个方向上的半径因子1.5;vtkImageGaussianSmooth::vtkImageGaussianSmooth() { this->Dimensionality = 3; this->StandardDeviations[0] = 2.0; this->StandardDeviations[1] = 2.0; this->StandardDevia
2021-11-17 09:58:32
2869
原创 VTK笔记-高斯滤波器-vtkImageGaussianSmooth类
vtkImageGaussianSmoothvtkImageGaussianSmooth类实现输入图像与高斯函数的卷积,支持从一维到三维数据卷积处理。vtkSmartPointer<vtkImageGaussianSmooth> gaussianSmoothFilter = vtkSmartPointer<vtkImageGaussianSmooth>::New();gaussianSmoothFilter->SetInputData(data_ptr);gaussi
2021-11-08 17:31:41
1299
原创 VTK笔记-纹理贴图-vtkTexture类
计算机图形学中的纹理既包括通常意义上物体表面的纹理即使物体表面呈现凹凸不平的沟纹,同时也包括在物体的光滑表面上的彩色图案,通常我们更多地称之为花纹。对于花纹而言,就是在物体表面绘出彩色花纹或图案,产生了纹理后的物体表面依然光滑如故。对于沟纹而言,实际上也是要在表面绘出彩色花纹或图案,同时要求视觉上给人以凹凸不平感即可。 凹凸不平的图案一般是不规则的。在计算机图形学中,这两种类型的纹理的生成方法完全一致, 这也是计算机图形学中把他们统称为纹理的原因所在。 所以纹理映射就是在物体的表面上绘制彩色的图案。..
2021-11-07 20:34:06
6325
17
原创 杂识-线性插值
线性插值线性插值是指插值函数为一次多项式的插值方式。线性插值可以用来近似代替原函数,也可以用来计算得到查表过程中表中没有的数值。一次线性插值(线性插值)双线性插值(二次线性插值)双线性插值,又称为双线性内插。在数学上,双线性插值是有两个变量的插值函数的线性插值扩展,其核心思想是在两个方向分别进行一次线性插值。双线性插值作为数值分析中的一种插值算法,广泛应用在信号处理,数字图像和视频处理等方面。线性插值的结果与插值的顺序无关。首先进行y方向的插值,然后进行x方向的插值,所得到的结果是一
2021-11-06 15:30:46
3336
原创 VTK笔记-VTK的数学工具vtkMath类(未完)
vtkMath vtkMath提供了执行常见数学运算的方法。这些包括提供常数,如Pi;从度到弧度的转换;向量运算,如点积、叉积和向量范数;2x2和3x3矩阵的矩阵行列式;一元多项式求解器;用于随机数生成(仅用于向后兼容)。常量定义 定义常使用的PI:static constexpr double Pi() { return 3.141592653589793; } 使用cos(-1)计算出的PI值为3.1415926535897931;基础数据操作四舍五入static int Ro
2021-11-04 10:13:30
2431
原创 VTK笔记-几何变换-绕任意轴旋转
vc⃗=(v⃗⋅α⃗)⋅α⃗\vec{v_{c}}=(\vec{v}\cdot \vec{\alpha })\cdot\vec{\alpha }vc=(v⋅α)⋅αv1⃗=v⃗−vc⃗=v⃗−(v⃗⋅α⃗)⋅α⃗\vec{v_{1}}=\vec{v}-\vec{v_{c}}=\vec{v}-(\vec{v}\cdot \vec{\alpha })\cdot\vec{\alpha }v1=v−vc=v−(v⋅α)⋅α由于α⃗×α⃗=0\vec{\alpha }\times\vec{\alpha
2021-11-03 20:43:16
3836
3
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人