首页 星云 工具 资源 星选 资讯 热门工具
:

PDF转图片 完全免费 小红书视频下载 无水印 抖音视频下载 无水印 数字星空

linemod算法的C++原始代码

后端 2.61MB 11 需要积分: 1
立即下载

资源介绍:

opencv中linemod算法置于contribute库中,官方预编译的opencv库是不带这个库的。可实现实时的多角度多尺度模板匹配,同时带有原始论文。
# shape_based_matching update: **[fusion implementation to run faster!](https://github.com/meiqua/shape_based_matching/issues/77)** **[icp is also refined to be faster and easier to use](https://github.com/meiqua/shape_based_matching/issues/100)** [Transforms in shape-based matching](./Transforms%20in%20shape-based%20matching.pdf) [pose refine with icp branch](https://github.com/meiqua/shape_based_matching/tree/icp2D), 0.1-0.5 degree accuracy [icp + subpixel branch](https://github.com/meiqua/shape_based_matching/tree/subpixel), < 0.1 degree accuracy [icp + subpixel + sim3(previous is so3) branch](https://github.com/meiqua/shape_based_matching/tree/sim3), deal with scale error try to implement halcon shape based matching, refer to machine vision algorithms and applications, page 317 3.11.5, written by halcon engineers We find that shape based matching is the same as linemod. [linemod pdf](Gradient%20Response%20Maps%20for%20Real-TimeDetection%20of%20Textureless%20Objects.pdf) halcon match solution guide for how to select matching methods([halcon documentation](https://www.mvtec.com/products/halcon/documentation/#reference_manual)): ![match](./match.png) ## steps 1. change test.cpp line 9 prefix to top level folder 2. in cmakeList line 23, change /opt/ros/kinetic to somewhere opencv3 can be found(if opencv3 is installed in default env then don't need to) 3. cmake make & run. To learn usage, see different tests in test.cpp. Particularly, scale_test are fully commented. NOTE: On windows, it's confirmed that visual studio 17 works fine, but there are some problems with MIPP in vs13. You may want old codes without [MIPP](https://github.com/aff3ct/MIPP): [old commit](https://github.com/meiqua/shape_based_matching/tree/fc3560a1a3bc7c6371eacecdb6822244baac17ba) ## thoughts about the method The key of shape based matching, or linemod, is using gradient orientation only. Though both edge and orientation are resistant to disturbance, edge have only 1bit info(there is an edge or not), so it's hard to dig wanted shapes out if there are too many edges, but we have to have as many edges as possible if we want to find all the target shapes. It's quite a dilemma. However, gradient orientation has much more info than edge, so we can easily match shape orientation in the overwhelming img orientation by template matching across the img. Speed is also important. Thanks to the speeding up magic in linemod, we can handle 1000 templates in 20ms or so. [Chinese blog about the thoughts](https://www.zhihu.com/question/39513724/answer/441677905) ## improvment Comparing to opencv linemod src, we improve from 6 aspects: 1. delete depth modality so we don't need virtual func, this may speed up 2. opencv linemod can't use more than 63 features. Now wo can have up to 8191 3. simple codes for rotating and scaling img for training. see test.cpp for examples 4. nms for accurate edge selection 5. one channel orientation extraction to save time, slightly faster for gray img 6. use [MIPP](https://github.com/aff3ct/MIPP) for multiple platforms SIMD, for example, x86 SSE AVX, arm neon. To have better performance, we have extended MIPP to uint8_t for some instructions.(Otherwise we can only use half feature points to avoid int8_t overflow) 7. rotate features directly to speed up template extractions; selectScatteredFeatures more evenly; exautive select all features if not enough rather than abort templates(but features <= 4 will abort) ## some test ### Example for circle shape #### You can imagine how many circles we will find if use edges ![circle1](test/case0/1.jpg) ![circle1](test/case0/result/1.png) #### Not that circular ![circle2](test/case0/2.jpg) ![circle2](test/case0/result/2.png) #### Blur ![circle3](test/case0/3.png) ![circle3](test/case0/result/3.png) ### circle template before and after nms #### before nms ![before](test/case0/features/no_nms_templ.png) #### after nms ![after](test/case0/features/nms_templ.png) ### Simple example for arbitary shape Well, the example is too simple to show the robustness running time: 1024x1024, 60ms to construct response map, 7ms for 360 templates test img & templ features ![test](./test/case1/result.png) ![templ](test/case1/templ.png) ### noise test ![test2](test/case2/result/together.png) ## some issues you may want to know Well, issues are not clearly classified and many questions are discussed in one issue sometimes. For better reference, some typical discussions are pasted here. [object too small?](https://github.com/meiqua/shape_based_matching/issues/13#issuecomment-474780205) [failure case?](https://github.com/meiqua/shape_based_matching/issues/19#issuecomment-481153907) [how to run even faster?](https://github.com/meiqua/shape_based_matching/issues/21#issuecomment-489664586)

