Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 

Repository files navigation

SSS-Detection

基于侧扫声纳(Side-Scan Sonar)数据的水下异物自动识别系统。

项目简介

侧扫声纳是水下探测的核心手段 —— 船拖拽"拖鱼"向两侧发射扇形声波束,接收海底回波强度生成瀑布图。本项目实现了一套完整的 信号调理 → 恒虚警检测 → 阴影分析 → 分类识别 流水线,能自动从声纳图像中检测并识别水雷、沉船、管线等水下目标。

核心原理

侧扫声纳图像中,突出物体呈现高亮+声学阴影的特征对:

  • 高亮区 — 物体表面反射声波,回波强度高
  • 声学阴影 — 物体遮挡后方海底,形成暗区

系统利用 CFAR(恒虚警)检测提取这两个区域,再通过空间配对过滤虚警、提高检测置信度。

系统架构

原始声纳数据 (PNG/TIFF/XTF)
        │
        ▼
┌──────────────────┐
│  1. 预处理模块    │  TVG增益补偿 / 斜距校正 / 去噪 / 海底线跟踪
└──────┬───────────┘
       │
       ▼
┌──────────────────┐
│  2. 目标检测模块  │  CFAR+阴影配对 / 形态学滤波 / 深度学习(YOLOv8)
└──────┬───────────┘
       │
       ▼
┌──────────────────┐
│  3. 分类识别模块  │  规则分类 / SVM / CNN → 水雷·沉船·管线·礁石·掩埋物
└──────┬───────────┘
       │
       ▼
┌──────────────────┐
│  4. 结果输出模块  │  可视化叠加图 + JSON检测报告
└──────────────────┘

快速开始

安装依赖

pip install numpy opencv-python scipy scikit-image Pillow

可选依赖:

pip install ultralytics   # YOLOv8 深度学习检测
pip install joblib        # SVM 模型加载

跑演示(无需真实数据)

cd sss_detection
python demo.py

这会生成 600×400 的模拟声纳图像(含散斑噪声 + 5 个模拟异物),运行完整流水线,结果保存到 ./output/

处理真实数据

# 单张图像
python main.py -i data/sonar.png

# 批量处理
python main.py -i "data/*.png" --batch

# 指定检测方法
python main.py -i data/sonar.xtf --method morphology

# 深度学习(需先训练/下载模型)
python main.py -i data/sonar.png --method deep_learning --dl-model yolov8_sonar.pt

# 完整参数
python main.py -i data/sonar.png \
    --altitude 12.0 --beam-angle 55 \
    --min-shadow 30 --min-highlight 20 \
    --classifier svm --svm-model svm_model.joblib

目录结构

sss_detection/
├── main.py           # 主入口 + 命令行参数解析
├── demo.py           # 演示脚本(生成模拟数据测试流水线)
├── config.py         # 所有可配置参数(预处理/检测/分类)
├── loader.py         # 数据加载(支持PNG/TIFF/XTF/NPY格式)
├── preprocessing.py  # TVG增益 + 斜距校正 + 去噪 + 海底线跟踪
├── detector.py       # CFAR检测 + 阴影-高亮配对 + 形态学 + 深度学习
├── classifier.py     # 基于规则/SVM/CNN的目标分类
├── visualize.py      # 检测框绘制 + 报告生成 + 交互显示
└── requirements.txt  # 依赖清单

支持的检测方法

方法 命令 特点
CFAR + 阴影配对 (默认) --method cfar_shadow 最稳健,无需训练数据,适合大多数场景
形态学滤波 --method morphology 快速,基于顶帽/黑帽变换,适合均匀背景
深度学习 --method deep_learning 精度最高,依赖YOLOv8,需要标注数据

可识别的目标类别

类别 判断依据
🧨 水雷类 (mine_like) 小尺寸 (<3m)、高亮-阴影配对清晰、阴影细长
🚢 沉船类 (wreck_like) 大尺寸 (>5m)、高亮区面积大
🔧 管线类 (pipe_like) 细长线性目标、沿特定方向延伸
🪨 礁石类 (rock_like) 孤立高亮、无规则形状、阴影短
📦 掩埋物 (buried_object) 仅见阴影、未见高亮的可疑目标

预处理步骤说明

声纳原始数据在检测前经过以下信号调理(类似通信接收机前端):

  1. TVG 增益补偿 — 补偿声波随距离的指数衰减,增益函数 G(r) = e^(α·r)
  2. 斜距校正 — 将斜距映射到地距:s = √(r² - h²),经插值重采样到均匀网格
  3. 去噪 — 双边滤波保留边缘同时抑制散斑噪声(乘性噪声)
  4. 海底线跟踪 — Sobel 梯度检测定位海底线,遮蔽无效的水柱区

输出说明

运行后 ./output/ 目录生成:

  • *_report.png — 原始图+检测结果并排对比报告
  • *_detections.json — 结构化检测数据(bbox、置信度、类别、特征)

JSON 格式示例:

{
  "num_detections": 5,
  "detections": [
    {
      "bbox": [120, 200, 15, 30],
      "centroid": [127.5, 215.0],
      "area": 450.0,
      "confidence": 0.85,
      "class_name": "mine_like",
      "features": {
        "shadow_area": 200.0,
        "highlight_area": 150.0,
        "contrast": 0.62
      }
    }
  ]
}

输入格式

  • PNG / TIFF / JPEG — 通用图像格式
  • XTF — 声纳行业标准格式(Extreme Triton Format),支持 Rev 26+,自动解析文件头→Ping头→通道头→采样数据
  • NPY / NPZ — NumPy 数组

License

MIT

About

侧扫声纳(Side-Scan Sonar)水下异物自动识别系统 — 信号调理→CFAR检测→阴影配对→分类识别的完整流水线

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages