C#处理医学影像(四):基于Stitcher算法拼接人体全景脊柱骨骼影像 - 乔克灬叔叔
source link: https://www.cnblogs.com/Uncle-Joker/p/17373754.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
在拍摄脊柱或胸片时,经常会遇到因设备高度不够需要分段拍摄的情况,
对于影像科诊断查阅影像时希望将分段影像合并成一张影像,有助于更直观的观察病灶,
以下图为例的两个分段影像:
我们使用OpenCVSharp中的Stitcher类的Stitch方法,导入两张图像并拼接:
但结果却失败了,返回错误结果:ERR_NEED_MORE_IMGS,是由于医学影像的特征点匹配不够,导致无法确定对接点。
一幅图中总存在着一些独特的像素点,这些点我们可以认为就是这幅图的特征,即为特征点
获取一幅图中存在的一些独特的像素点,需要解决两个问题:
- 解决尺度不变性问题,不同大小的图片获取到的特征是一样的
- 提取到的特征点要稳定,能被精确定位
可参考本系列文章:C#处理医学影像(三):基于漫水边界自动选取病灶范围的实现思路
根据算法原理得到如下结果:
Sobel算子:
根据算法原理得到如下结果:
其中直观区别是canny算子计算的结果清晰,但不连续,容易受噪点影响,而sobel算子线条相对柔和,连续性强。
⑤背景降噪
进行一次手动背景降噪,使得展现的无用边缘更少,结果更清晰:
经过上述的一系列处理步骤后我们再次合并拼接:
Mat srcImg1 = imgList1[0]; Mat srcImg2 = imgList1[1]; Mat[] images = new Mat[] { srcImg1, srcImg2}; Stitcher stitcher = Stitcher.Create(Stitcher.Mode.Panorama); Mat pano = new Mat(); var status = stitcher.Stitch(images, pano); if (status != Stitcher.Status.OK) { ShowMsg.Box("拼接异常(" + status.ToString() + "),请重试。", BoxType.Msg, 120, this); return; }
得到了正确的结果:
C#开发PACS、RIS、3D医学影像处理系统系列教程 目录整理:
菜鸟入门篇
医学影像三维篇
PACS三维处理医学图像:
C#开发PACS医学影像三维重建(一):使用VTK重建3D影像
C#开发PACS医学影像三维重建(二):使用VTK进行体绘制
C#开发PACS医学影像三维重建(三):纹理映射与颜色传输
C#开发PACS医学影像三维重建(四):3D网格平滑效果
C#开发PACS医学影像三维重建(五):基于梯度透明的组织漫游
C#开发PACS医学影像三维重建(六):三维光源与阴影效果
C#开发PACS医学影像三维重建(七):空间测量与标注
C#开发PACS医学影像三维重建(八):VR体绘制
C#开发PACS医学影像三维重建(九):MPR三视图切面重建
C#开发PACS医学影像三维重建(十):MIP最小密度投影
C#开发PACS医学影像三维重建(十一):CPR曲面重建
C#开发PACS医学影像三维重建(十二):VE虚拟内镜技术
熟手进阶篇
登峰造极篇
C#开发基于Python人工智能的肺结节自动检测
C#开发基于Python人工智能的脊柱侧弯曲率算法
C#开发基于Python机器学习的医学影像骨骼仿真动画
C#开发基于Python机器学习的术后恢复模拟
C#开发基于U3D的VR眼镜设备虚拟人体三维重建
C#开发基于全息投影的裸眼3D医学影像显示技术
医疗影像软件产品友情链接
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK