Skip to content

Repository files navigation

Shape-Based Matching

基于梯度特征点(LINE-MOD)和边缘轮廓(Chamfer Matching)的模板匹配库。

两种匹配方法

方法 文件 原理
梯度特征点 line2Dup.h/cpp LINE-MOD / 梯度响应图,适合弱纹理物体
边缘轮廓 contour_match.h/cpp Chamfer Matching + 距离变换,类似 Halcon 轮廓匹配

环境要求

  • Visual Studio 2022+ (或 2026)
  • CMake 3.10+
  • OpenCV 4.x(C++ SDK)
  • 有 MIPP (SIMD) 可选

快速开始

1. 安装 OpenCV C++ SDK

从 https://opencv.org/releases/ 下载 Windows 版,解压到 D:\opencv。

2. 构建

# 使用 VS 的 CMake 集成(推荐)
# 文件 -> 打开 -> CMake -> 选择 CMakeLists.txt
# 确保 CMakePresets.json 中 OpenCV_DIR 指向你的 opencv/build 路径

# 或命令行
cmake -B build -G "Visual Studio 18 2026" -A x64 ^
    -DCMAKE_BUILD_TYPE=Release ^
    -DOpenCV_DIR=D:/opencv/build/x64/vc16/lib
cmake --build build --config Release

3. 运行

# 梯度特征点匹配 (case3 - 回形针)
build\Release\shape_based_matching_test.exe

# 轮廓匹配 (case5 - 回形针)
# 编辑 test.cpp main() 切换 case3_test 和 case5_test

测试用例

目录 说明
test/case0/ 圆形缩放匹配
test/case1/ 旋转匹配 (LINE-MOD)
test/case2/ 噪声测试
test/case3/ 回形针匹配 (LINE-MOD) + 自带测试图
test/case5/ 回形针匹配 (轮廓法)

梯度特征点使用

line2Dup::Detector detector(64, {4, 8});

// 训练
detector.addTemplate(template_img, "my_class", mask);
detector.writeClasses("templates_%s.yaml");

// 匹配
detector.readClasses({"my_class"}, "templates_%s.yaml");
auto matches = detector.match(test_img, 0.85f, {"my_class"});

轮廓匹配使用

contour_match::ContourDetector detector;

// 训练
detector.addTemplate(template_img, "my_class", mask, 40, 120, 500);
detector.writeClasses("contour_templates_%s.yaml");

// 匹配
detector.readClasses({"my_class"}, "contour_templates_%s.yaml");
auto matches = detector.match(test_img, 0.55f, {"my_class"});

核心改动

相比原始 shape_based_matching:

  • 适配 Windows + Visual Studio 2026 (MSVC)
  • 新增轮廓匹配 (contour_match)
  • 得分归一化 0-1
  • 每位置最优角度去重
  • CMakePresets.json 一键 VS 配置

About

特征点模板匹配和轮廓匹配学习,借助于前人和AI。

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages