C#处理医学影像(四):基于Stitcher算法拼接人体全景脊柱骨骼影像

在拍摄脊柱或胸片时,经常会遇到因设备高度不够需要分段拍摄的情况,

对于影像科诊断查阅影像时希望将分段影像合并成一张影像,有助于更直观的观察病灶,

以下图为例的两个分段影像:

     

我们使用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#开发PACS医学影像三维重建(十三):基于人体CT值从皮肤渐变到骨骼的梯度透明思路

C#开发PACS医学影像三维重建(十四):基于能量模型算法将曲面牙床展开至二维平面

熟手进阶篇

登峰造极篇

C#开发基于Python人工智能的肺结节自动检测

C#开发基于Python人工智能的脊柱侧弯曲率算法

C#开发基于Python机器学习的医学影像骨骼仿真动画

C#开发基于Python机器学习的术后恢复模拟

C#开发基于U3D的VR眼镜设备虚拟人体三维重建

C#开发基于全息投影的裸眼3D医学影像显示技术

医疗影像软件产品友情链接

posted @   乔克灬叔叔  阅读(4850)  评论(25编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示