高斯差分

   DOG(Difference of Guassian):简称  高斯函数的差分,是灰度图像增强和角点检测的一种方法。

        

        (一)理论基础:
       下面详细介绍DOG的角点检测(也称特征点提取)的理论过程:
  通过将目标图像与高斯函数进行卷积运算得到一幅目标图像的低通滤波结果,此过程称为去燥。(注:这里的Gaussian和高斯低通滤波器的高斯是一个含义,即:正态分布函数)。

                                         公式(1) 正态分布函数

         在某一尺度上的特征检测可以通过两个相邻高斯尺度空间的图像相减,得到DOG的响应值图像。

         详细过程如下:

         首先 :对一幅图像f(x,y)进行不同参数的高斯滤波计算,表示如下


         其次:将滤波得到的结果g1(x,y)和g2(x,y)相减得到:

         

          即:可以将DOG表示为:

                      公式(2) 函数的高斯差分函数

                        注:在具体的图像处理中,就是将两幅不同参数下的高斯滤波结果相减。得到DOG图

         最后:以此依据上述操作得到三个不同尺度下的DOG图,进而在三维空间中求角点。

 (二)实践步骤:
          在具体的图像处理中操作如下:

                    
              

                                  图(1):原始图

       第一步:将同一图像在不同的参数下进行高斯滤波计算,并相减,得到三个DOG图,效果图如下    
    
              
                     
                       图(2)   一个高斯平滑参数为0.3,另一个高斯平滑参数为0.4
          
              
                
                              图(3)  一个高斯平滑参数为0.6,另一个高斯平滑参数为0.7
     
             
             
                   图(4)  一个高斯平滑参数为0.7,另一个高斯平滑参数为0.8

           第二步:根据第一步求出的三张DOG   假设第一张图为f1(x,y),第二张图为f2(x,y),第三张图为f3(x,y);根据下面的模型,求出f2(x,y)(f2为中间标记红色的图)即中间)的最大值和最小值点。

          

          

     

        注:这里,一些童鞋们可以根据上面模型理解整个DOG特征提取的过程

      1:左边的四张图(包括原始图)是不同参数下高斯滤波结果的

      2:对高斯滤波后的图片(相邻状态下)依次进行两两相减可得到右边的三个高斯函数的差分图(简称DOG)。然后根据上面的模型,依次求中间图片每个像素与该像素同尺度的8个相邻点以及上下相邻尺度对应的9*2共26个点的极值。一个点如果在DOG空间本层以及上下两层的26个领域中是最大值和最小值时,就认为该点是图像在该尺度下的一个特征点。

      假设右边的三张图从上到下依次排列顺序为图f1,f2,f3。f2图中的红色标记为当前像素点,黄色对应的像素点表示其邻接的点公26个,如果该点是所有邻接像素点的最大值和最小值,则红色标记对应的点为特征点。如此可以求出所有f2图像中的所有极值点,即完成为了特征点提取。对应最大值标记为1,最小值标记为-1。如下图表示

          

                  图(5)  f2中的所有极值点,黑色表示极小值,白色表示最大值

        最后,在原始图像上标记出所提取的DOG检测出的特征点。如下图所示;

         

  

 下面是Matlab代码:

        注:test.png图与.m文件在同目录下。


clear all;
img = 'test.png';

Im = imread(img);
Im = rgb2gray(Im);
Im = double(Im);
s = 3;
k = 2^1/s;
x = 5;
sigma = 1.6 * k;
thresh = 3;

A = Process(Im, 0.3, 0.4, x);
B = Process(Im, 0.6, 0.7, x);
C = Process(Im, 0.7, 0.8, x);
D = Process(Im, 0.4, 0.5, x);

imshow(A, [0 1])

figure;

imshow(B, [0 1]);

figure;

imshow(C, [0,1]);

a = getExtrema(A, B, C, thresh);

figure;
imshow(a, [-1 1]);

drawExtrema(Im,a, [0 255])

————————————————
版权声明:本文为CSDN博主「M李丽」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_32211827/article/details/72758090

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值