数字图像处理成长之路13:SIFT之尺度空间c++版

        之前我从没听说过SIFT,真的是从零开始,而且是一个人自学。看了很多文章,下面这两篇不错:

        http://www.cnblogs.com/starfire86/p/5735061.html

        http://www.cnblogs.com/JiePro/p/sift_1.html

        有些理论看多了也还是似懂非懂,真正自己用代码试着去实现,就能发现算法的一些细节问题,然后能更好理解算法。

        我尝试用c++描述SIFT的尺度空间。

    const double sigma = 0.4;
    const double S = 2;
    const double k = pow(S, 1/S);

    const int scaleSpaceO = 4;
    const int scaleSpaceS = S +3;
    double scaleSpaceSigma[scaleSpaceO][scaleSpaceS];

    Mat scaleSpaceMats[scaleSpaceO][scaleSpaceS];
    Mat currentOctaves, nextOctaves;
    srcMat.copyTo(currentOctaves);

    for (int o = 0; o < scaleSpaceO; o++)
    {
        for (int s = 0; s < scaleSpaceS; s++)
        {
            ///计算每个octave下高斯模糊的系数
            scaleSpaceSigma[o][s] = sigma * pow(k, s);

            Mat gaussKernel = getGaussianKernel(7, scaleSpaceSigma[o][s]);

            scaleSpaceMats[o][s].create(currentOctaves.size(), currentOctaves.type());
            ///高斯模糊
            filter2D(currentOctaves, scaleSpaceMats[o][s], currentOctaves.depth(), gaussKernel);

        }
        ///把当前octave下的倒数第三曾的图像作为下一个octave的待处理图像
        scaleSpaceMats[o][scaleSpaceS - 2].copyTo(currentOctaves);
        /// 对其进行降采样
        nextOctaves.create(currentOctaves.rows / 2 , currentOctaves.cols / 2, currentOctaves.type());
        for (int x = 0; x < currentOctaves.cols; x += 2)
            for (int y = 0; y < currentOctaves.rows; y += 2)
            {
                nextOctaves.at<uchar>(y / 2, x / 2 ) = currentOctaves.at<uchar>(y,  x);
            }
         ///降采样厚的图像作为下一个octave的原始图像
         nextOctaves.copyTo(currentOctaves);
    }


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

豆腐白菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值