首页 > 编程语言 >C#处理医学影像(四):基于Stitcher算法拼接人体全景脊柱骨骼影像

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

时间:2023-05-05 12:24:04浏览次数:45  
标签:Mat 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;
                    }

得到了正确的结果:

 

 

标签:Mat,C#,拼接,Stitcher,医学影像,影像
From: https://www.cnblogs.com/Uncle-Joker/p/17373754.html

相关文章

  • [Oracle] 收缩表,释放空间
    收缩段消除空间碎片的方法有两种:方法1:使用Move命令altertabletable_namemove注意:1)move操作会锁表。(如果是很小的表,可以在线做。如果是大表一定要注意,会长时间锁表,只能查询,影响正常业务运行)2)move操作会使索引失效,一定要rebuild。(因为move操作会改变一些记录的ROWI......
  • [Leetcode] 0697.数组的度
    697.数组的度点击上方标题跳转至leetcode题目描述给定一个非空且只包含非负数的整数数组 nums,数组的度的定义是指数组里任一元素出现频数的最大值。你的任务是在nums中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度。 示例1:输入:nums=[1,2,2,3,1]输......
  • React Native之JSX语法
    一、什么是JSXJSX即JavaScriptXML。一种在React组件内部构建标签的类XML语法。JSX为react.js开发的一套语法糖,也是react.js的使用基础。React在不使用JSX的情况下一样可以工作,然而使用JSX可以提高组件的可读性,因此推荐使用JSX。二、JSX的基本使用 2.1为什么使用JSX​原......
  • java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES/
    Java使用AES/CBC/PKCS7Padding加解密时会报错,因为原生JDK不支持。1.在jdk中的jre\lib\security修改java.security文件,替换security.provider.7=org.bouncycastle.jce.provider.BouncyCastleProvider2./jdk/jre/lib/ext下添加jar包bcprov-jdk15on-1.58.jar ......
  • AcWing 754. 平方矩阵 II
    AcWing754.平方矩阵II1.地址https://www.acwing.com/problem/content/756/2.题解#include<iostream>#include<cstdio>#include<cmath>usingnamespacestd;//每个元素的值为:各个元素下标相减的绝对值+1intmain(){intmatrix[102][102];intn;......
  • Oracle使用imp导入dmp文件
    dmp文件导入到Oracle数据库一般有impdp和imp,如果impdp不好用时,就需要使用到imp来进行数据导入。(1).创建用户这一步完全根据个人需要是否创建新的用户createuser[用户名]identifiedby[密码];(2).创建表空间在创建表空间前可以使用如下命令查看以往表空......
  • 将第三方的bean交给spring的IOC容器管理
    示例:比如要使用一个第三方的雪花算法1.先导入需要的依赖<dependency><groupId>wiki.xsx</groupId><artifactId>snowflake-spring-boot-starter</artifactId><version>1.2.2</version></depe......
  • 软件架构风格-黑板架构风格(Blackboard architecture)
    参考链接:https://cs.uwaterloo.ca/~m2nagapp/courses/CS446/1181/Arch_Design_Activity/Blackboard.pdfhttp://users.encs.concordia.ca/~gregb/home/PDF/soen6461_blackboard_arch.pdf......
  • 解决python配置环境变量后cmd窗口无法打开并弹出Microsoft store界面
    前言在一台新的机器上安装python并正确配置环境变量后,本来打算测试一下是否安装成功,结果在cmd窗口输入python执行后,没有出现版本信息,并会弹出Microsoftstore界面。反复检查了一下,环境变量确实已经正确配置了,但还是无法执行。后经查找资料解决了该问题,在此做下记录。......
  • jexcel_将excel数据导入到页面
    jexcel_将excel数据导入到页面    还需解决的课题:下载jszip.js和xlsx.js<%@PageLanguage="C#"AutoEventWireup="true"CodeFile="有效代码_将excel数据导入到网页.aspx.cs"Inherits="Default2"%><!DOCTYPEhtml><htmlxmlns="......