PythonITK以Observer监看影像对准过程教程与范例

介绍如何使用 ITK 的 observer 监看影像对准过程,绘制及时的距离变化图,确认收敛情况。

影像对准(image registration)的计算过程需要确认结果是否正确收敛到最佳解,在 ITK 中我们可以透过设置 observer 的方式,取出每次叠代产生的 metric 数值,并及时绘制出图形,方便开发者调整参数。

以下几个回呼函数(callback function)可用来绘制即时的 metric 数值收敛状况。

from IPython.display import clear_output

# 初始事件回呼函数
def cb_registration_start():
    global cb_metric_values
    global cb_current_iteration_number
    cb_metric_values = []
    cb_current_iteration_number = -1

# 结束事件回呼函数
def cb_registration_end():
    global cb_metric_values
    global cb_current_iteration_number
    del cb_metric_values
    del cb_current_iteration_number
    plt.close()

# 叠代事件回呼函数
def cb_registration_iteration():
    global cb_metric_values
    global cb_current_iteration_number

    # 忽略重覆产生的叠代事件
    if optimizer.GetCurrentIteration() == cb_current_iteration_number:
        return

    cb_current_iteration_number = optimizer.GetCurrentIteration()
    cb_metric_values.append(optimizer.GetValue())

    # 清空输出
    clear_output(wait=True)

    # 绘制 Metric 图形
    plt.plot(cb_metric_values)
    plt.xlabel('Iteration Number', fontsize=12)
    plt.ylabel('Metric Value', fontsize=12)
    plt.show()

定义好这些回呼函数之后,接着在 optimizer 上面加上 sbserver,设置事件与回呼函数的对应关系:

# 加上 Observer,设置事件与回呼函数的对应关系
optimizer.AddObserver(itk.StartEvent(), cb_registration_start)
optimizer.AddObserver(itk.EndEvent(), cb_registration_end)
optimizer.AddObserver(itk.IterationEvent(), cb_registration_iteration)

这样在执行影像对准的时候,就会及时绘制出 metric 数值收敛的状况了。

这里我们将这些 observer 套用在影像平移线性对准的范例中,可得到向这样的 metric 收敛图形。

metric 数值收敛状况metric 数值收敛状况

参考数据:ITK discussion forum、SimpleITK Notebooks、ImageRegistration3.py

技术教程

Linux系统EGL版本检查、测试工具

2022-6-14 11:23:48

技术教程

Linux使用yum复原动作、降级套件教程与范例

2022-6-14 15:09:18



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 yp10086@vip.qq.com 举报,一经查实,本站将立刻删除。

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
今日签到
有新私信 私信列表
搜索