图像特征类型分为:
1.边缘
2.角点(感兴趣关键点)
3.斑点(Blobs)(感兴趣区域)
角点:
在任意方向上的一个微小变动都会引起灰度很大变换,称之为角点。在图像中可以轻易定位。
角点的具体描述:
1.一阶导数(灰度梯度)的局部最大所对应的像素点
2.两条及两条以上边缘的交点
3.图像中梯度值和梯度方向的变换速率都很高的点
4.角点处的一阶导数最大,二阶导数为0,它指示了物体边缘变化不连续的方向。
角点检测:
1.基于灰度图像:
基于梯度,
基于模板:考虑像素领域点的灰度变化,即图像亮度的变化,将与邻点亮度对比足够大的点定义为角点。(harris角点检测)
基于模板梯度
2.基于二值图像
3.基于轮廓曲线
harris角点检测
OpenCV中有cv2.cornerHarris(img,dst,blocksize,ksize,k),它的参数是:
Img:输入图像,应该是单通道8位和float32类型
blockSize:这是考虑边角检测的邻域大小
ksize:使用Sobel算子的孔径参数
k:harris Corner检测器的自由参数(0.04-0.06)
cv2.cornerHarris(gray, 2, 3, 0.04)
//harris Corner检测
//1.OpenCV中的函数cv2.cornerHarris()和cv2.cornerSubPix()
//2.cv2.cornerharris()参数:
/* img:输入图像
blockSize:这是考虑检测的领域大小
ksize:使用Sobel衍生物的孔径参数
k:harris Corner检测器的自由参数
*/
'''
import cv2
import numpy as np
filename = 'blox.jpg'
img = cv2.imread(filename)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
gray = np.float32(gray)
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
# 结果是扩大标记的角落,不重要
dst = cv2.dilate(dst, None)
# 最佳值的阈值,它可能因图像而异
img[dst > 0.01 * dst.max()] = [0, 255, 0]
cv2.imshow('dst', img)
if cv2.waitKey(0) & 0xFF == 27:
cv2.destroyAllWindows()
shi-Tomasi 角点检测
goodFeaturesToTrack函数
(img,corners,int maxCorners,double qualitylevel,double minDistance,mask)
img:输入图像
corners:检测到的角点的输出向量
int maxCorners:角点的最大数量
double qualitylevel:角点检测可接受的最小特征值,通常用的值为0.1或0.01,不超过1.
double minDistance:角点之间的最小距离像素值
mask:可选参数,表示感兴趣区域,(默认值noArray(),若此参数非空,需要为8UC1类型,与img有相同尺寸)
其他的参数均为默认即可
亚像素级角点检测
提供实数坐标值,进行几何测量
cornerSubPix()函数
(所以其实可以用多种角点检测测量结合。)
void cv::cornerSubPix(
cv::InputArray image, // 输入图像
cv::InputOutputArray corners, // 角点(既作为输入也作为输出)
cv::Size winSize, // 区域大小为 NXN; N=(winSize*2+1)
cv::Size zeroZone, // 类似于winSize,但是总具有较小的范围,Size(-1,-1)表示忽略
cv::TermCriteria criteria // 停止优化的标准
);
第一个参数是输入图像,和 cv::goodFeaturesToTrack()中的输入图像是同一个图像。
第二个参数是检测到的角点,即是输入也是输出。
第三个参数是计算亚像素角点时考虑的区域的大小,大小为NXN; N=(winSize*2+1)。
第四个参数作用类似于winSize,但是总是具有较小的范围,通常忽略(即Size(-1, -1))。
第五个参数用于表示计算亚像素时停止迭代的标准,可选的值有cv::TermCriteria::MAX_ITER 、cv::TermCriteria::EPS(可以是两者其一,或两者均选),前者表示迭代次数达到了最大次数时停止,后者表示角点位置变化的最小值已经达到最小时停止迭代。二者均使用cv::TermCriteria()构造函数进行指定。
————————————————
版权声明:此段说明为优快云博主「PHILOS_THU」的原创文章,
原文链接:https://blog.youkuaiyun.com/guduruyu/article/details/69537083