meiqua / shape_based_matching

try to implement halcon shape based matching, refer to machine vision algorithms and applications, page 317 3.11.5, written by halcon engineers
BSD 2-Clause "Simplified" License
1.23k stars 480 forks source link

设置shapes.angle_step的数值由1->0.1,匹配速度降低了。 #109

Open wly2020-robot opened 3 years ago

wly2020-robot commented 3 years ago

你好,meiqua.我用的是你开源的实例shape_based_matching_fusion_by_hand。由于考虑到匹配角度精度问题,我将angle_test(“train”)函数中的一行代码由shapes.angle_step=1改了shapes.angle_step=0.1;训练和测试图片分辨率是:2048*2448; 运行angle_test("test");运行时间由0.087616s提升到0.16139s;请问这是正常的吗?运行速度能优化吗?运行环境:VS2017+OPENCV3.4.9+WIN10. image image

meiqua commented 3 years ago

700万像素,fusion time 70ms是正常的,之前的测试也差不多;
角度0.1度模板量增加10倍,matching时间也增加8倍左右说明正常;不过没必要这么小的步长,要提高精度可以用ICP,可以参考这个issue

wly2020-robot commented 3 years ago

非常感谢!看了相关连接,都是ICP提速的,ICP能提高角度检测精度吗?大概精度可以达到多少呢?谢谢。

meiqua commented 3 years ago

ICP本来就是提高精度的,那个链接的意思是ICP的速度比以前快了;图像边缘清晰的话,精度可以到亚像素,角度估计也有0.1度吧

wly2020-robot commented 3 years ago

谢谢!我用的是shape_based_matching-icp_refined实例;将函数angle_test中的line2Dup::Detector detector(128, {4, 8})改成line2Dup::Detector detector(128, {8, 16});将 int stride = 16;改成 int stride = 32;将lin2Dup.h中的Detector(int num_features, std::vector T, float weak_thresh = 30.0f, float strong_thresh = 60.0f);改成Detector(int num_features, std::vector T, float weak_thresh = 15.0f, float strong_thresh = 30.0f);然后训练运行程序检测结果如下: image 训练图片: image 检测图片: image 现在检测一张图片花费时间400多ms,检测角度跨度比较大,请问这个测试正常吗?可以优化运行速度和角度检测吗?谢谢

meiqua commented 3 years ago

这个是无fusion版本,应该正常

Phouking commented 2 years ago

你好,meiqua.我用的是你开源的实例shape_based_matching_fusion_by_hand。由于考虑到匹配角度精度问题,我将angle_test(“train”)函数中的一行代码由shapes.angle_step=1改了shapes.angle_step=0.1;训练和测试图片分辨率是:2048*2448; 运行angle_test("test");运行时间由0.087616s提升到0.16139s;请问这是正常的吗?运行速度能优化吗?运行环境:VS2017+OPENCV3.4.9+WIN10. image image

你好,想请教一下,我是按照说明配置了opennphe avx2,运行环境是win10 + vs2019 +opencv3.5.3,200w图片配准耗时为70-80ms。500W图片需要160ms,是说明里的2倍。请问,这种情况你遇到过吗?谢谢 image