1.尺度空间
当利用计算机视觉系统分析未知场景中的目标,系统无法得知我们关注的目标物体的尺寸大小,因此,我们首先需要考虑的是如何描述目标物体的尺度空间。
对目标物体而言,我们希望通过物体存在的一些显著区域特征来描述它。当利用计算机来分析目标物体图像时,我们需要关注的是目标于背景区域的差异性。局部不变性是目标特征分析在重要的性质之一,局部不变性包括尺度不变性和旋转不变性。
尺度不变性描述的是物体视觉上的元进与目标的认知分析无关,也就是摄像机相对物体远近呈现出来的物体尺寸不受其大小的影响。高尺度意味着物体越小,因为摄像机相对放置较远,相反低尺度意味着目标物体越大。在计算机视觉中,高尺度操作通常是利用图像平滑技术的高斯滤波或下采样技术,低尺度操作通常是利用高斯核核上采用。
旋转不变性物体发生旋转操作与目标认识分析无关,它强调目标特征的多角度信息特征。
二维图像的尺度空间定义为:
L(x,y,\simga)=G(x,y,\simga)*I(x,y)
尺度因子描述的是图像的平滑程度,小尺寸对应于图像中的细节部分,大部分对应于图像中的轮廓部分。多尺度于多分辨率是图像特征分析中的重要技术之一。
2.尺度变换
高斯核是以为可以产生多尺度空间的核,高斯模板具有圆对称性,通过高斯卷积操作对原始像素值重新分配权重,距离中心越远的相邻像素值权重分配得相对较小。二维矩阵变换得高斯平滑操作可以通过在水平和数值方向上分别进行一维高斯矩阵变换相加得到,尺度是自然客观存在的,不是主观创造的,高斯卷积只是表现尺度空间的一种形式。图像金字塔采样技术是对图像层分辨率进行尺度比率增加或减少操作,计算效率较高,opencv提供了函数cvsmooth和GausssianBlur专门用于高斯卷积操作,利用这两个函数课进行图像尺度空间变化。
下面给出特征尺度变换源码:
void createScaleSpace(cv::Mat srcImage, std::vector<std::vector<cv::Mat>> &ScaleSpace, std::vector<std::vector<cv::Mat>> &DoG)
{
cv::Size ksize(5, 5);
double sigma;
cv::Mat srcBlurMat, up, down;
cv::GaussianBlur(srcImage, srcBlurMat, ksize, 0.5);
cv::pyrUp(srcBlurMat, up);
up.copyTo(ScaleSpace[0][0]);
cv::GaussianBlur(ScaleSpace[0][0], ScaleSpace[0][0], ksize, 1.0);
for (int i = 0; i < 4; i++)
{
sigma = 1.4142135;
int j = 0;
for (int j = 0; j < 5 + 2; j++)
{
sigma = sigma*pow(2.0, j / 2.0);
cv::GaussianBlur(ScaleSpace[i][j], ScaleSpace[i][j + 1], ksize, sigma);//对下一尺度进行高斯操作
DoG[i][j] = ScaleSpace[i][j] - ScaleSpace[i][j + 1];//生成多尺度空间
}
}
}