【基于侧扫声呐和SFS方法的地形三维重构】(一)增益补偿和斜距校正

2023-05-16

本文主要参考文献如下

[1]王杰英. 侧扫声呐图像的三维重构[D].浙江大学,2018.

\qquad 这里先向学长表示感谢!

本文主要讲述了侧扫声呐原始图像需要进行的一些信号处理与图像处理步骤(增益补偿斜距校正,其他处理步骤会在接下来的章节进行介绍)

\qquad 有关侧扫声呐三维重构的全流程可以参考以下文章,它以南海沉船为例,详细地阐述了侧扫声呐SFS三维重构的全过程

[1]刘小菊,施祺,杨红强,周胜男.基于侧扫声呐影像的南海珊瑚礁沉船及周边地形重建[J].热带地理,2020,40(02):278-288.DOI:10.13284/j.cnki.rddl.003221.

\qquad 本文是在已经解析出XTF文件的基础之上进行的图像处理,关于XTF文件的解析可以参考文章

https://blog.csdn.net/SuperiorEE/article/details/123012392


一  原理回顾

\qquad 首先我们来回顾一下侧扫声呐(SSS)成像原理,由此引出我们的问题:为什么要对侧扫声图进行图像处理?
\qquad 侧扫声呐是通过向一个扇区发射声波并在遇到障碍物时发生反射的原理来识别地形。这其实就是一个简单的测距原理。侧扫声呐的接收器根据声波传回的早晚和强度,依次在侧扫声图上留下痕迹,如下图顶部。反射愈早的声波越先被接收到,因此会在靠左(但不是最左的位置),相应地,反射发生愈晚的声波就会在声图右侧留下痕迹。痕迹的强度(即明暗)与声音的回波强度有关,回波强度越强,声图该点就越亮。
在这里插入图片描述
\qquad 简单介绍之后我们就发现存在着这么几个问题:1.为什么声图的最左侧会一片漆黑(如下图所示)?
请添加图片描述
\qquad 事实上,我们把这部分区域叫做水柱区。因为侧扫声图上横向表示了声波返回时间的长短,几乎没有声波能在极短的时间内回来(除了微弱的水体反射),因此左侧接近一篇漆黑。而左侧漆黑与右侧有一个交界线,我们称之为海底线,海底线就是最早被接收器接收的强回波,应该是距离侧扫声呐最近的地方——垂直向下的海底(这里假设侧扫角可以覆盖到垂直方向),因此这条线就称为海底线。根据海底线我们就可以算出侧扫声呐距离海底的高度H(声波返回时间*声速),其实这也可以直接在xtf文件中解析出来(一般是联测的单波束声呐测算出来的),相关解析也见本人文章

https://blog.csdn.net/SuperiorEE/article/details/123012392


二 增益补偿

\qquad 我们知道,声波在水中会产生较为明显的水体吸收,这种吸收显然和距离有关。声波传输得距离越长,损失的能量就越大。我们通过对声图的分析,明显可以看到声图左侧(平距靠近声呐侧)偏亮,而右侧偏暗。因此为了消除这样的干扰,我们需要进行增益补偿。
\qquad 这里采用的是滑窗灰度增益补偿方法。主要内容可以见王杰英论文,核心公式如下,重叠的滑窗按照距离进行加权
在这里插入图片描述
\qquad 得到结果如下,增益补偿曲线和补偿之后的图片
请添加图片描述
请添加图片描述


三  斜距校正

\qquad 除此之外,我们发现,侧扫声图上从左到右是按照声波返回时间长短来计算的,因此侧扫声图横向的指标实际上是和斜距成正比的。这里斜距就定义为从侧扫声呐头到地形某处的直线距离(一般忽略微观地形起伏)。因此我们就会发现,要使横向反映的是横距而非斜距,就要进行斜距校正。一般来说,可以使用以下公式实现 X = L 2 − H 2 X=\sqrt{L^2-H^2} X=L2H2
\qquad 其中,L就是斜距,H是侧扫声呐到海底的高度,其获取方法见本章前文。
请添加图片描述
\qquad 我们发现斜距校正后还存在着一些问题,因为像素是离散的整数点,我们如果对其进行根号运算,由于非线性的关系,初步斜距校正后就会出现缝隙。根据王杰英的方法,我们对其进行3*3像素矩阵中周围8个点的均值作为中心黑点的亮度值,对其进行插值,可以得到以下结果。
请添加图片描述
\qquad 得到这样的结果已经可以初步满足我们的处理要求了,可以直接放入我们选择的SFS模型中取,进行高度反演了。


四 核心代码

%功能描述:通过滑窗平均的方法对图像进行均值明度统一,从而抵消水体吸收的干扰。
%输入:E0,XTF原始归一化强度方阵
%输出:滑窗行向量(代表着E0在横坐标上的增益)
%使用示例:
% A=Amplify_get1(E);
% A2=repmat(A,range,1);
% E=E.*A2;
%公式推导:浙江大学王杰英论文
%验证时间:2022年4月2日15:44:56
function Amplify_C=Amplify_get1(E0) %E0 is selected aera with smooth surface
    n=3;%滑窗数,不要修改
    [length,width]=size(E0);%要求E0宽度是4倍数像素
    window_length=fix(width./(n-1));
    seperate_length=fix(window_length./2);
    Amplify_C=0.*ones(1,width);%初始化
    threshold=0.05; %明度低于此不计入
    M_acc=[0 0 0 0];
    M_dark=[0 0 0 0];
    point_num_origin=window_length*length;%每块窗口点的个数
    for k=1:4
        acc_count=0;
        dark_count=0;%黑色点计数
        %求M1,M2,M3和M
        for i=(k-1)*seperate_length+1:k*seperate_length
            for j=1:length
                if(E0(j,i)>threshold)
                    acc_count=acc_count+E0(j,i);
                else 
                    dark_count=dark_count+1;
                end
            end
        end
        M_acc(k)=acc_count;
        M_dark(k)=dark_count;
    end
    point_num_perwindow=[point_num_origin-M_dark(1)-M_dark(2) ...
        point_num_origin-M_dark(2)-M_dark(3) ...
        point_num_origin-M_dark(3)-M_dark(4)];%每个窗口可用点的个数
    acc_count_perwindow=[M_acc(1)+M_acc(2) M_acc(2)+M_acc(3) M_acc(3)+M_acc(4)];
    M_ave=acc_count_perwindow./point_num_perwindow;
    M_total=sum(acc_count_perwindow)/sum(point_num_perwindow);
    %整图求和得到C,公式见论文
    for i=1:width
        %求和
        if(i<=1*seperate_length)
            Amplify_C(i)=M_total./M_ave(1);
        elseif(i<=2*seperate_length)
            Amplify_C(i)=(M_total./M_ave(2))*(i/seperate_length-1)+...
                (2-i/seperate_length)*(M_total./M_ave(1));
        elseif(i<=3*seperate_length)
            Amplify_C(i)=(M_total./M_ave(3))*(i/seperate_length-2)+...
                (3-i/seperate_length)*(M_total./M_ave(2));
        else
            Amplify_C(i)=M_total./M_ave(3);
        end
    end
end
%功能描述:对图像进行斜距校正和插值
%输入:E1,增益补偿后的E,和H,海底线对象的像素数目,也即像素高度
%输出:斜距校正后的E
%使用示例:见test_slant
% H=277-5;防止溢出,需要减去5
% E_slant_correct=Slant_correct(E,H);
% figure('name','斜距校正的图像');
% imshow(E_slant_correct);
%公式推导:浙江大学王杰英论文
%验证时间:2022年4月3日15:36:09
function E_slant_correct=Slant_correct(E1,H)%E1是增益补偿之后的矩阵,H单位是像素,是海底线对应的像素高度
    [length,width]=size(E1);
    lst=H:width;%初始化
    for i=H:width
        lst(i-H+1)=sqrt(i.^2-H.^2)+1;
    end
    disp(lst);
    [p_,lst_len]=size(lst);
    E2_width=fix(lst(lst_len));
    E2=0.*ones(length,E2_width);
    for i=1:length
       for j=1: lst_len
           E2(i,fix(lst(j)))=E1(i,j-1+H);
       end
    end
    figure('name','初步补偿图像')
    imshow(E2);
    %缝隙消除
    [E2_length,E2_width]=size(E2);
    for i=2:E2_length-1
       for j=2:E2_width-1
           if(E2(i,j)==0)
              acc=0;
              count=0;
              if(E2(i-1,j-1)~=0)
                  acc=acc+E2(i-1,j-1);
                  count=count+1;
              end
              if(E2(i-1,j)~=0)
                  acc=acc+E2(i-1,j);
                  count=count+1;
              end
              if(E2(i-1,j+1)~=0)
                  acc=acc+E2(i-1,j+1);
                  count=count+1;
              end
              if(E2(i,j-1)~=0)
                  acc=acc+E2(i,j-1);
                  count=count+1;
              end
              if(E2(i+1,j+1)~=0)
                  acc=acc+E2(i+1,j+1);
                  count=count+1;
              end
              if(E2(i,j+1)~=0)
                  acc=acc+E2(i,j+1);
                  count=count+1;
              end
              if(E2(i+1,j-1)~=0)
                  acc=acc+E2(i+1,j-1);
                  count=count+1;
              end
              if(E2(i+1,j)~=0)
                  acc=acc+E2(i+1,j);
                  count=count+1;
              end
              %临近点计算
              %赋值
              if(count~=0)
                E2(i,j)=acc/count;
              end
           end
       end
    end
    E_slant_correct=E2;
    %%
    figure('name','斜距校正的图像');
    imshow(E_slant_correct);
