基于侧扫声纳(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.joblibsss_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) | 仅见阴影、未见高亮的可疑目标 |
声纳原始数据在检测前经过以下信号调理(类似通信接收机前端):
- TVG 增益补偿 — 补偿声波随距离的指数衰减,增益函数 G(r) = e^(α·r)
- 斜距校正 — 将斜距映射到地距:s = √(r² - h²),经插值重采样到均匀网格
- 去噪 — 双边滤波保留边缘同时抑制散斑噪声(乘性噪声)
- 海底线跟踪 — 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 数组
MIT