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

关于源码中,咨询功能作用 #20

Closed cheny00 closed 1 year ago

cheny00 commented 2 years ago

博主,我又来请教了^v^


1 FilterWithRotatedRect,进行重叠区域筛选 1.2 计算交并比,为什么要对重叠区域的像素位置进行排序,才能计算该区域的轮廓面积?

image

2 LearnPattern,进行图像模式训练 2.2.2 注意到界面(Read_TCHAR)加载时有灰度处理,但LearnPattern各层金字塔内处理均值、标准差时采用了Scalar定义的4通道,那这里的4通道指的什么参数运算?代表图像什么信息?

2.3.1 该模式训练是对检测图像各层金字塔的灰度信息进行处理吗?还是对模板图像进行处理?m_matSrc、m_matDst参数如何理解。

2.3.3 仅对检测/模板图像进行金字塔与灰处理,那如何与模板/检测图像计算灰度信息,进行匹配处理?是根据模板确定能识别的最小角度步长,旋转检测图像后进行分块匹配遍历筛选?

4 match,关于亚像素实现 4.1 亚像素的初始定位参数是根据像素级定位结果确定?那亚像素处理是逐层(金字塔)处理(x,y,angle)参数,返还回像素级?还是在底层原图上根据像素级定位结果进行最后的亚像素处理?

5 相关函数功能作用 5.2 CCOEFF_Denominator相似度系数的分母计算,是哪有公式或说明吗?变换过程没看懂。另外,没有当前方案没有进行归一化吗?还是在哪个位置希望您能指出一下。

DennisLiu1993 commented 2 years ago

1.1 因為是來自不同旋轉角Source的比對結果 1.2 把多邊形的各端點連到中心,切成三角形計算面積,端點不排序無法切

2.1 等你查到再跟我說,有幾家庫是這樣用的 2.2.1 我是限制在單通道,cv::matchTemplate可以是多通道 2.2.2 meanStdDev ()可以輸入1~4通道影像,分別計算mean stdDev

2.3.1 對模板, m_matSrc=欲檢測圖像原尺寸, m_matDst=模板圖像原尺寸 2.3.2 參考這篇的公式 2.3.3 兩者都有進行金字塔/ 旋轉: 是的

3.1 是的,這段代碼可以達到這個效果 NCC_OCR 檢測圖像與模板在TestImages\M12\

3.2 為了把字元排序成由左到右上到下的順序

4.1 只有在原圖尺寸才會計算,其他層計算沒意義 4.2 iStopLayer是讓你可以改代碼使流程不跑完全部金字塔就結束(少一層大概快4倍),這是早期這個演算法速度太慢時湊合用的,現在已經用不到了...

5.1 這個也不用理,只是讓你把比對區域輸入成圖像 5.2 同2.3.2,有規一化 5.3 黑框是原圖(Inspection Image)旋轉後,藍框是最佳搜尋尺寸 (原始的搜尋範圍是以求取黑框的最小外接正矩形,藍框可以比這縮小一些) image 5.4 是的,求極值都是重新遍歷,所以才有之前跟你說的這個函數可以優化 但對於模板尺寸非常小的case才有用

我說老哥你也問太多了,幫我宣傳下

cheny00 commented 2 years ago

没问题,肯定帮大哥宣传介绍的 (PS:最近刚接触这领域,相信以后认识的人就会多了;有啥需要我能帮的一定帮大哥)


2.2.2 灰度图像采用meanStdDev ()函数,实际仅用了第一通道进行mean和stdDev计算吧

2.2.3 我看到《机器视觉算法与应用》中对模板匹配介绍ncc匹配,是将模板在检测图像上逐像素进行遍历匹配和计算相似度,从而筛选出最佳(x,y),您这里也是这个思路吗?

4.2 iStopLayer部分注释掉也不会影响整体运行效果吧

5.3 是对每次旋转后的检测图像,各自截取相应最小外接正方形吗?多余区域采用黑色填充吧。

5.4 shape匹配也是采用类似填充获取极值,实现多目标检测的吗?还是有其他思路完成多目标任务?

DennisLiu1993 commented 2 years ago

2.2.2 是的,templMean[1]~templMean[3]都是0 2.2.3 是的,你看我貼的那兩篇論文就知道

4.2 沒錯 5.3 image 用黑色區域沒錯,但沒有取外接正方形,概念直接把紅框的LeftTop點旋轉一個角度之後,用長寬取出一個區域,不過實作以warpAffine達成