end
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【基于侧扫声呐和SFS方法的地形三维重构】(一)增益补偿和斜距校正 的相关文章

  • navigation 调试 -2- 小车的配置问题

    1 确定传感器 xff08 sensors xff09 在小车的位置 影响 xff1a 导航 xff0c 建图 a 前提是使用kobuki机器人模板 xff0c 传感器使用深度 43 rgb摄像头 xff08 例如kinect xff09
  • Building ceres-solver fail with eigen3 "error: no type named ‘Literal’ in ‘struct Eigen::NumTraits"

    以前编译ceres solver没有出现过问题 xff0c 最近在编译时报出一个问题 xff1a 75 Building CXX object internal ceres CMakeFiles jet test dir jet test
  • c++中nan,inf详解

    nan xff1a not a number 非数字 注意事项 xff1a 对负数开方sqrt 1 0 对负数求对数 log 1 0 0 0 0 0 0 0 inf inf inf inf inf这些操作都会得到nan 0 0会产生操作异常
  • 经纬度的多种格式和转换方式

    格式 方式格式单位用途 注意事项度 d dd ddddddd度百度地图和google地图度 分 d ddmm mmmmmmdd单位是度 xff0c mm mmmmmm单位是分GPGGA度 分 秒 d ddmmss ssdd单位是度 xff0
  • 【Apollo】supervisor组件的应用

    Supervisor 一个client server系统 xff0c 用来控制一系列进程在UNIX like操作系统上 supervisord server xff1a 响应client端的命令 xff0c 控制进程启动 xff0c 停止
  • ubuntu 无登录界面,内核出错

    内核错误的原因 pc出现没有正常关机而直接下电 破坏内核文件 就有可能造成内核错误 在升级内核时 强制pc下电 也有可能造成内核错误 问题现象 显示ubuntu背景偏彩色的图片 但不会弹出登录窗口 解决方式 重新上电按下ESC 进入ubun
  • rplidar ros sdk 无原因挂死情况分析解决

    今天在rplidar sdk上遇到个问题 怀疑以前也遇到过 这里记录一下 问题环境 rplidar A3 43 ubuntu16 04 问题现象 运行rplidar sdk 无原因程序死掉 无错误日志 问题定位及解决 想查看core的堆栈信
  • 使用wget命令https资源下载不下来的解决办法

    使用wget命令下载https资源但是下载不下来 xff0c 这是可以将wget https xxxxx 修改为 wget http xxxxx 如果liunx网络不稳定 xff0c 可能会出现断了的情况 xff0c 可以开启断点续传的功能
  • (无人机方向)ros小白学习之路(四)ROS通信机制---服务通信

    文章目录 前言ROS服务通讯定义应用场景实现0 Server注册1 Client注册2 ROS Master实现信息匹配3 Client发送请求4 Server发送响应 服务通信自定义srv创建功能包 然后创建srv文件夹 再创建Addin
  • 修改双系统(win10+ubuntu)启动顺序和启动时间

    安装了ubuntu16 04后 xff0c GNU GRUB引导的默认启动项是ubuntu xff0c 如果希望默认启动项是windows xff0c 修改方法如下 xff1a step1 进入Ubuntu系统 xff0c 打开终端 xff
  • 虚拟帧缓冲驱动

    17 2 2 虚拟帧缓冲驱动 嵌入式Linux系统开发全程解析 是一本全面介绍嵌入式Linux开发的专著 xff0c 书中涵盖了程序生成工具 调试工具 引导加载器 Linux系统结构 Linux内核 驱动程序 用户空间编程 用户空间中间件等
  • 神经网络每次输出不一样,神经网络输出值相同

    BP神经网络最后得出的误差很大 1 看看是不是训练效果好 xff0c 预测效果不好 如果是这样那就是过拟合 网上搜搜有很多解决过拟合的方法 2 如果训练和预测都不好 xff0c 那就是模型有问题 可能原因是 xff08 1 xff09 数据
  • 深度神经网络应用实例

    深度神经网络目前有哪些成功的应用 深度学习最成功的应用是在音视频的识别上 xff0c 几乎所有的商用语音识别都是深度学习来完成的 其次深度学习应用最成功的领域就是图像识别 xff0c 目前识别准确率已经超越人类 深度学习成了图像识别的标配
  • 研究pixhawk的makefile的结构(-)

    首先研究 xff50 xff49 xff58 xff48 xff41 xff57 xff4b 的 xff4d xff41 xff4b xff45 xff46 xff49 xff4c xff45 的结构是怎样的 方便以后开发测试 xff11
  • 制作ROS移动机器人地盘

    制作ROS移动机器人地盘 摘要概述硬件需求车体设计电路设计程序设计PID控制轮速 摘要 本教程讲述如何利用扫地机轮子制作ROS移动机器人地盘 概述 原本不打算自己造轮子的 xff0c 但是网上的移动机器人地盘要么巨贵 对于学生党 xff0c
  • Lumia520刷安卓教程

    Date 2017 09 02 Author SuperDeveloper Descreption install android on luima 520 devices Email na1206 64 live com 警告 本教程只适
  • openwrt编译及第一个安装包教程

    Date 2017 03 14 Made SuperDeverloper Email na1206 64 live com Target For mt7688 based board 说明 xff1a 本人在学习过程中走了不少弯路 xff0
  • turtlebot3 Slam+nvigation仿真 ROS-lunar

    Date 2017 09 06 Author SuperDeveloper Description Slam simulation 说明 xff1a 1 Slam 初学笔记 xff0c 搭建slam仿真环境 xff1b 2 文章里的连接可能
  • 基于NVIDIA Xavier NX(ubuntu20.04)的Optitrack视觉定位 PX4+ros noetic(实物运行记录)

    提示 xff1a 文章写完后 xff0c 目录可以自动生成 xff0c 如何生成可参考右边的帮助文档 文章目录 前言一 xff1a 硬件准备两种界面化显示的方式无线连接有线连接 二 xff1a 软件准备1 远程登录软件 NoMachine2
  • ros机器人搭建总纲

    author xff1a superDeveloper date 2017 11 29 type note 近期准备搭建一个ROS机器人平台 xff0c 建立此博客记录搭建过程以及相关问题的解决办法 xff0c 作为笔记 xff0c 亦供相

