翼度科技»论坛 编程开发 .net 查看内容

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

8

主题

8

帖子

24

积分

新手上路

Rank: 1

积分
24
在拍摄脊柱或胸片时,经常会遇到因设备高度不够需要分段拍摄的情况,
对于影像科诊断查阅影像时希望将分段影像合并成一张影像,有助于更直观的观察病灶,
以下图为例的两个分段影像:
     

我们使用OpenCVSharp中的Stitcher类的Stitch方法,导入两张图像并拼接:

 但结果却失败了,返回错误结果:ERR_NEED_MORE_IMGS,是由于医学影像的特征点匹配不够,导致无法确定对接点。
一幅图中总存在着一些独特的像素点,这些点我们可以认为就是这幅图的特征,即为特征点

获取一幅图中存在的一些独特的像素点,需要解决两个问题:

  • 解决尺度不变性问题,不同大小的图片获取到的特征是一样的
  • 提取到的特征点要稳定,能被精确定位 

 


可参考本系列文章:C#处理医学影像(三):基于漫水边界自动选取病灶范围的实现思路

 
根据算法原理得到如下结果:

 
Sobel算子:
根据算法原理得到如下结果:

 
其中直观区别是canny算子计算的结果清晰,但不连续,容易受噪点影响,而sobel算子线条相对柔和,连续性强。
 
⑤背景降噪
进行一次手动背景降噪,使得展现的无用边缘更少,结果更清晰:

 
经过上述的一系列处理步骤后我们再次合并拼接:
  1.             Mat srcImg1 = imgList1[0];
  2.                     Mat srcImg2 = imgList1[1];
  3.                   
  4.                     Mat[] images = new Mat[] { srcImg1, srcImg2};
  5.                     Stitcher stitcher = Stitcher.Create(Stitcher.Mode.Panorama);
  6.                     Mat pano = new Mat();
  7.                     var status = stitcher.Stitch(images, pano);
  8.                     if (status != Stitcher.Status.OK)
  9.                     {
  10.                         ShowMsg.Box("拼接异常(" + status.ToString() + "),请重试。", BoxType.Msg, 120, this);
  11.                         return;
  12.                     }
复制代码
得到了正确的结果:

 
 

来源:https://www.cnblogs.com/Uncle-Joker/archive/2023/05/05/17373754.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

举报 回复 使用道具