基于VTK的MFC应用程序开发(2)

现在基于VTK的MFC程序框架已经搭建起来。这一节我们来对上节的程序进行扩展,实现图像的重采样。重采样是图像处理中的一个常见功能,尤其是在医学图像处理中,一些三维图像数据量非常大,对于内存的要求比较高,在处理时为了时间和空间效率的平衡,对图像进行重采样(降采样);另外还有的应用如配准中,为了保持图像的维数一致,还可能对图像进行升采样。但是在目前常使用到的医学图像处理软件中,并没有提供重采样的功能。这个也是本程序开发的初衷,在讲述重采样的原理的同时,提供一个方便的图像重采样软件。

关于图像重采样的内容在VTK在图像处理中的应用(5)一文中也已经介绍过。图像重采样实际上是一个插值的过程。原图像的像素可以看做一些规则分布的离散点,而重采样则意味在这些离散点的基础上通过插值的方式来计算新的离散点的灰度值。最简单的差值方式为最近邻法,即取原图像中距离当前采样点最近的像素值作为当前采样点的输出,这种方式计算简单,但是误差比较大,图像失真比较严重;第二种也是一个最常用的方式是线性差值方式,二维图像对应双线性插值(利用当前新采样点周围的四个原图像像素点进行线性插值),三维图像则是利用周围的8个像素点进行三次线性插值。采用线性插值方式计算相对也比较简单,但是同样会对图像具有平滑效果。另外还有三次多项式插值,B样条插值等方式,这种方式计算量比较大,但是精度比较高。这些方式可以根据不同的需要进行选择。

本篇内容将以线性插值方式为主,实现一个图像重采样应用程序,利用该程序可以方便的进行图像的重采样;同时,在本篇中还会介绍怎样利用CMake在MFC框架添加一个新类。关于如果搭建基于VTK的单文档程序,请参阅基于VTK的MFC应用程序开发(1)

 

1.  添加一个对话框资源

 

 

添加相应的控件,设置对话框及控件ID。界面设计如上。用户首先需要选择改变图像的维数或者图像的像素间隔。这两个参数是相互关联的,即在每个方向上修改其中一个时,另一个也会随之改变,而两者的乘积保持不变。因此这里用户可以选择修改图像的维数还是像素间隔来进行重采样。采样参数共有6个,分别为X方向维数,Y方向维数,Z方向维数,X方向像素间隔,Y方向像素间隔和Z方向像素间隔。像素间隔在医学图像中是一个很重要的参数,表示像素的物理尺寸,普通图像较少使用,默认值为1。维数或者图像像素间隔,每次只能一项。当图像的某个方向的维数为1时,则不能进行重采样。

 

2.  将对话框添加为类

 

设置类的名字CResampleDialog,并选择基类为CDialog。这里需要注意的是,由于MFC工程通常代码文件与工程文件是在一个路径下,这里添加对话框类文件后,这些文件的路径将会是在工程路径下即bin目录中。而我们采用CMake来管理工程,代码文件与工程文件是分离的,因此这里不妨将.h文件和.cpp文件的路径设置为代码路径下,如下图所示红色区域显示:

 

 

点击完成后,可以发现在代码路径中多出了两个文件,即新添加的类文件。与此同时,在工程的解决方案中,同样会多出了两个文件,如下图中所示。

 

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 18
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值