提纲

  • 目的
  • 什么是模板匹配
  • 什么是自动勾画
  • 如何进行基于多模板匹配的自动勾画

目的

  • 放射治疗是治疗恶性肿瘤的主要手段之一。其基本原则是最大限度地保证射线剂量全部集中在放疗靶区内(包括GTV、CTV和PTV),并且使危及器官(Organs at Risk, OARs)少受辐射剂量。
  • 目前医生需要对图像的切片进行逐层勾画。过程耗时费力,影响了医生的工作效率,并且勾画极度依赖医生的知识和个人经验。
  • 因而需一种辅助医生勾画的自动勾画系统

什么是模板匹配

  • 定义
    模板匹配是一种查找与模板图像(patch)匹配(相似)的图像区域的技术。
  • 工作过程
  1. 源图像(I):我们期望找到与模板图像匹配的图像
  2. 模板图像(T):将与源图像进行比较的图像块
  3. 要识别匹配区域,我们必须通过滑动来比较模板图像与源图像。通过滑动,我们将图像块一次移动一个像素(从左到右,从上到下)。在每个位置,计算度量,以便它表示在该位置处的匹配的“好”还是“坏”(或者与图像的特定区域相似)。
  4. 对于 T 覆盖在 I 上的每个位置,你把度量值 保存 到 结果图像矩阵 ® 中. 在 R 中的每个位置 (x,y) 都包含匹配度量值
  5. 上图就是 TM_CCORR_NORMED 方法处理后的结果图像 R . 最白的位置代表最高的匹配. 正如您所见, 红色椭圆框住的位置很可能是结果图像矩阵中的最大数值, 所以这个区域 (以这个点为顶点,长宽和模板图像一样大小的矩阵) 被认为是匹配的.
  6. 实际上, 我们使用函数 minMaxLoc 来定位在矩阵 R 中的最大值点 (或者最小值, 根据函数输入的匹配参数) .
  • 匹配算法:
  1. 标准平方差匹配 method=CV_TM_SQDIFF_NORMED
  2. 标准平方差匹配 method=CV_TM_SQDIFF_NORMED
  3. 标准相关匹配 method=CV_TM_CCORR_NORMED

什么是自动勾画

  • 目前临床上主要应用的是基于Atlas的自动勾画,常用软件有瓦里安的Velocity、MIMvista、基于图谱库ABAS自动勾画软件等
  • 以卷积神经网络为代表的深度学习方法已经广泛应于自动分割。
  • 本文探讨的是传统方法

如何进行基于多模板匹配的自动勾画

  • 将已勾画好的DICOM图像裁剪后作为模板图像集中起来,用于多模板匹配。
  • 新(源)图像进来时,通过与模板库中图像比较,找出最匹配的候选者。
  • 将候选者对应的mask label复制给源图像即可。
  • 模板匹配得到的自动勾画可能与真实勾画差异很大,其效果并不如atlas方法和深度学习方法。
template_path = './template_path/'#存放模板的位置
label_path = './label_path/'# 存放勾画的位置
image_path = './image_path/'#欲匹配的图像位置
//读取templates图像
def read_templates(path):file_list = os.listdir(path)listTemplates = []for file in file_list:with gzip.open(template_path + file, 'rb') as unzipped_data:info_item = []info_item.append(file)template_data = pickle.load(unzipped_data)info_item.append(template_data)listTemplates.append(info_item)return listTemplates//给出匹配的模板名字和匹配得分
def findMatches(listTemplates,target,score_threshold):listHit = []for templateName, templateValue in listTemplates:if templateValue.dtype == "float64": raise ValueError("64-bit not supported, max 32-bit")else:corrMap = cv2.matchTemplate(target,templateValue, method=cv2.TM_CCOEFF_NORMED)minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(corrMap)coeff = maxValnewHit = {'TemplateName':templateName,'Score':coeff}listHit.append(newHit)return pd.DataFrame(listHit)
//使用pydicom读取dicom图片
dcms = glob.glob(os.path.join(image_path,'*.dcm'))
slices = [pydicom.read_file(dcm) for dcm in dcms]
slices.sort(key = lambda x : float(x.ImagePositionPatient[2]))
images = np.stack([s.pixel_array for s in slices],axis = -1).astype(np.float32)
targets = images * slices[0].RescaleSlope + slices[0].RescaleIntercept
Hits = findMatches(listTemplates,targets[:,:,0],score_threshold=0.6)
print(Hits)
#找出得分最高的那张slice名称
#HH = Hits.sort_values('Score',ascending=False)
Hits_group = Hits.groupby(by='Score',as_index=False).max()
print(Hits_group)
num = len(Hits_group.index)-1
print(num)
rightName = Hits_group.iloc[[num],[1]].values[0][0]#iloc是基于position进行索引的
print(rightName)