随机推荐

  • ros gmapping 运行错误:Assertion 'beams<LASER_MAXBEAMS' failed>

    在使用真实激光器发布数据的时候 xff0c 出现了 Laser is mounted upward警告 xff0c 以及slam gmapping tmp buildd ros hydro openslam gmapping 0 1 0 2
  • realloc():invalid next size....错误

    Author SuperDeveloper Date 2018 1 2 在程序中使用了realloc函数 xff0c 更改结构体数组的大小 xff0c 错误代码如下 xff1a struct point span class hljs su
  • git简单命令笔记

    这是一篇关于git的使用笔记 xff0c 刚刚开始使用git 1 创建git本地仓库 xff1a 在你需要版本控制的项目Project根目录下右键点击Git Bash here执行git init 然后在该目录下生成 一个 git的隐藏文件
  • 源码编译Boost库的正确姿态

    源码编译Boost库的正确姿态 写在前面step 1 step 2 step 3 step4 写在前面 项目需要编译pcl库到arm平台 xff0c 交叉编译Boost xff0c Eigen3 Flann 之后再编译pcl库的时候总是报错
  • 第一讲、四旋翼的整体控制方案

    各位朋友 xff0c 我们工作室以后会长期更新一些飞行器干货 xff0c 本部分先介绍四旋翼的整体控制方案及相关设计 控制系统的框架如下 xff0c 借鉴网上来源图片 xff0c 传感器主要是姿态传感器 xff0c 对于大四轴而言 xff0
  • 网页中屏蔽鼠标右键、Ctrl+N、Shift+F10

    lt script language 61 34 Javascript 34 gt 屏蔽鼠标右键 Ctrl 43 N Shift 43 F10 F5刷新 退格键 屏蔽F1帮助 function window onhelp return fa
  • asp.net上一页下一页的部分代码

    lt asp linkbutton id 61 34 btnFirst 34 nclick 61 34 PagerButtonClick 34 runat 61 34 server 34 CommandArgument 61 34 0 34
  • Visual C# 编程操作Excel

    Visual C 编程操作Excel 2004 08 20 作者 xff1a 邵回祖 出处 xff1a ahcit http www yesky com SoftChannel 72342380468109312 20040819 1844
  • C#保存图片到IMAGE字段

    byte FileByteArray System IO MemoryStream ImageStream this sqlConnection1 ConnectionString 61 strConn try if this sqlCon
  • Android-蓝牙sco通话

    APP调用AudioManager startBluetoothSco frameworks base media java android media AudioManager java public void startBluetoot
  • Docker启动时的报错汇总

    八个Docker常见故障 https mp weixin qq com s 2GNKmRJtBGHhUyVBRbRgeA 八个Docker常见故障 报错一 xff1a error initializing graphdriver Docke
  • 利用JAVA操作EXCEL文件

    利用JAVA操作EXCEL文件 转载自 xff1a www csdn net 2003 年 1 月 在开源世界中 xff0c 有两套比较有影响的API可供使用 xff0c 一个是POI xff0c 一个是jExcelAPI 其中jExcel
  • 网站不能更新,错误 '80004005'

    网站数据转移到了另一台服务器 后台数据不能更新 因为程序原因也无错误信息报出 数据库为ACCESS数据库 初步估计是不是数据库只读或是NTFS的权限问题 对数据库目录添加EVERYONE和IIS的来宾帐户写入和修改权限 还是不能更新数据 最
  • vb6实现程序延时的几种方法

    VB6在开发发贴机时 提交数据要用到延时程序 让程延时和等待 从网上找了三种方法 三种方法以最后一种最好用 第一种如果不DOEVENTS的话 会使人感觉程序无反应一样 有以下方法 xff1a 1 使用Windows API函数Sleep 新
  • 初识SEO,SEO学习笔记一

    SEO 是一种方法 更是一种思想 如果只是为了关键字 那他就只是一种工具 一种方法 工具和方法总有过时的时候 而思想 则可以通达 可以明朗 可以提升层次 应当明的有关SEO的几个概念 目标关键词和长尾关词 一直以来 对这个概念都是只能意会
  • 【信号分析与处理】Matlab运算带有冲激函数的积分

    syms t span class token punctuation span span class token comment 定义变量 span span class token keyword int span span class
  • 【计算方法】Python二分法求解方程

    span class token comment 二分法求方程零点 span span class token keyword from span math span class token keyword import span span
  • 【信号分析与处理】-离散信号分析-MATLAB stem函数的使用

    1 stem xff08 y xff09 1 1如果y是向量 xff0c 则从1开始每隔单位长度描点 行向量列向量描点效果相同 e g x 61 1 2 3 4 3 3 2 1 5 stem x 1 2如果y是一个n m矩阵 xff0c 则
  • 基于Shape From Shading(SFS)原理的侧扫声呐海底三维重建项目进度记录

    quad 本文主要用于记录 海底三维重建算法研究 课题毕业设计的进度与内容概括 quad 2021 12 24
  • 【基于侧扫声呐和SFS方法的地形三维重构】(一)增益补偿和斜距校正

    本文主要参考文献如下 1 王杰英 侧扫声呐图像的三维重构 D 浙江大学 2018 qquad 这里先向学长表示感谢 xff01 本文主要讲述了侧扫声呐原始图像需要进行的一些信号处理与图像处理步骤 增益补偿与斜距校正 xff0c 其他处理步骤