CornerEigenValsAndVecs函数

1、CornerEigenValsAndVecs函数

计算图像块的特征值和特征向量,用于角点检测

2、

CornerEigenValsAndVecs函数调用形式

void cvCornerEigenValsAndVecs( const CvArr* image, CvArr* eigenvv,
                               int block_size, int aperture_size=3 );
image
输入图像.
eigenvv
保存结果的数组。必须比输入图像宽 6 倍。
block_size
邻域大小 (见讨论).
aperture_size
Sobel 算子的核尺寸(见 cvSobel).

对每个象素,函数 cvCornerEigenValsAndVecs 考虑 block_size × block_size 大小的邻域 S(p),然后在邻域上计算图像差分的相关矩阵:

M=\begin{bmatrix} \sum_{S(p)}(\frac {dI}{dx})^2  & \sum_{S(p)}(\frac{dI}{dx} \cdot \frac{dI}{dy})^{2} \\ \sum_{S(p)}(\frac{dI}{dx} \cdot \frac{dI}{dy})^{2} & \sum_{S(p)}(\frac {dI}{dy})^2 \end{bmatrix}


然后它计算矩阵的特征值和特征向量,并且按如下方式(λ1, λ2, x1, y1, x2, y2)存储这些值到输出图像中,其中

λ1, λ2 - M 的特征值,没有排序
(x1, y1) - 特征向量,对 λ1
(x2, y2) - 特征向量,对 λ2


opencv 代码:

<span style="font-size:18px;">#include<opencv2/imgproc/imgproc.hpp>
#include<opencv2/core/core.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<iostream>
using namespace cv;
using namespace std;

int main()
{
	Mat src;
	src= imread("D:6.jpg");
	Mat dst(src.size(),CV_32FC(6));
	cvtColor(src, src, CV_RGB2GRAY);
	cornerEigenValsAndVecs(src, dst, 3, 3, BORDER_DEFAULT);
	cout << dst.at<Vec6f>(100, 100)[1] << endl;



	return 0;
}
</span>


你可能感兴趣的:(CornerEigenValsAndVecs函数)