使用多模板匹配进行DICOM图像的自动勾画相关推荐

  1. opencv 模板匹配,在图像中寻找物体

    使用模板匹配在图像中寻找物体 模板匹配 模板匹配就是用来在大图中找小图,也就是说在一副图像中寻找另外一张模板图像的位置: opencv中用 cv.matchTemplate() 实现模板匹配. 模板匹 ...

  2. 【opencv】目标跟踪之MOSSE算法配合模板匹配实现初始滤波器的自动初始化

    因为最近有一个需求是识别视频流中的指定物体,一些轻量级的算法实际测试效果都不太好,所以考虑到目标追踪算法.(是自动识别!!!!!!) Opencv八种目标追踪算法: BOOSTING Tracker: ...

  3. opencv基础--图像模板匹配

    参考:https://blog.csdn.net/ivanhawking/article/details/83182692(该链接附载链接有处理多目标,旋转,缩放等匹配的方法) 1.概述 图像匹配是指 ...

  4. 一种基于模板匹配的图像配准方法

    01 前言 如下图所示,有时候参考图像与浮动图像的灰度区别很大,但是它们又有某一个小区域比较相似,这种情况下直接通过特征点匹配或形变优化来配准的效果并不理想. 这个时候我们可以尝试使用模板匹配的方法来 ...

  5. 【python版CV】图像轮廓模板匹配

    文章目录 1.图像轮廓 1.1 findContours函数: 1.2 获取轮廓信息(可能会报错原因) 1.3 绘制轮廓: 1.4 轮廓特征: 1.5 轮廓近似: 1.6 边界矩形 2.模板匹配 3. ...

  6. 【OpenCV 4开发详解】图像模板匹配

    本文首发于"小白学视觉"微信公众号,欢迎关注公众号 本文作者为小白,版权归人民邮电出版社发行所有,禁止转载,侵权必究! 经过几个月的努力,小白终于完成了市面上第一本OpenCV 4 ...

  7. 模板匹配(Match Template)

    前言    模板匹配是在图像中寻找目标的方法之一.Come On, Boy.我们一起来看看模板匹配到底是怎么回事. 模板匹配的工作方式     模板匹配的工作方式跟直方图的反向投影基本一样,大致过程是 ...

  8. OpenCV中的模板匹配/Filter2d

    1.模板匹配 模板匹配是在图像中寻找目标的方法之一.Come On, Boy.我们一起来看看模板匹配到底是怎么回事. 参考链接:http://www.opencv.org.cn/opencvdoc/2 ...

  9. opencv 有无判断 模板匹配_opencv模板匹配

    模板匹配在图像处理中经常使用,该算法主要用于寻找图像中与模板图像相同的区域.此外,也用于图像定位,通过模板匹配找到指定的位置,然后进行后续的处理. 在进行模板匹配的时候,需要先制作模板,模板图像一般是 ...

最新文章

  1. 机器学习样本标记 示意代码
  2. div溢出显示时用省略号结尾 .
  3. 转载:Linux查看设置系统时区
  4. web前端入门学习 css(4)(盒子模型)
  5. java学习(二)--- 变量类型
  6. u3d文件上传至服务器,unity 上传图片到云服务器
  7. 使用inetaddress测试目标可达性_PDPS软件机器人虚拟仿真:Smart Place功能介绍与使用方法...
  8. Python爬虫_乱码、转码
  9. gdb导入oracle,如何使用gdb工具对Oracle系统状态(systemstate)做trace
  10. 狼真来了!黑客利用SS7漏洞将网银用户洗劫一空
  11. 新装 Asterisk-1.6 没有 Meetme
  12. 数据结构:实验三 二叉树操作实现
  13. 高级商务办公软件应用【5】
  14. StringJoiner拼接字符串(使用以及源码解析)
  15. 购物车结算页面案例jQuery
  16. 腾讯员工收入曝光,我顿悟了一个成人世界的残酷事实
  17. 模电之半导体基础篇1(本征半导体、杂质半导体)
  18. 编写python 函数,实现冒泡排序算法。
  19. 5G标准——独立组网(SA)和非独立组网(NSA)
  20. 所见即所得网页html编辑器,在线所见即所得HTML编辑器的实现原理浅析

热门文章

  1. javaHTML5游戏网站设计与实现计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
  2. 解析大型.NET ERP系统 设计通用Microsoft Excel导入功能
  3. 前端上传图片回显并用base64编码,后端做解码储存,存储图片路径在.properties文件中配置(以上传身份证照片为例)
  4. 获取cookie的几种方式
  5. Markdown--PDF--PPT--Flash 工具链
  6. Arduino基础项目篇-基于Arduino的智能小车
  7. vue 前端设置允许跨域_vue——前端跨域
  8. webkitAnimationEnd动画事件
  9. 用 source map 调试生产环境
  10. Android百度地图设置位置标识