3.2 区域生长与分水岭


3.2 区域生长与分水岭

本节摘要:区域方法从种子或盆地出发,按相似性或地形把像素吞进区域。区域生长适合「点一下就能长开」的均匀目标;分水岭把灰度当海拔,适合切开粘连的细胞或零件。两者都要认真对待种子与过度分割。

读前必看

阅读完本节,你应当能够:

  1. 描述区域生长的种子、相似谓词、停止条件,并指出谓词过松过紧的症状
  2. 把距离变换与前景标记接到分水岭,减轻把噪声当山峰
  3. 在粘连目标上对比「只阈值」与「阈值加分水岭」的实例数
  4. 把过度分割用合并规则收束,而不是无限调参

一、从一颗种子长成一片田

区域生长像农田灌水:在地里打一口井,水往相似的邻里漫,遇到田埂(灰度跳变)停下。种子可人工点,也可取阈值后的质心。相似性常用灰度差绝对值小于某阈值,或颜色距离。四邻或八邻决定会不会沿对角漏过去。停止条件:队列空了,或区域太大不像目标。

过紧:区域长不大,目标内部纹理被当成许多田埂。过松:漫过边界,把背景吞进来。所以生长对「内部均匀、边界清楚」友好,对纹理器官不友好。医学里肝脏内部血管会造成假田埂,需要先平滑或改用更鲁棒的谓词。

# 概念:队列生长,gray 为灰度,seed 为起始坐标 from collections import deque h, w = gray.shape out = np.zeros((h, w), np.uint8) q = deque([seed]) out[seed] = 255 th = 12 while q: y, x = q.popleft() for dy, dx in ((-1,0),(1,0),(0,-1),(0,1)): ny, nx = y + dy, x + dx if 0 <= ny < h and 0 <= nx < w and out[ny, nx] == 0: if abs(int(gray[ny, nx]) - int(gray[seed])) < th: out[ny, nx] = 255 q.append((ny, nx))

种子选在目标中心比选在边界稳。多目标就多种子,每种一色,相当于简陋实例分割。种子落在背景上,会把背景长成「目标」,这是操作错误不是算法错误。

二、分水岭:地形与洪水

把灰度或梯度幅值看成地形。水从低处涨,盆地被淹没,不同盆地的水在山脊相遇形成坝,坝就是边界。直接对梯度做分水岭,噪声小坑会变成几百个盆地,这就是经典的过度分割。工程上几乎总是「标记分水岭」:先用开运算和距离变换找到肯定是目标的内部标记、肯定是背景的外部标记,只在不确定带涨水。

粘连圆形目标:阈值得到粘在一起的二值团,距离变换在每个圆中心形成峰,取峰为标记,分水岭沿最窄颈部切开。这是细胞、药粒、螺钉帽的常规组合拳,比一上来 Mask R-CNN 便宜。

bin_img = ... # 阈值后的前景 255 dist = cv2.distanceTransform(bin_img, cv2.DIST_L2, 5) _, sure_fg = cv2.threshold(dist, 0.4 * dist.max(), 255, 0) sure_fg = sure_fg.astype(np.uint8) n, markers = cv2.connectedComponents(sure_fg) ws = cv2.watershed(cv2.cvtColor(gray, cv2.COLOR_GRAY2BGR), markers)

距离峰值比例 0.4 是可调的:太高漏掉小目标标记,太低粘连切不开。不要把这个比例写死在所有倍率下。

方法 关键超参 适合 翻车
区域生长 种子、灰度差、邻域 均匀团块、交互式点选 纹理内部、光照渐变
标记分水岭 前景标记、距离比例 粘连圆状目标 无标记时碎成千块
只阈值 T 分离良好的团 粘连无法计数

⚠️ 常见坑:在未去噪的梯度上直接分水岭,得到的「精致边界」其实是噪声的海岸线。
💡 关键直觉:分水岭切的是盆地之间的山脊。标记是在告诉洪水哪里才算一座山。

三、过度分割之后要合并

碎块可以按颜色差、边界强度、面积规则合并。这像行政规划:先切细再合并,比一次切准容易控。不过合并规则写多了就变成专家系统,维护成本上升。若碎块来自纹理,优先回到平滑或换特征,而不是写五十条 if。

区域生长和分水岭都能输出实例 id 图,接到第 2.1 节的编码。评估计数任务时看的是实例数和每个实例的重叠,不只是像素 Dice——两细胞合成一个,像素重叠仍可能很高。

图 粘连目标的颈部

图 粘连目标的颈部

四、何时交给深度学习

内部极不均匀、边界靠语义而不是灰度(例如「这是车不是影子」),区域方法会认影子。把本节当探针:能切开,深度学习负责更稳、更少调参;切不开,深度学习也要有对应的形状先验或更好的特征,不是换层数就灵。交互式生长仍适合半自动标注:人点种子,算法长开,人再改。这和后文 SAM 点提示是同一类工作方式,只是谓词从灰度换成了大模型。

五、标记从哪里来

前景标记不要手点一百张。用开运算去掉细桥后,距离变换取峰,再连通域编号。背景标记可用对二值图膨胀后的反,或图像边缘。不确定带才交给洪水。标记落在噪声上,会多出实例;标记漏了小细胞,会少实例。比例 0.4 随倍率改:小细胞要降低,否则峰被切掉。把比例与最小细胞直径一起写进配置。

