没有合适的资源?快使用搜索试试~ 我知道了~
基于遗传算法的GLGM熵多阈值图像分割.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 163 浏览量
2023-03-03
19:31:22
上传
评论
收藏 548KB PDF 举报
温馨提示
试读
12页
。
资源推荐
资源详情
资源评论
第四章 基于遗传算法的 GLGM 熵多阈值图像分割
第三章 GPU 加速和深度学习辅助诊断
3.1 GPU 加速
在本文中,我们共有两处涉及到GPU加速,图像分割和三维渲染,由于我们采用VTK
来进行三维数据可视化,并且VTK中有封装的vtkGPUVolumeRayCastMapper类,可以方便
地进行GPU的加速。我们遇到的问题在于图像分割部分。通常来讲,图像分割就是将图像
分为不重叠的区域,每一个区域具有一些相同的特性,如亮度或纹理【22】。如果将图像
S
的整个空域定义为
,那么分割的目的就是要决定
k
,全集为
。因此,分割的所
有像素集必须满足,
K
k 1
S
k
S S
j
S
此处
k
且
k j
,并且每一个
k
都是相连的。在医学图像的分割中,理想
情况下,这些子集会对应到不同的解剖区域或感兴趣区上。
目前常见的分割方法类型有阈值法、区域生长法、聚类法、马尔科夫场模型、可形变
模型、人工神经网络分割等等。在这些方法中,区域生长法是常用来分割单一或简单的结
构【23,24】。在我们的实验中,采用了一种区域生长方法:置信连接算法。在ITK中,由
itk::ConfidenceConnectedImageFilter类提供这个算法的一个CPU版本。这个算法对于三维图
像的分割非常缓慢,所以我们使用了加速处理。GPU 适合于处理能够表示为数据并行计
算( 同一程序在多个数据上并行执行) 的算术计算密度( 算术操作和存储器操作的比例)
非常高的问题。本文算法部分地属于这一类问题,所以我们使用GPU进行了加速。
3.1.1 概念定义
区域生长算法都要解决三个问题:第一,选择若干个种子点,种子点代表了需要分割
的区域;第二,像素的合并判据,即生长过程;第三,确定生长过程停止规则【25】。置
信连接算法是区域生长法的一种,其原理是基于区域统计,也就是使用全局信息来作为判
据进行像素合并。
首先使用
R
表示目标区域的像素集合,使用
O
表示区域外像素集合。然后,用
S
i
来表
示第
i
种子点,这样,种子点
S
就描述为
S {S
1
, S
2
,..., S
M
}
,
M
表示种子点的个数。对于种
子点
S
i
的邻域,我们使用
Q
i, j
表示,所以邻域像素描述为
Q {Q
i,1
,Q
i,2
,..., Q
i,N
}
,
N
表示邻
域个数,在二维数据中一般
N 4
,三维数据中一般
N 6
。
在迭代过程中,我们需要一个中转的需要检查的像素的队列,我们记为
T {T
1
,T
2
,...T
L
}
。
L
表示这个队列的长度,它会随着目标区域的扩大而逐渐变大或变小。
该算法计算目标区域中包含的所有像素的强度值的平均值和标准差(初始化时为种子
点的邻域)。此外,需要一个用户设置的倍率因子来乘以标准差,并以此定义一个在以均
值为中心的取值范围。其公式表述如公式??,
I (X ) [m f
, m f
]
其中m和
分别是区域内像素的均值和标准差,
f
是用户指定的倍率因子,
I ()
为图像,
X为特定邻域的坐标位置。
3.1.2 算法描述
第一步,选定种子点
S
,设置倍率因子
f
,设置迭代次数
i
。
第二步,将
S
放入
T
,将
S
放入
R
。
第三步,计算
R
的 m 和
,如果
M 1
,则使用其邻域
Q
1, j
计算 m 和
。并以此得到
范围
[m f
, m f
]
。
第三步,迭代
T
中的所有邻域像素,共需要
L M
次迭代。
第四步,判断
T
k
的邻域
Q
k , j
(0 k L,0 j N )
,如果邻域像素
Q
i, j
(0 i N ,0 j M )
的值在
[m f
, m f
]
中, 则将 Q
i, j
放入队列
T
尾部,表示下一次需要再检查是否外部还
有区域内的像素。将
T
k
移出
T
,将
T
k
加入
R
。
第五步,重复第四步,直到
T
中没有像素,表示在当前的判据
[m f
, m f
]
内已经
不存在区域外像素,完成一次迭代。
第六步,如果迭代次数小于
i
,则返回第三步。否则完成迭代,输出结果。
从算法中,我们可以看到,这个过程会随着点数的扩大而迭代对应的次数,算法时间
复杂度为
O(n)
,这是没有计入计算均值和标准差时间的。当我们使用三维数据时,由于点
数的剧增,使得算法速度下降。例如,我们在实验中使用的一个 344 层的
512 512
像素的
CT 扫描序列,整个数据的点达到 90177536。这对于任何普通 CPU 来说都是一个巨大的数
值。如果要实际应用,就必须对算法进行加速。
3.1.3 GPU 算法设计
OpenCL 的计算是通过将设备看作是相同的一种结构,如图??所示。它是由一个控
制设备(Host)和一组计算设备(Computer Device)组成的。其中控制设备通常由一个 CPU
担任,而通常计算设备由一些其他 GPU、CPU 担任。计算设备会切分成很多处理元素
(Processing Element),很多个处理元素可以组成组为一个计算单元(Computer Unit),一
个计算单元内的元素之间可以方便的共享一块内存,只有一个计算单元内的元素之间可以
第四章 基于遗传算法的 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 上完成。
S (
X
i
2
nX ) / (n 1)
2
n
2
i1
其中
X
表示均值,
S
表示方差,
n
表示样本个数。我们设计的算法 1 需要几个参数,
输入图像
I
in
,输出图像
I
out
,结果向量
V
result
,计数位
V
counter
,图像尺寸
X ,Y , Z
。其中
V
result
长
度为
L
group
1
,
V
counter
长度为 1,过程如下:
第一步,开辟 WorkGourp 中的数据变量 localResult,大小为 WorkItem 的个数。并对
每一个位点置 0。
第二步,对于第一个点
(x
0
, y
0
, z
0
)
,计算
I
out
(x
0
, y
0
, z
0
)
是否在区域内,如果在,则将
I
in
(x
0
, y
0
, z
0
)
放入 localResult[0][0][0]。对于所有的 WorkItem 进行同样操作。
2
第三步,使用 barrier 函数进行组内同步,直到 WorkGourp 中所有 WorkItem 都进行完
第二步。对 localResult 中的结果进行加和并置入
V
result
的对应位置。同时使用 atom_inc 函数
对
V
counter
自加 1,表示一组加和得出结果。
第四步,直到
V
counter
等于
L
group
。说明所有的组已经加和完成。使用任意一个 WorkItem,
剩余11页未读,继续阅读
资源评论
G11176593
- 粉丝: 6712
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功