Atlas-based segmentation 浅析

本文介绍了基于patch的图像分割技术,对比传统的基于配准的方法,该技术通过利用图像块的相似性来传播标签,实现更高效准确的图像分割。文中详细讨论了pair-wise和group-wise两种标签传播方式,并探讨了其在脑部CT图像处理中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

  • 初见 —— Atlas-based segmentation

    Atlas 的中文翻译很贴切且形象,所谓“地图集”,直观来说,Atlas 就是人工标记完备的数据库。比如 BrainWeb 的 Atlas:在三维脑部CT数据中医生标注完备的各种脑部结构,如灰质、白质、海马等等结构。
    这里写图片描述

    最早的 Atlas-based segmentation 是基于 nonrigid registration 技术,将 testing image 和当前 Atlas 内的数据进行配准,然后用 Label Propagation 方法将 Atlas 数据的 Label 通过 registration mapping corresponding 关系传递到 testing image 中,从而完成 testing image 的分割任务。
    很显然的,这种基于 registration 的分割方法高度依赖于 nonrigid registration 技术的准确性,然而当前技术的缺陷导致 nonrigid registration 准确性不高且计算复杂度高。

  • 又见 —— nonlocal concept

    我们能不能不用 registration 技术而用一种较为简单的方法进行 label propagation? 利用 nonlocal 非局部的思想,将 patch - patch 的匹配方法(fuzzy 而不是 one-to-one 的对应关系)应用于寻找对应关系。因此这种方法又被称为 patch-based segmentation。其中最最重要的假设: 如果 testing image 中的 patch 局部相似于 Atlas 中的 patch,则这些对应的 patch 应该具有相似的 label。所以其中关键问题在于:

    1. 如何衡量局部相似性? —— 非局部思想
    2. 如何进行相似块之间的 label propagation? ——pair-wise / group-wise
  • 细看 —— Method analysis

    简单理解,就是可以用比较简单的方法 patch-based 而不是 registration 的方法进行 label propagation。

    • Corresponding Relationship 的确定
      用权重 这里写图片描述 表示当前 testing image 里面体素 x 和 atlas 中图像 这里写图片描述 中体素 y 的权重对应关系 这里写图片描述
      这里写图片描述
      可以认为 权重 这里写图片描述 表示 testing image 在 像素 x 处 和 图像 这里写图片描述 的像素 y 处的非局部相似性

    这里写图片描述
    因此根据上述的权重,即 corresponding relationship, label propagation 可以顺利展开。
    其中需要注意的点:一般的分割问题,尤其是脑部CT图像,testing image 和 atlas 里面的图像对应脑部结构的 location 并不会发生很大的变化。因此,在上述 corresponding 求解的过程中并不需要对所有的 y 进行搜索,可以将 y 限定在 x 的邻域中即可 —— 也即非局部方法中的搜索窗。(对于脑部图像可能不需要 pre-alignment)
    这里写图片描述 —— 基于图像块的相似性来衡量像素的相似性

  • Label propagation —— pair-wise label propagation
    这里写图片描述 。若 atlas 中有多张图像,则一一进行上述计算。
    其中权重 w(x,y) 利用图像块的相似性求解得到, atlas 中的搜索像素 y 被限定在 搜索窗 N(x) 中,其对应的 label 为 L(y)。 注意在脑部分割中可以一个点对应 M 中结构,因此 这里写图片描述 。用上式可以得到 fuzzy label ,再转换成 hard label。

    需要注意,若 atlas 中有多张图像,则用上式形成多张 fuzzy segmentation 结果 和 hard segmentation 结果,然后再用 classifier combination 策略,将多个分割结果融合(如 Major Voting / STAPLE 方法)。

  • Label propagation —— group-wise label propagation
    不同于上述 pair-wise label propagation 方法成对依次计算 testing image 和 atlas 中所有图像之间的关系,group-wise 的方法同时考虑 atlas 中所有图像,形成 testing image 的 segmentation 结果。
    这里写图片描述 从公式的角度也很明显,就是通过考虑 atlas 中的所有 n 张图像。
    然后得到 fuzzy segmentation ,再用相同的方法将其转变成 hard segmentation。

  • Pointwise and Multipoint Estimation
    上述提及的 不管是 pair-wise 还是 group-wise 的方法都能对体素 x 生成 label vector L。但是我们回头看看在计算过程中,我们都是采用 patch-based 相似性度量来计算,因此能不能考虑在体素 x 处获得 patch label 信息,而不是 pointwise label 信息。这就是 Pointwise 和 Multipoint 的区别。
    考虑 group-wise label propagation 方法的 multipoint 估计版本:
    这里写图片描述 。其中最显著的特点就是 这里写图片描述这里写图片描述 都是 label patch。
    其中值得注意的点是,label patch 的 overlap 现象导致 体素 x 有 N 个估计的 label —— 同样采用 classifier combination strategy。而且我们仅仅认为属于 P(x) 的体素 y 的 label 信息对于 x 有作用。

