C#处理医学影像:基于Stitcher算法拼接人体全景脊柱骨骼影像
Posted 乔克灬叔叔
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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;
得到了正确的结果:
EmguCV使用Stitcher类来拼接图像
using System; using System.Windows; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using Emgu.CV; using Emgu.CV.CvEnum; using Emgu.CV.Structure; using Emgu.CV.UI; using Emgu.CV.Features2D; using Emgu.CV.ML; using Emgu.CV.Util; using Emgu.Util; using Emgu.CV.Face; using Emgu.CV.VideoSurveillance; using OpenTK; using OpenTK.Graphics.OpenGL; using OpenTK.Graphics; using Emgu.CV.Stitching; namespace EmguCVHist { public partial class Form1 : Form { public Form1() { InitializeComponent(); Image<Bgr, byte> a = new Image<Bgr, byte>("1.jpg"); Image<Bgr, byte> b = new Image<Bgr, byte>("2.jpg"); Image<Bgr, byte> c = new Image<Bgr, byte>("3.jpg"); Stitcher stitcher = new Stitcher(false); Mat outimg= new Mat(); try { stitcher.Stitch(new VectorOfMat(new Mat[] { a.Mat, b.Mat, c.Mat }), outimg); } catch(Exception ex) { MessageBox.Show(ex.Message); } imageBox1.Image = outimg; } } }
以上是关于C#处理医学影像:基于Stitcher算法拼接人体全景脊柱骨骼影像的主要内容,如果未能解决你的问题,请参考以下文章