5.4 多目標跟填充無關,的確是這個思路

cheny00 commented 2 years ago

感谢回复

5.4 shape的多目标是如何避免重复定位相同目标呢

DennisLiu1993 commented 2 years ago

我記得meiqua沒有特別去做多標靶判別,因為shape稍有一點偏差分數就會掉很多,跟NCC不一樣

southmilkyway commented 2 years ago

博主你好,想请教你一个问题,我打算用你的这个算法封装一个dll,想通过C#来调用,我把 CMatchToolDlg::LearnPattern()和cmat.Match()两个函数进行了封装,但是测试后发现匹配不了, 屏幕截图 2022-09-14 203615 在这个位置就匹配不出来了,匹配分数为0,想请教一下你除了在这两个函数里边做事情之外,别的地方也有图像处理么?

DennisLiu1993 commented 2 years ago

是包裝後就匹配不了還是包裝前 如果是包裝前傳個原圖來看看 如果是包裝後把dll設為起始專案就能進中斷點吧

southmilkyway commented 2 years ago

是包裝後就匹配不了還是包裝前 如果是包裝前傳個原圖來看看 如果是包裝後把dll設為起始專案就能進中斷點吧

用你的源码可以匹配的到,打包后就匹配不到了,我测试时用的dll源码跑的,直接可以打断点,问题应该就在我画红框这里,可能是我在哪里忽略了某个点,所以就想请教一下在这两个函数之外的地方有没有要注意的东西

southmilkyway commented 2 years ago

是包裝後就匹配不了還是包裝前 如果是包裝前傳個原圖來看看 如果是包裝後把dll設為起始專案就能進中斷點吧

原因找到了,比较无语,我没有把图片转换成单通道的图像

PureHing commented 2 years ago

@southmilkyway 你好,可以分享一下你打包的C# dll吗

DennisLiu1993 commented 2 years ago

@southmilkyway 你好,可以分享一下你打包的C# dll吗

我這邊有做C++ regular dll,能夠給C#使用 有需要的話信箱詳談

PureHing commented 2 years ago

@DennisLiu1993 信箱是多少呢

southmilkyway commented 2 years ago

@southmilkyway 你好,可以分享一下你打包的C# dll吗

可以的,但是博主这里有标准的,可能会更适合你

PureHing commented 2 years ago

@southmilkyway 你好,可以分享一下你打包的C# dll吗

可以的,但是博主这里有标准的,可能会更适合你

@southmilkyway 可以邮件发我一下吗?非常感谢!xautzxc@126.com solved.

DennisLiu1993 commented 2 years ago

@DennisLiu1993 信箱是多少呢

dennisliu1993@gmail.com 或wechat dennisliu1993

ToNi981004 commented 1 year ago

@southmilkyway 你好,可以分享一下你打包的C# dll吗

我這邊有做C++ regular dll,能夠給C#使用 有需要的話信箱詳談

Hi DennisLiu1993, have a nice day! Can you send me your DLL? My email: toni981004@gmail.com

wangxiaoding0422 commented 1 year ago

@southmilkyway 你好,可以分享一下你打包的C# dll吗

可以的,但是博主这里有标准的,可能会更适合你

我想试试C#的DLL作对比。可以分享一下你的DLL么? 我的邮箱:wangxd0422@163.com 感谢!

DennisLiu1993 commented 1 year ago

https://tw511.com/a/01/44138.html 這篇你可以看一下

三两白菜 @.***> 於 2023年2月9日 週四 下午4:15寫道:

Closed #20 https://github.com/DennisLiu1993/Fastest_Image_Pattern_Matching/issues/20 as completed.

— Reply to this email directly, view it on GitHub https://github.com/DennisLiu1993/Fastest_Image_Pattern_Matching/issues/20#event-8484955170, or unsubscribe https://github.com/notifications/unsubscribe-auth/AY7JBQ4P3COD3AH6VPCOBH3WWWCC7ANCNFSM57AEVFQQ . You are receiving this because you were mentioned.Message ID: <DennisLiu1993/Fastest_Image_Pattern_Matching/issue/20/issue_event/8484955170 @github.com>

cheny00 commented 1 year ago

谢谢博主的帮助 在插值方面,您是否尝试过其他插值拟合,进行对比二项式插值呢? 在原理或评测方面,对误差精度和耗时有什么见解呀。

DennisLiu1993 commented 1 year ago

有個二次式曲線找頂點的 可以試試