回首 —— Discussion
采用这样的 patch-based 方法相对于 registration-based 方法,放松了其中的 one-to-one的约束,可以认为是 one-to-many 的技术,从而使得多个 candidate patch 能够作用于 segmentation。

### 基于能量的方法进行图像分割 在计算机视觉领域,基于能量最小化方法的图像分割是一种广泛应用的技术。这类方法通过定义一个能量函数来表示目标对象与背景之间的差异,并试图找到使该能量函数达到极小值的状态。 #### 能量模型构建 对于给定的一幅输入图片 \( I \),假设要将其分为前景区域 \( F \) 和背景区域 \( B \)[^1]。通常情况下,会设计两个主要部分的能量项: - **数据项(Data Term)**: 描述像素属于某个类别可能性的概率分布; 设计合理的似然概率 \( P(I|F) \) 或者 \( P(I|B) \),用于衡量特定像素更倾向于成为前景还是背景的一部分[^2]。 - **平滑项(Smoothness Term)*: 鼓励相邻像素具有相同的标签;即如果两个邻近位置上的颜色相似,则它们很可能同属一类。 \[ E_{smooth}(L_i,L_j)=\begin{cases} w(i,j)\cdot d(L_i-L_j)^2 & L_i=L_j \\ M & otherwise \end{cases} \] 其中 \( L_i \) 表示第 i 个节点(像素点) 的标签, \( w(i,j) \) 是权重系数矩阵元素,\(d(\cdot )\) 度量距离度量函数,而M是一个很大的正数用来惩罚不同类别的连接关系. #### 图割算法(Graph Cut Algorithm) 为了求解上述最优化问题,常用的一种手段就是图切割法(graph cut algorithm) 。这种方法把整个过程转化为在一个加权无向图上寻找最优划分的问题,在此过程中利用最大流/最小割理论有效地解决了二元标记下的全局最优解搜索难题。 具体来说,建立一张由超级源s和汇t构成的人工网络G=(V,E),并将原始图像中的每一个像素映射成图的一个顶点v∈V。接着按照一定规则设置边e∈E及其容量c(e): - 对每一对相连的像素除去自环外都连一条双向边; - 如果某像素被预测为前景则从s到对应结点赋予较大流量;反之亦然; 最后运行Ford-Fulkerson或其他高效的最大流计算程序即可得到最终结果. ```python import numpy as np from scipy import ndimage from skimage.segmentation import slic from skimage.future.graph import rag_mean_color from sklearn.cluster import KMeans def energy_based_segmentation(image): """ Perform an energy based segmentation on the input image. Parameters: image : ndarray Input color or grayscale image. Returns: labels : ndarray of int Integer array where each unique value represents a different segment. """ # Generate superpixels using SLIC segments_slic = slic( image, n_segments=250, compactness=10, sigma=1, start_label=1 ) g = rag_mean_color(image, segments_slic, mode='similarity') kmeans = KMeans(n_clusters=2) features = [] for node in sorted(g.nodes()): features.append([g.node[node]['total color']]) cluster_labels = kmeans.fit_predict(features)+1 return cluster_labels.reshape(segments_slic.shape) if __name__ == "__main__": from PIL import Image img_path = 'example.jpg' im = np.array(Image.open(img_path)) segmented_image = energy_based_segmentation(im) ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值