图像算法之六:特征提取算法之LoG

1、产生:
      Laplace算子对通过图像进行操作实现边缘检测的时,对离散点和噪声比较敏感。于是,首先对图像进行高斯暖卷积滤波进行降噪处理,再采用Laplace算子进行边缘检测,就可以提高算子对噪声和离散点的Robust, 这一个过程中Laplacian of Gaussian(LOG)算子就诞生了。


2、基本理论

高斯卷积函数定义为:


而原始图像与高斯卷积定义为:



因为:



所以Laplacian of Gaussian(LOG)可以通过先对高斯函数进行偏导操作,然后进行卷积求解。公式表示为:



因此,我们可以LOG核函数定义为


    

Laplacian of Gaussian计算可以利用高斯差分来近似,其中差分是由两个高斯滤波与不同变量的卷积结果求得的。

图像算法之六:特征提取算法之LoG_第1张图片
3、算法实现

#include
#include
#include
#include
#include"opencv2/imgproc/imgproc.hpp"
usingnamespace std;
usingnamespace cv;
intmain(intargc,char**argv)
{
       Matimg = imread("bear.jpg");
       if(img.empty())
       {
              std::cout<< "You didn't read the image sucessfully!" << std::endl;
              return0;
       }
       namedWindow("src");
       imshow("src", img);
       waitKey(20);
       MatimgGaussian,img16S,imgLoG,imgSobelx,imgSobely,imgSobel,imgCanny;
       GaussianBlur(img, imgGaussian,Size(3, 3),1);//高斯模糊
       namedWindow("Gaussian");
       imshow("Gaussian", imgGaussian);
       waitKey(0);
       Laplacian(imgGaussian, img16S, 3);
       convertScaleAbs(img16S,imgLoG,1);
       namedWindow("LoG");
       imshow("LoG", imgLoG);
       waitKey(0);
       Sobel(img, img16S, 3, 1, 0);
       convertScaleAbs(img16S, imgSobelx, 1);
       Sobel(img, img16S, 3, 0, 1);
       convertScaleAbs(img16S, imgSobely, 1);
       add(imgSobelx, imgSobely, imgSobel);
       namedWindow("Sobel");
       imshow("Sobel", imgSobel);
       waitKey(0);
       Canny(img, imgCanny, 100, 200);
       namedWindow("Canny");
       imshow("Canny", imgCanny);
       waitKey(0);
       return0;
}


实验效果:

图像算法之六:特征提取算法之LoG_第2张图片 图像算法之六:特征提取算法之LoG_第3张图片

图像算法之六:特征提取算法之LoG_第4张图片 图像算法之六:特征提取算法之LoG_第5张图片

图像算法之六:特征提取算法之LoG_第6张图片 图像算法之六:特征提取算法之LoG_第7张图片


你可能感兴趣的:(【计算机视觉与图像处理】,【计算机视觉与模式识别】)