没有合适的资源?快使用搜索试试~ 我知道了~
基于遗传算法的GLGM熵多阈值图像分割.docx
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
![star](https://csdnimg.cn/release/downloadcmsfe/public/img/star.98a08eaa.png)
温馨提示
![preview](https://dl-preview.csdnimg.cn/87527936/0001-7c5e299c09ad402e8af08961afde2bcf_thumbnail-wide.jpeg)
![preview-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/scale.ab9e0183.png)
试读
12页
。
资源推荐
资源详情
资源评论
![application/pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/release/download_crawler_static/87527936/bg1.jpg)
第四章 基于遗传算法的 GLGM 熵多阈值图像分割
第三章 GPU 加速和深度学习辅助诊断
3.1 GPU 加速
在本文中,我们共有两处涉及到GPU加速,图像分割和三维渲染,由于我们采用VTK
来进行三维数据可视化,并且VTK中有封装的vtkGPUVolumeRayCastMapper类,可以方便
地进行GPU的加速。我们遇到的问题在于图像分割部分。通常来讲,图像分割就是将图像
分为不重叠的区域,每一个区域具有一些相同的特性,如亮度或纹理【22】。如果将图像
S
的整个空域定义为
有像素集必须满足,
,那么分割的目的就是要决定
,全集为 。因此,分割的所
k
K
S
k
k1
S S
k j
S
此处
且
,并且每一个
都是相连的。在医学图像的分割中,理想
k
k
j
情况下,这些子集会对应到不同的解剖区域或感兴趣区上。
目前常见的分割方法类型有阈值法、区域生长法、聚类法、马尔科夫场模型、可形变
模型、人工神经网络分割等等。在这些方法中,区域生长法是常用来分割单一或简单的结
构【23,24】。在我们的实验中,采用了一种区域生长方法:置信连接算法。在ITK中,由
itk::ConfidenceConnectedImageFilter类提供这个算法的一个CPU版本。这个算法对于三维图
像的分割非常缓慢,所以我们使用了加速处理。GPU 适合于处理能够表示为数据并行计
算( 同一程序在多个数据上并行执行) 的算术计算密度( 算术操作和存储器操作的比例)
非常高的问题。本文算法部分地属于这一类问题,所以我们使用GPU进行了加速。
3.1.1 概念定义
区域生长算法都要解决三个问题:第一,选择若干个种子点,种子点代表了需要分割
的区域;第二,像素的合并判据,即生长过程;第三,确定生长过程停止规则【25】。置
信连接算法是区域生长法的一种,其原理是基于区域统计,也就是使用全局信息来作为判
据进行像素合并。
首先使用 R 表示目标区域的像素集合,使用O 表示区域外像素集合。然后,用 S 来表
i
示第
i
种子点,这样,种子点S 就描述为 S {S ,S ,..., S },M 表示种子点的个数。对于种
1
2
M
子点 S 的邻域,我们使用Q 表示,所以邻域像素描述为Q {Q ,Q ,..., Q }, N 表示邻
i
i, j
i,1
i,2
i,N
域个数,在二维数据中一般 N 4 ,三维数据中一般 N 6。
在迭代过程中,我们需要一个中转的需要检查的像素的队列,我们记为T {T ,T ,...T }。
1
2
L
![](https://csdnimg.cn/release/download_crawler_static/87527936/bg2.jpg)
表示这个队列的长度,它会随着目标区域的扩大而逐渐变大或变小。
L
该算法计算目标区域中包含的所有像素的强度值的平均值和标准差(初始化时为种子
点的邻域)。此外,需要一个用户设置的倍率因子来乘以标准差,并以此定义一个在以均
值为中心的取值范围。其公式表述如公式??,
I(X )[m f,m f
]
其中m和 分别是区域内像素的均值和标准差, 是用户指定的倍率因子, () 为图像,
f
I
X为特定邻域的坐标位置。
3.1.2 算法描述
第一步,选定种子点 S ,设置倍率因子 f ,设置迭代次数i 。
第二步,将 放入 ,将 放入 。
S
T
S
R
第三步,计算 的 m 和 ,如果 1,则使用其邻域Q 计算 m 和 。并以此得到
R
M
1, j
范围[m f,m f]。
第三步,迭代 中的所有邻域像素,共需要 次迭代。
L M
T
第四步,判断T 的邻域Q (0 k L,0 j N) ,如果邻域像素Q (0 i N,0 j M )
k
k, j
i, j
的值在[m f,m f] 中, 则将 Q 放入队列T 尾部,表示下一次需要再检查是否外部还
i, j
有区域内的像素。将T 移出 ,将T 加入 。
T
R
k
k
第五步,重复第四步,直到T 中没有像素,表示在当前的判据[m f,m f] 内已经
不存在区域外像素,完成一次迭代。
第六步,如果迭代次数小于
i
,则返回第三步。否则完成迭代,输出结果。
从算法中,我们可以看到,这个过程会随着点数的扩大而迭代对应的次数,算法时间
复杂度为O(n) ,这是没有计入计算均值和标准差时间的。当我们使用三维数据时,由于点
数的剧增,使得算法速度下降。例如,我们在实验中使用的一个 344 层的512512像素的
CT 扫描序列,整个数据的点达到 90177536。这对于任何普通CPU 来说都是一个巨大的数
值。如果要实际应用,就必须对算法进行加速。
3.1.3 GPU 算法设计
OpenCL 的计算是通过将设备看作是相同的一种结构,如图??所示。它是由一个控
制设备(Host)和一组计算设备(Computer Device)组成的。其中控制设备通常由一个 CPU
担任,而通常计算设备由一些其他 GPU、CPU 担任。计算设备会切分成很多处理元素
(Processing Element),很多个处理元素可以组成组为一个计算单元(Computer Unit),一
个计算单元内的元素之间可以方便的共享一块内存,只有一个计算单元内的元素之间可以
![](https://csdnimg.cn/release/download_crawler_static/87527936/bg3.jpg)
第四章 基于遗传算法的 GLGM 熵多阈值图像分割
进行同步操作。现代的 GPU 的硬件体系架构被设计成为大规模并行的,可编程的,具有
多级存储的阵列处理器结构。而OpenCL 为所有的设备设计了一套统一的内存识别结构如
图??所示。OpenCL 对于计算设备的内存分为三层:计算设备层面的global,计算单元层
面的local,处理元素层面的private。而在软件接口上,OpenCL 是通过给一个设备(Device)
或一组设备建立一个上下文环境(Context)来进行管理,建立上下文之后,一个 Context
中的所有设备视为一个设备。然后通过命令队列(Command Queue)的方式为Context 提
供需要执行的程序(Program)和参数,并返回结果。OpenCL 将处理元素称为WorkItem,
将计算单元称为 WorkGroup。另外,OpenCL 中的程序并不是一个整体,而是包含若干个
内核函数(Kernel),内核函数是运行在WorkItem 上。一个程序中可以同时包含几个内核,
在执行时可以选择让Context 运行哪个Kernel 函数。于是我们可以直接对底层的WorkItem
进行操作,也就可以通过对WorkItem、WorkGroup 的精细操作来最大化并行的效果。
图?? OpenCL 的内存逻辑结构
经过分析,有两个部分可以使用GPU 来进行加速处理,一个是均值和标准差的计算,
另一个是像素的生长过程。所以我们需要对这两个部分给出 GPU 内核上的算法过程。传
入设备的像素可以分为若干组,OpenCL 规定每一组的WorkItem 数量必须相同。我们将组
数记为L 。
group
均值计算和标准差计算。而标准差计算,相当于计算方差,根据公式??相当于计算
平方和。我们希望将每一个像素作为并行单元,并且最终加和的结果也在GPU 上完成。
n
S ( X nX
2
2
) / ( 1)
n
2
i
其中X 表示均值,S2表示方差,
n
表
i1
示样本个数。我们设计的算法1 需要几个参数,
输入图像
I
,输出图像
I
,结果向量V ,计数位V
,图像尺寸X ,Y,Z 。其中V 长
result
in
out
result
counter
度为L
1,V
长度为1,过程如下:
group
counter
第一步,开辟 WorkGourp 中的数据变量 localResult,大小为 WorkItem 的个数。并对
每一个位点置0。
第二步,对于第一个点 (x , y , z ) ,计算I (x , y , z ) 是否在区域内,如果在,则将
0
0
0
out
0
0
0
I (x , y , z ) 放入localResult[0][0][0]。对于所有的WorkItem 进行同样操作。
in
0
0
0
第三步,使用barrier 函数进行组内同步,直到WorkGourp 中所有WorkItem 都进行完
第二步。对localResult 中的结果进行加和并置入V 的对应位置。同时使用atom_inc 函数
result
对V
自加1,表示一组加和得出结果。
counter
第四步,直到V
等于L 。说明所有的组已经加和完成。使用任意一个WorkItem,
group
counter
剩余11页未读,继续阅读
资源评论
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
- m0_748129882023-06-04资源内容详细,总结地很全面,与描述的内容一致,对我启发很大,学习了。
![avatar](https://profile-avatar.csdnimg.cn/a71a690a54794121897a1839eb6efba6_g11176593.jpg!1)
G11176593
- 粉丝: 6711
- 资源: 3万+
上传资源 快速赚钱
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
安全验证
文档复制为VIP权益,开通VIP直接复制
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)