sift算子
角点检测技术,比如Harris
等,具有旋转不变性,即使图片发生了旋转,我们也能找到同样的角点。但是对图片进行缩放之后,角点就可能不再是角点了。
所以我们需要用尺度去描绘一副图片,不同大小的图片描绘的尺度,可以理解成单位是不一样的。为了达到这个目的需要使用尺度空间滤波器。SIFT算法使用高斯差分算子DOG来对LoG做一次近似。
图像金字塔,分成很多层,每一层又有很多组。之后我们可以做差值,经过一系列繁琐的步骤找到极值点。
按照教程写了一个代码调试一下:
1 | img = cv2.imread('src1.jpg') |
效果图如下:
注意我使用的opencv版本,要使用sift算子必须是sift = cv2.xfeatures2d.SIFT_create()
之后检测到特征点,直接调用cv2.drawKeypoints
函数描绘特征点
cv2.drawKeypoints
主要的五个参数
- image:也就是原始图片
- keypoints:从原图中获得的关键点,这也是画图时所用到的数据
- outputimage:输出 //可以是原始图片
color:颜色设置,通过修改(b,g,r)的值,更改画笔的颜色,b=蓝色,g=绿色,r=红色。
flags:绘图功能的标识设置
特征点匹配如何做到图片拼接
这个问题我也很疑惑之后再写
图片拼接作业代码
1 | #coding: utf-8 |
原来博主的代码出了一点小问题,估计是复制粘贴的时候出的错。修改了一下可以运行,效果如下: