正文之前先声明一下:由于比较忙,一直在忙研究生开学的事情,所以一直没有更新,感觉也很愧疚,有时间也一直比较懒不想更新,所以从现在起决定恢复不定时更新,从而督促自己更好的去运营这个公众号。本公众号定位于人工智能AI相关知识,也把我学习到的一些技术知识比如python、C++、OpenCV等内容做成笔记的形式发表出来,欢迎各位一起交流探讨。也会发一些比赛的相关经验技巧,更好的让后来者去完成比赛,包括计算机二级、三级等等。我研究生的一些心路历程也会发表出来,让学弟学妹更好的借鉴从而过好研究生的生涯
PS:本公众号已经可以开通流量主啦,欢迎各位读者点一下小广告让我恰饭哈
一、图像特征
1、Harris角点检测
数学原理如下
其中,w(u,v)是权重。为了化简,先泰勒展开
近似化简
把矩阵对角化成为只有特征值x1,x2。当x1、x2都比较大时,则椭圆也比较大。
R=x1x2-a*(x1+x2)
当R>0时,为角点,R≈0时,为平坦区;R<0时,为边界点。
算法实现
img=cv2.imread('chessboard.jpg') print('imgage.shape',img.shape) gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) gray=np.float32(gray) #输入图像必须是 float32 ,最后一个参数在 0.04 到 0.05 之间dst=cv2.cornerHarris(gray,2,3,0.04) print('dst,shape',dst.shape) img[dst>0.01*dst.max()]=[0,0,255] cv2.imshow('dst',img) cv2.waitKey(0)图片cv2.destroyAllWindows()
二、图像特征sift(scale inVariant Feature transform)
1、图像尺度空间
关键点精确定位
运用泰勒展开对离散的店进行拟合,最后得到下面点的精确定位的公式。一般书上都是写下面的公式。
用高斯滤波可能会增加一些边界,所以要消除边界响应。
生成特征描述。一般有个很多个方向,只需要统计8个方向,每个方向45°。
sift算法实现
由于OpenCV3.5之后这个函数有专利保护,所以以后的OpenCV版本都不能用这个函数了。要用的话建议安装opencv3.4.15
OpenCV的Python实现
OpenCV-Python是一个Python绑定库,旨在解决计算机视觉问题。
Python是一种由Guido van Rossum开发的通用编程语言,它很快就变得非常流行,主要是因为它的简单性和代码可读性。它使程序员能够用更少的代码行表达思想,而不会降低可读性。
与C / C++等语言相比,Python速度较慢。也就是说,Python可以使用C / C++轻松扩展,这使我们可以在C / C++中编写计算密集型代码,并创建可用作Python模块的Python包装器。这给我们带来了两个好处:首先,代码与原始C / C++代码一样快(因为它是在后台工作的实际C++代码),其次,在Python中编写代码比使用C / C++更容易。OpenCV-Python是原始OpenCV C++实现的Python包装器。
OpenCV-Python使用Numpy,这是一个高度优化的数据库操作库,具有MATLAB风格的语法。所有OpenCV数组结构都转换为Numpy数组。这也使得与使用Numpy的其他库(如SciPy和Matplotlib)集成更容易。