shape_based_matching
shape_based_matching copied to clipboard
模糊图像怎样进行模板匹配
直接匹配似乎匹配不了
尝试了以下方法:
1,阈值分割(二值化),可以匹配到,精度也够,但阈值每次要手动调节,会出现问题;
2,Canny算子获取图像中的边缘,能够匹配到,但精度不够;
3,调节图像的对比度(采用了线性调节和非线性调节两种方式),能匹配到,匹配精度不够;
4,获取图像轮廓,匹配得分较低;
不做任何处理时,跟进程序内部,会显示特征点不够,而无法创建模板; 想了解一下,有没有什么比较简便的方法,可以让算法更容易创建模板,和进行匹配,谢谢
Detector(int num_features, std::vector<int> T, float weak_thresh = 30.0f, float strong_thresh = 60.0f);
可以调低阈值试试,第三个是匹配时的阈值,第4个是训练时的。
@meiqua 调低了第四个参数,能够匹配到了,精度也很好,谢谢! 调低训练阈值后,创建模板时能够找到到更多的特征点了,这样创建模板会轻松一些,估计是这个原理。
是的。一般来说,训练时想提到物体自己的边缘,所以设的高一点排除阴影之类的干扰。这里需要根据情况调小
好的,这样一说就了解得比较透彻了,谢谢。 之前用来测试的图像,包括case1文件夹中的,和其他一些图像,图像都很清晰,所以模板匹配时很容易创建模板,也很容易匹配到。而实际拍摄的图像,由于各种原因(光源亮度、颜色,物体本身表面特性等),都可能造成图像模糊,那么,就有以下4种情况要考虑: 1,图像清晰; 2,图像模糊,但可以创建模板,也可以进行icp配准; 3,图像模糊,不可创建模板; 4,图像模糊,可以创建模板,但ICP处理不理想;
之前的方法,可以解决模糊图像创建模板的问题,不过仍有一些图像,在创建模板后,进行icp处理不是很理想(有的甚至icp处根本就没进行处理),因为对icp配准这块的原理和源码不是很熟悉,不知道有哪些地方可以进行改善,能否指点一二,谢谢!
测试图像:
刚好昨天ICP改进搞好了,可以参考这个issue,把后两个阈值调低点
好的,上午用模糊图像测试了一下,有改善,icp可以起作用了,不过精度略有不足; void init_Scene_kdtree_cpu(cv::Mat dx, cv::Mat dy, KDTree_cpu& kdtree, float max_dist_diff = 4.0f, float low_thresh = 30, float high_thresh = 60); 然后考虑在detector创建时阈值已经调低了(10,30),那么init_Scene_kdtree_cpu是否也要相应调低一些,于是就把low_thresh和high_thresh也调低了(10,30),这样出来的数据就比较准确了; 虽然icp的原理仍不大懂,谢谢了

查看了一下源码,detector构造函数和init_Scene_kdtree_cpu函数,对两个阈值的使用是不一样的,前者用来寻找特征点,并进行筛选,后者用来做canny算子的参数,不过,粗略看了一下icp相关论文,似乎icp配准的时候,待配准平面也要找到一些特征点,这样才能够对应上,当然具体的做法就不清楚了。 目前要调的参数比较多,如果detector构造函数中的weak_threshold和strong_threshold和 init_Scene_kdtree_cpu函数中的阈值可以通用,用起来就要简便一些。 scene.init_Scene_kdtree_cpu(m_detector->dx_, m_detector->dy_, kdtree, 4, m_detector->weak_thresh(), m_detector->strong_thresh()); 不知道这样用会不会有潜在问题。
分开是为了两部分不要耦合太多。strong_thresh在这里没问题;weak_thresh是训练时候用的,跟检测时关系不大,从意义上来说最好改成strong_thresh/2.
好的,谢谢
看了一下源码,不知道理解得是否正确, scene.init_Scene_kdtree_cpu是通过处理图像构建场景,在这里就提取了一些点,作为目标点集; cuda_icp::RegistrationResult result = cuda_icp::ICP2D_Point2Plane_cpu(model_pcd, scene); 这里是用模板的特征点集和图像的点集做配准,采用的是icp算法中点到面配准的方式; 所以,之前我遇到的问题:icp没有发生作用,其实是初始化的时候遇到的;scene构造是没有获得足够的点造成的; scene构造的点集从detector获得,detector是从原始图像高斯平衡然后用sobel算子提取边缘获得处理后的图像;
对的,必须先有点