新思路和存在的问题 在翻看以前找到的论文的时候看到了有趣的文章 《Low-Cost Hand Vein Pattern Recognition 》里面给出这样的效果图 那么这个效果对于我来说是不错的。虽然解决的问题不一样,但是很有启发。继续探索,它指向了另一篇文章(核心算法) 《A Direction-Based Vascular Pattern Extraction 》 这篇文章的核心是使用这样的核来进行滤波
离散状态:
滤波(卷积)
能够得到这样的结果(依然是局部的),a和f分别为最初和最后结果
为了尝试实现这个效果,我做了以下实现
//构建核 Mat k11 = Mat(1,11,CV_64FC1,Scalar(0)); Mat k17 = Mat(1,17,CV_64FC1,Scalar(0)); k11.at<double>(0,0) = -1.0/(11*17); k11.at<double>(0,1) = -1.0/(11*17); k11.at<double>(0,2) = 2.0/(11*17); k11.at<double>(0,3) = 4.0/(11*17); k11.at<double>(0,4) = 16.0/(11*17); k11.at<double>(0,5) = 32.0/(11*17); k11.at<double>(0,6) = 16.0/(11*17); k11.at<double>(0,7) = 4.0/(11*17); k11.at<double>(0,8) = 2.0/(11*17); k11.at<double>(0,9) = -1.0/(11*17); k11.at<double>(0,10)= -1.0/(11*17); k17.at<double>(0, 0) = -1.0/(11*17); k17.at<double>(0, 1) = -1.0/(11*17); k17.at<double>(0, 2) = -1.0/(11*17); k17.at<double>(0, 3) = -1.0/(11*17); k17.at<double>(0, 4) = -1.0/(11*17); k17.at<double>(0, 5) = 2.0/(11*17); k17.at<double>(0, 6) = 8.0/(11*17); k17.at<double>(0, 7) = 16.0/(11*17); k17.at<double>(0, 8) = 32.0/(11*17); k17.at<double>(0, 9) = 16.0/(11*17); k17.at<double>(0,10) = 8.0/(11*17); k17.at<double>(0,11) = 3.0/(11*17); k17.at<double>(0,12) = -1.0/(11*17); k17.at<double>(0,13) = -1.0/(11*17); k17.at<double>(0,14) = -1.0/(11*17); k17.at<double>(0,15) = -1.0/(11*17); k17.at<double>(0,16) = -1.0/(11*17); //使用sepFilter2D进行卷积 sepFilter2D(tmp,tmp,CV_8UC1,k11.t(),k17)
但是结果很差,根本对不上 原图
结果(普遍变黑,直方图均衡不能提高效果):理想结果
首先让我惊讶的是这个结果是不错的,要知道,原图中黑色的是有效区域,而在结果中使用白色标注有效区域。这是如何做到的?这种结果和我对核心的使用有偏差。特别是原文中为了方便DSP程序设计,采用了很多int值,在修改代码的过程中,需要注意哪些?最后,这篇文章的效果是否是正确的?这种效果是否能用用于血管增强? 为此做一下工作: 1 核的问题 写出问题所在,是不是我理解错了,放在answeropencv以及群里面和大家讨论; 2 查看这篇文章的引用文章,看能否和相关作者联系; 3 从现有的资料入手,思考它这里体现出的原理,看是否能够有其他方法实现;以及 conventional methods 标签:11,增强,血管,k17,17,新思路,k11,16.0,1.0 From: https://www.cnblogs.com/jsxyhelu/p/16989480.html