DennisLiu1993 / Fastest_Image_Pattern_Matching

C++ implementation of a ScienceDirect paper "An accelerating cpu-based correlation-based image alignment for real-time automatic optical inspection"
BSD 2-Clause "Simplified" License
859 stars 205 forks source link

关于测试中,咨询调试处理 #17

Closed cheny00 closed 1 year ago

cheny00 commented 2 years ago

Good Job 感谢博主分享与解答 (PS:之前用旧的code由于种种原因,未能调通,昨天又重新下载后很快就调试出结果了\\^_^//)

采用最新的code,测试过程中,如何显示检测时间,以及右下角的鼠标位置信息? 这里的检测时间,是代表哪些环节?还是说是从检测图像读取到目标显示的所有时间? image

DennisLiu1993 commented 2 years ago
m_statusBar.SetPaneInfo (0, indicators[0], SBPS_NOBORDERS, 150);//设置状态栏的宽度
m_statusBar.SetPaneInfo (1, indicators[1], SBPS_STRETCH, 200);
m_statusBar.SetPaneInfo (2, indicators[2], SBPS_STRETCH, 200);
m_statusBar.SetPaneInfo (3, indicators[3], SBPS_STRETCH, 200);

這幾行調整一下,第四個參數是狀態欄的寬度

檢測時間代表純執行時間,從建立金字塔到取得所有結果,沒有包含檔案讀寫

cheny00 commented 2 years ago

你好,博主,检测时间可以观察了 1 检测时间 1.1 不包括检测图像读取加载吗? 1.2 若有预处理,是否也不计时在内? 1.3 在线测试,模板图像在这里仅加载一次,且不计时在内?

2 模板图像获取,需要做哪些人为处理,才能获得较为理想的模板信息呢?

3 目前测试与halcon相比,采用1280X960检测图像和640X640模板图像,整体效果还可以 3.1 一般定位在x和y方向各存在±1像素以内的偏差,角度存在1°以内的偏差,但也存在较大定位偏差;有什么方式可以增强定位精度的方式?比如2中对模板图像进行人为处理等。 3.2 参数设置,目标数目1、最大重叠率0、得分0.9、角度范围[-10,10],开SIMD和次像素估计,耗时45-65ms(处理器i7-12700H,2.7GHz);该耗时是否在合理预期范围?耗时波动20ms由哪些因素影响?能否进一步加速缩短耗时? image

4 最近打算进一步研究您发的论文和该方案,在方案上如何快速梳理流程和原理,您有哪些建议吗?


感谢博主近些天的帮助与指导 (ʃƪ ˘ ³˘)啾❣。・゚♡

DennisLiu1993 commented 2 years ago

感謝測試 1-1 不包含加載 1-2 我沒有做預處理,這可能是Halcon比較準的原因 1-3 是的

2 我不知道有什麼方法比較好,論文中也沒看過 3-1 老實說我沒招了 3-2 波動20應該是你的CPU有在做其他事情,加速部分你可以詢問 @githublqs,他跟我討論很多,只是我太忙了沒時間弄

PS 那篇論文不是我寫的,有些東西我也看不懂,例如: 最高分要是在3*3的邊界我就無法處理。 不過作者開了一間公司,裡面有軟體可以下載來測試,他的軟體用亞像素的確是變準的,我的卻沒有

cheny00 commented 2 years ago

感谢回复 1 关于定位结果的询问,采用圆形模板匹配检测图像

PCL_temp PCL

1.1 旋转范围为0°时,测试定位(x,y)均为像素级整数信息,如何获取亚像素级的定位结果呢?

image

1.2 旋转范围设置非0°时,可以获取亚像素级的定位结果;但以当前设置1时(2°的范围),存在超出该范围的定位角度结果,造成这种现象可能的因素是哪些,有什么解决方法吗? (PS:还是说,我对Tolerance参数设置角度的理解有误,那应该如何理解?)

image

2 关于论文与本源码 2.1 在模板匹配领域里,您有哪些认为不错的论文或是检索关键词等资料信息,能否提供指导一下 (PS: Maybe 我将要在这一方面长期钻研了) 2.2 本源码工程,如何梳理和研究更加高效,能否提供一下脉络或线索

DennisLiu1993 commented 2 years ago

1.1 0度沒有角度資訊了,用一般二維的方法 1.2 取決於我對於角度搜索範圍的定義: 上一層金字塔的匹配角度+-角度步長,在金字塔比較下層,通常角度步長會>2度

dAngleStep = atan (2.0 / max (pTemplData->vecPyramid[iLayer].cols, pTemplData->vecPyramid[iLayer].rows)) * R2D;
for (int i = -1; i <= 1; i++)
    vecAngles.push_back (dMatchedAngle + dAngleStep * i);

2.1 最終你還是要朝Shape Based Matching的,NCC適用的範圍比較少。Github-meiqua 2.2 加速可以朝幾個方向:

  1. GetNexMaxLoc (),改為分區域計算min max值,塗黑後在重新計算有被影響到的區域。這對小模板提速效果明顯
  2. cv:: matchTemplate (),中大模板的計算為FFT,修改OpenCV源碼讓模板的FFT可以不用重新計算
  3. A real‑time two‑stage and dual‑check template matching algorithm based on normalized cross‑correlation for industrial vision positioning.pdf
cheny00 commented 2 years ago

1.1 那这样理解是否合适:由于0°没有角度信息,使得3X3X3二项式插值无法实现,从而只有像素级的定位结果。

1.2.1 Tolerance的参数物理含义是什么,不是设置检测图像的旋转范围吗? 1.2.2 右下窗口返回的Angle是模板对应检测目标的实际物理角度信息,通过各层金字塔的匹配角度+角度步长确定?

2.1 测试了一下该博主的based与subpixel(https://github.com/meiqua/shape_based_matching/tree/subpixel)

2.1.1 发现subpixel创建检测图像的响应表耗时是based的一倍左右,这可能是进行了icp处理后产生的效果,您知道icp为什么会造成近一倍的耗时增加吗? 2.1.2 对该subpixel响应表创建过程,有哪些可尝试的改进方向? 2.1.3 观察了一下模板特征点的筛选与确定,在距离约束与nms作用下,发现对特征点拾取分布比较均匀,但是对于部分细小的结构/纹理特征产生了消除或抑制的影响;除非增加大量的特征点数量,但这样并非一种较好的方式,而且增加特征点数目也导致匹配结果与效果下降。我认为对于模板匹配而言,图像目标的特征性信息对匹配效果有很大的影响,请问您有哪些方式或想法可以更加有效的提取出局部细小的结构/纹理特征?

2.2 对于模板匹配技术已经发展几十年,很多商业软件也是从当初的技术与思想上发展与演变过来的,对于Halcon等商业软件的模板匹配技术或文档,在检索方向上您有哪些建议与理解?尤其是对于早期的技术资料与技术思路。

DennisLiu1993 commented 2 years ago

1.1 是的 1.2.1 是啊,但有可能被最底層的AngleStep超過 1.2.2 實際物理角度,精度為AngleStep

2 你要問meiqua,他的東西太高深了

2.2 商業庫的邏輯無法參透,我隱隱覺得這些公司發展了20年的ShapeBasedMatching是不可能被模仿的 NCC多看一下論文可能可以逼近效果

cheny00 commented 2 years ago

谢谢回复 这几天在梳理源码,待我把有疑惑的问题梳理清再向您请教

githublqs commented 2 years ago

亚像素确实存在问题,有个变量,代码默认是关闭的,打开我测试法线inf值,我没细研究,可有问下作者,角度容差分为-x 到 x 度和 指定多个区间两种情况,角度现实和shape based matching一致,代表模板逆时针旋转的角度,源码实线是模板不旋转,匹配的dest 场景图逆时针旋转,然后再调整输出结果的

---原始邮件--- 发件人: @.> 发送时间: 2022年8月11日(周四) 下午3:11 收件人: @.>; 抄送: @.**@.>; 主题: Re: [DennisLiu1993/Fastest_Image_Pattern_Matching] 关于测试中,咨询调试处理 (Issue #17)

感谢回复 1 关于定位结果的询问,采用圆形模板匹配检测图像

1.1 旋转范围为0°时,测试定位(x,y)均为像素级整数信息,如何获取亚像素级的定位结果呢?

1.2 旋转范围设置非0°时,可以获取亚像素级的定位结果;但以当前设置1时(2°的范围),存在超出该范围的定位角度结果,造成这种现象可能的因素是哪些,有什么解决方法吗? (PS:还是说,我对Tolerance参数设置角度的理解有误,那应该如何理解?)

2 关于论文与本源码 2.1 在模板匹配领域里,您有哪些认为不错的论文或是检索关键词等资料信息,能否提供指导一下 (PS: Maybe 我将要在这一方面长期钻研了) 2.2 本源码工程,如何梳理和研究更加高效,能否提供一下脉络或线索

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you were mentioned.Message ID: @.***>

Tony-Zhang-1229 commented 2 years ago

从meiqua博主找到这里的,看到您的代码也很好,最近会试一下。希望有机会多多交流,已给星星 @DennisLiu1993

DennisLiu1993 commented 2 years ago

从meiqua博主找到这里的,看到您的代码也很好,最近会试一下。希望有机会多多交流,已给星星 @DennisLiu1993

感謝支持