资源文件列表:

opencv-linemod.zip 大约有25个文件
  1. opencv-linemod/
  2. opencv-linemod/Gradient Response Maps for Real-TimeDetection of Textureless Objects.pdf 2.73MB
  3. opencv-linemod/MIPP/
  4. opencv-linemod/MIPP/math/
  5. opencv-linemod/MIPP/math/avx512_mathfun.h 600B
  6. opencv-linemod/MIPP/math/avx512_mathfun.hxx 20.2KB
  7. opencv-linemod/MIPP/math/avx_mathfun.h 1.56KB
  8. opencv-linemod/MIPP/math/avx_mathfun.hxx 22.86KB
  9. opencv-linemod/MIPP/math/neon_mathfun.h 1.44KB
  10. opencv-linemod/MIPP/math/neon_mathfun.hxx 9.14KB
  11. opencv-linemod/MIPP/math/sse_mathfun.h 1.63KB
  12. opencv-linemod/MIPP/math/sse_mathfun.hxx 21.26KB
  13. opencv-linemod/MIPP/mipp.h 43.54KB
  14. opencv-linemod/MIPP/mipp_impl_AVX.hxx 121.98KB
  15. opencv-linemod/MIPP/mipp_impl_AVX512.hxx 149.37KB
  16. opencv-linemod/MIPP/mipp_impl_NEON.hxx 93.69KB
  17. opencv-linemod/MIPP/mipp_impl_SSE.hxx 113.59KB
  18. opencv-linemod/MIPP/mipp_object.hxx 52.04KB
  19. opencv-linemod/MIPP/mipp_scalar_op.h 748B
  20. opencv-linemod/MIPP/mipp_scalar_op.hxx 6.04KB
  21. opencv-linemod/README.md 4.8KB
  22. opencv-linemod/Transforms in shape-based matching.pdf 115.06KB
  23. opencv-linemod/line2Dup.cpp 52.92KB
  24. opencv-linemod/line2Dup.h 10.01KB
  25. opencv-linemod/test.cpp 18.64KB
0评论
提交 加载更多评论
其他资源 pdf文档转换为word文档
在日常办公中,为了保持文件的格式,我们经常使用pdf的形式来传输文件,但是pdf很难对其进行编辑修改,我们常常需要将其转换为word格式
TwinCATAds-Sample06
TwinCAT3与C#-ADS通讯
scala-sdk-2.12.15
sdk-2.12.15版本的压缩配置:scala-sdk-2.12.15
CAN入门书中文版PDF
CAN入门书中文版PDF
CAN入门书中文版PDF
CAN入门书中文版PDF
CAN入门书中文版PDF
stm32小车.zip
stm32小车.zip
ElectroSmartCar_quad-main.zip
ElectroSmartCar_quad-main.zip
软件工程模块流程分析.zip
软件工程模块流程分析.zip
java深入理解多线程
Java多线程是并发编程中的一个重要概念,它允许程序在同一时刻执行多个任务。以下是对Java多线程的深入理解: 线程概述 基本概念:线程是操作系统能够进行运算调度的最小单位,一个进程可以包含多个线程。 特性:线程不拥有系统资源,只拥有一点必不可少的、能保证独立运行的资源。同一进程中的线程共享该进程的资源,但各自拥有独立的堆栈和局部变量。 线程创建与启动 创建方式:在Java中,可以通过继承Thread类或实现Runnable接口来创建线程。 启动方法:通过调用线程对象的start()方法来启动线程,这将导致run()方法被调用。 线程状态 线程在其生命周期中会经历新建态、就绪态、运行态、阻塞/等待/超时等待和死亡态等状态。 线程同步 同步问题:在多线程环境中,当多个线程访问共享资源时,可能会出现数据不一致和竞态条件等问题。 解决方法:使用synchronized关键字或锁机制(如ReentrantLock)来确保同一时间只有一个线程可以访问被同步的代码。 线程通信 Object类中的wait()、notify()和notifyAll()方法提供了一种线程间的通信方式。 高级
java深入理解多线程 java深入理解多线程 java深入理解多线程