区域生长的谓词可从「相对种子灰度」改成「相对当前区域均值」,对缓慢渐变更宽容,但也可能沿渐变爬出目标。交互式场景让人加禁止点(背景种子),比把阈值拧到死人性化。这和 SAM 的背景点是同一交互语言。

过度分割合并:面积小于阈值的盆地并给颜色最接近的邻居,或并给边界梯度最低的邻居。规则要少,超过三条就该怀疑特征不对。合并后重新编号实例 id,接到第 2.1 节编码。计数评估用匈牙利匹配一类把预测实例对到真值,光看像素 Dice 会放过「两核合一」。

问题:深度学习还要分水岭吗?

要,当后处理。网络输出粘连概率团时,距离变换加分水岭仍是切开的便宜手段。不要让网络「学着切」却在评估时又用连通域把它们粘回去——口径要一致。

粘连圆目标上,先报第 3.1 节阈值的实例数(往往是 1),再报本节切开后的实例数。两个数并排,才能说明分水岭的贡献。只报后一个数,会把阈值的功劳也算进来。

六、实例数对照实验

同一张粘连细胞图,报三个数:阈值连通域个数、分水岭切开个数、真值个数。三个数并排才能说明分水岭贡献。只报切开后与真值接近,可能阈值已经碰巧分开。距离峰比例与最小直径一起改:直径变小,比例要降,否则小核没有标记,洪水把它并进邻居。

生长谓词改成相对区域均值后,要设最大面积,防止沿渐变爬出器官。交互式加背景种子,比把差阈值拧死更符合标注工位。合并规则最多三条:面积、颜色差、边界梯度。第四条出现时停笔,回去换特征。评估用实例匹配,像素 Dice 单独报会放过两核合一。

无标记分水岭的碎块海岸线,看起来精致,其实是噪声。去噪后再标记。深度学习后处理仍可用本节组合拳,但训练与评估必须同时开或同时关,避免把形态学功劳算给网络。配置里写「训练无分水岭、推理有」要在指标表出现两列,评审才能看见差价。

三实例数并排:阈值连通域、分水岭、真值。比例与最小直径绑定。生长设最大面积防爬出。合并规则不超过三条。训练评估同时开或同时关后处理,指标两列对比。无标记碎海岸线先去噪。交互背景种子与 SAM 背景点同一语言,可在半自动标注工位沿用,仍须抽检,不能因为传统就不执法。

三实例数表作为粘连实验的固定输出。缺真值列不准写论文式结论。直径与比例绑定表随倍率更新。生长最大面积按器官或细胞的物理上限换算像素。合并规则文档超过三条必须删到三条并说明删了什么。后处理开关训练评估同态,指标两列。碎海岸线先去噪再标记。交互种子工位的抽检与 SAM 工位同一套一致率,不因传统而豁免。配置写明地形若来自梯度则引用 3.3。切开贡献用并排数字证明,禁止只报终态。最小细胞没有峰时宁可漏标记并在日志计漏,也不要降低比例到把噪声当峰。漏与噪的取舍写进伤害,不写进临时手调。

反例档案:只报切开后实例数,阈值其实已经分开,分水岭没贡献。三列并排后才诚实。第二份:比例降太低噪声成峰,实例爆炸。漏标记计入伤害后不再盲目降比例。后处理开关不同态让网络拿走形态学功劳,两列对比治好了它。

口令卡:三列实例数、直径绑比例、最大面积、合并三条、开关同态、先去噪再标记。抽检不豁免传统工位。漏与噪听伤害。贡献用并排证明。地形引用 3.3 若用梯度。

作业指导书要求输出三列实例数否则实验无效。直径比例表随倍率改。最大面积用物理上限换算。合并超三条退回。开关同态。传统工位抽检与 SAM 工位同一套表。漏标记计入伤害,噪声成峰也计入伤害,取舍写死。梯度地形必须引用边缘节,防止两套地形各说各话。

交付门禁丁

实验包缺少三列实例数不得归档。倍率变化未更新直径比例表不得归档。合并规则文档第四条出现必须先删。训练与评估后处理开关不一致不得归档。传统工位本周无抽检记录等同未执法。伤害表未写漏标记与噪声峰如何计分,比例禁止再降。使用梯度地形却未引用边缘节,配置非法。

现场抽问:三列实例数在哪?倍率变了比例表改了没?合并是不是还是三条?开关同不同态?传统工位这周抽检记录在哪?漏和噪怎么计分?梯度地形有没有引用边缘节?答不全不准降比例。

失败演练乙:缺真值列仍归档,应被拒。倍率变了不改比例表,应被拒。第四条合并规则出现,应被拒。开关不同态,应被拒。把漏标记计分表藏起来还降比例,应被拒。

五场拒绝条件写进归档脚本,缺真值列直接失败。比例表与倍率绑定检查自动化。

分水岭过度分割时先加标记点,不要先加深学习。种子点来自距离变换峰值或人工点击,必须可复现。区域生长的相似度阈值写进配置,换图换阈值要记一笔,禁止现场拧完不留档。

核心回顾

  • 生长三件套:种子、谓词、停止;过紧碎、过松漏
  • 分水岭要标记:无标记几乎必然过度分割
  • 粘连圆目标:阈值、距离变换、分水岭是廉价实例
  • 计数看实例不是只看 Dice:粘连合并会骗重叠
  • 碎块合并是权宜:规则爆炸时换表示
  • 交互式种子:半自动标注的传统形态

下一节从区域转到边界:Sobel、Canny 与把轮廓收紧的活动轮廓。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U