精华内容
下载资源
问答
  • dense Sift

    热门讨论 2014-05-05 18:28:00
    此文件是稠密尺度不变特征提取(dense Sift),用于图像特征提取 , 大家注意是matlab版本的
  • Dense Sift

    万次阅读 2013-11-30 22:13:29
    Dense SIFT:不构建高斯尺度空间,只在a single scale上提取SIFT特征,可以得到每一个位置的SIFT descriptor SIFT:需要构建高斯尺度空间,只能得到Lowe算法计算得到的点的SIFT descriptor 代码:Matlab代码 C++代码

    Dense SIFT:不构建高斯尺度空间,只在a single scale上提取SIFT特征,可以得到每一个位置的SIFT descriptor

    SIFT:需要构建高斯尺度空间,只能得到Lowe算法计算得到的点的SIFT descriptor

    代码:Matlab代码    C++代码




    展开全文
  • Dense SIFT

    万次阅读 2014-05-05 16:02:13
    在此,我们引出dense SIFT与做特征匹配所用到的SIFT的不同点。 dense SIFT是提取我们感兴趣的patches中的 每个位置 的SIFT特征。而通常做特征匹配的SIFT算法只是得到感兴趣区域或者图像上 若干个稳定 的关键点的SIFT...

    参考网址:http://www.scholarpedia.org/article/Scale_Invariant_Feature_Transform

          dense SIFT在目标分类和场景分类有重要的应用。接触较多文献的朋友可以发现,dense SIFT经常会用在bag of words 模型中[1]。在近年关于场景分类的论文中,我们可能会看到如下的细节。如以16×16 pixel大小的size和8 pixels的stepsize提取dense SIFT特征,然后做max pooling……。在此,我们引出dense SIFT与做特征匹配所用到的SIFT的不同点。dense SIFT是提取我们感兴趣的patches中的每个位置的SIFT特征。而通常做特征匹配的SIFT算法只是得到感兴趣区域或者图像上若干个稳定的关键点的SIFT特征。

         如图所示,目前关于dense SIFT提取比较流行的做法是,拿一个size固定的掩模或者bounding box,以一定的步长(stepsize)在图像上自左向右、从上到下提取dense SIFT的patch块。


    图 denseSIFT提取示意图


          关于dense SIFT的代码网上能够比较容易地搜到,vlfeat上有dense SIFT的c++和matlab版本代码。









    参考文献:

    [1] Yang J, Yu K, Gong Y, et al. Linear spatial pyramid matching using sparse coding for image classification[C]//Computer Vision and Pattern Recognition, 2009. CVPR 2009. IEEE Conference on. IEEE, 2009: 1794-1801.

    展开全文
  • Dense SIFT可视化实现

    2019-05-19 21:54:00
    Dense SIFT算法,是一种对输入图像进行分块处理,再对每一块进行SIFT运算的特征提取过程。Dense SIFT根据可调的参数大小,来适当满足不同分类任务下对图像的特征表征能力;而传统的SIFT算法则是对整幅图像的处理,...

    一,Denxe SIFT算法

           Dense SIFT算法,是一种对输入图像进行分块处理,再对每一块进行SIFT运算的特征提取过程。Dense SIFT根据可调的参数大小,来适当满足不同分类任务下对图像的特征表征能力;而传统的SIFT算法则是对整幅图像的处理,得到一系列特征点。Dense-SIFT在非深度学习的模型中,常常是特征提取的第一步。采样的点提取SIFT描述子后,经过码书投影,投影在同一个码字上的采样点都代表了一组描述子相似的点。不同的码字(相当于直方图的每一个bin)之间,采样点的区分能力是不一样的。我们以下图图1为例,bin2代表的是一块很平坦的区域,于是dense采样时,很多点产生的描述子都会投影在bin2上。而bin1,bin3,bin4分别代表一块特有的区域,仅仅在dense采样到自行车,大提琴和眼睛等部位时,才能够形成类似的描述子。换而言之,bin2的重要性最低,而其他码字的重要性都很高。

          DSIFT在寻找显著点时不是尝试使用一个分类器判断是否是显著点,而是为了简化,所有显著点是均匀分布(equally dense across )在图像的各个区域的。在采样时有个涉及不同尺度下采样步长(pixel stride)是否应该相同的问题。窗口移动同样的步长,在更大的尺度下,窗口要大些,这会使得相邻窗口的重叠区域面积比率变大,从而使得采样的冗余较小尺度下的冗余要大。当前流行的多尺度采样方法倾向的就是这种策略。DSIFT也是使用这种策略,因为要简单得多

     

    二,算法实现

    1.代码实现:

    计算dsift描述子:

     

    2.实验结果如下:

     

    转载于:https://www.cnblogs.com/silencexiaoyou/p/10891047.html

    展开全文
  • Multi-focus image fusion with dense SIFT一文的文章,很不错,值得学习
  • python3 Dense SIFT算法的应用与实现

    千次阅读 2018-10-13 21:04:40
    python3 Dense SIFT算法的应用与实现 Dense SIFT 因为课题的需求,传统的SIFT算法即Sparse SIFT,不能很好地表征不同类之间的特征差异,达不到所需的分类要求。而Dense SIFT算法,是一种对输入图像进行分块处理,...

    python3 Dense SIFT算法的应用与实现

    1. Dense SIFT
      因为课题的需求,传统的SIFT算法即Sparse SIFT,不能很好地表征不同类之间的特征差异,达不到所需的分类要求。而Dense SIFT算法,是一种对输入图像进行分块处理,再进行SIFT运算的特征提取过程。Dense SIFT根据可调的参数大小,来适当满足不同分类任务下对图像的特征表征能力。而Sparse SIFT则是对整幅图像的处理,得到一系列特征点(keypoints)。如下图所示:

      在此背景下,通常来讲Dense SIFT更适用于图像分类识别的任务,而Sparse SIFT更适用于图像检索分割的任务。

    2. Dense SIFT的代码实现

      原代码为python2,现用python3重新编译:

    import numpy as np
    from scipy import signal
    from matplotlib import pyplot
    import matplotlib
    
    # sift features
    Nangles = 8   
    Nbins = 4    
    Nsamples = Nbins**2   
    alpha = 9.0
    angles = np.array(range(Nangles))*2.0*np.pi/Nangles
    
    def gen_dgauss(sigma):
        '''
        generating a derivative of Gauss filter on both the X and Y
        direction.//在X和Y方向上生成高斯滤波器的导数。
        '''
        fwid = np.int(2*np.ceil(sigma))
        G = np.array(range(-fwid,fwid+1))**2
        G = G.reshape((G.size,1)) + G
        G = np.exp(- G / 2.0 / sigma / sigma)
        G /= np.sum(G)
        GH,GW = np.gradient(G)
        GH *= 2.0/np.sum(np.abs(GH))
        GW *= 2.0/np.sum(np.abs(GW))
        return GH,GW
    
    class DsiftExtractor:
        '''
        The class that does dense sift feature extractor.//进行密集筛选的类提取器
        Sample Usage:
            extractor = DsiftExtractor(gridSpacing,patchSize,[optional params])
            feaArr,positions = extractor.process_image(Image)
        '''
        def __init__(self, gridSpacing, patchSize,
                     nrml_thres = 1.0,\
                     sigma_edge = 0.8,\
                     sift_thres = 0.2):
            '''
            gridSpacing: the spacing for sampling dense descriptors//密集描述符的采样间隔
            patchSize: the size for each sift patch//每个sift patch的尺寸
            nrml_thres: low contrast normalization threshold//低对比度归一化阈值
            sigma_edge: the standard deviation for the gaussian smoothing//高斯平滑的标准差
                before computing the gradient
            sift_thres: sift thresholding (0.2 works well based on
                Lowe's SIFT paper)//sift阈值化(0.2基于Lowe's sift paper效果很好)
            '''
            self.gS = gridSpacing
            self.pS = patchSize
            self.nrml_thres = nrml_thres
            self.sigma = sigma_edge
            self.sift_thres = sift_thres
            # compute the weight contribution map
            sample_res = self.pS / np.double(Nbins)
            sample_p = np.array(range(self.pS))
            sample_ph, sample_pw = np.meshgrid(sample_p,sample_p)
            sample_ph.resize(sample_ph.size)
            sample_pw.resize(sample_pw.size)
            bincenter = np.array(range(1,Nbins*2,2)) / 2.0 / Nbins * self.pS - 0.5 
            bincenter_h, bincenter_w = np.meshgrid(bincenter,bincenter)
            bincenter_h.resize((bincenter_h.size,1))
            bincenter_w.resize((bincenter_w.size,1))
            dist_ph = abs(sample_ph - bincenter_h)
            dist_pw = abs(sample_pw - bincenter_w)
            weights_h = dist_ph / sample_res
            weights_w = dist_pw / sample_res
            weights_h = (1-weights_h) * (weights_h <= 1)
            weights_w = (1-weights_w) * (weights_w <= 1)
            # weights is the contribution of each pixel to the corresponding bin center
            self.weights = weights_h * weights_w
            #pyplot.imshow(self.weights)
            #pyplot.show()
            
        def process_image(self, image, positionNormalize = True,\
                           verbose = True):
            '''
            processes a single image, return the locations
            and the values of detected SIFT features.//处理单个图像,返回检测到的SIFT特征的位置和值。
            image: a M*N image which is a numpy 2D array. If you 
                pass a color image, it will automatically be converted
                to a grayscale image.//一个M*N的图像,它是一个numpy二维数组。如果您传递一个彩色图像,它将自动转换为灰度图像。
            positionNormalize: whether to normalize the positions
                to [0,1]. If False, the pixel-based positions of the
                top-right position of the patches is returned.//是否将位置规范化为[0,1]。如果为False,则返回补丁右上角的基于像素的位置。
            
            Return values:
            feaArr: the feature array, each row is a feature//特征数组,每一行都是一个特征
            positions: the positions of the features//特征的位置
            '''
    
            image = image.astype(np.double)
            if image.ndim == 3:
                # we do not deal with color images.
                image = np.mean(image,axis=2)
            # compute the grids
            H,W = image.shape
            gS = self.gS
            pS = self.pS
            remH = np.mod(H-pS, gS)
            remW = np.mod(W-pS, gS)
            offsetH = remH//2
            offsetW = remW//2
            gridH,gridW = np.meshgrid(range(offsetH,H-pS+1,gS), range(offsetW,W-pS+1,gS))
            
            
            gridH = gridH.flatten()
            gridW = gridW.flatten()
            if verbose:
                print('Image: w {}, h {}, gs {}, ps {}, nFea {}'.\
                        format(W,H,gS,pS,gridH.size))
            feaArr = self.calculate_sift_grid(image,gridH,gridW)
            feaArr = self.normalize_sift(feaArr)
            if positionNormalize:
                positions = np.vstack((gridH / np.double(H), gridW / np.double(W)))
            else:
                positions = np.vstack((gridH, gridW))
            return feaArr, positions
    
        def calculate_sift_grid(self,image,gridH,gridW):
            '''
            This function calculates the unnormalized sift features
            It is called by process_image().//此函数计算未规范化的sift特性。
                                            //它被process_image()调用。
            '''
            H,W = image.shape
            Npatches = gridH.size
            feaArr = np.zeros((Npatches,Nsamples*Nangles))
    
            # calculate gradient
            GH,GW = gen_dgauss(self.sigma)
            IH = signal.convolve2d(image,GH,mode='same')
            IW = signal.convolve2d(image,GW,mode='same')
            Imag = np.sqrt(IH**2+IW**2)
            Itheta = np.arctan2(IH,IW)
            Iorient = np.zeros((Nangles,H,W))
            for i in range(Nangles):
                Iorient[i] = Imag * np.maximum(np.cos(Itheta - angles[i])**alpha,0)
                #pyplot.imshow(Iorient[i])
                #pyplot.show()
            for i in range(Npatches):
                currFeature = np.zeros((Nangles,Nsamples))
                for j in range(Nangles):
                    currFeature[j] = np.dot(self.weights,\
                            Iorient[j,gridH[i]:gridH[i]+self.pS, gridW[i]:gridW[i]+self.pS].flatten())
                feaArr[i] = currFeature.flatten()
            return feaArr
    
        def normalize_sift(self,feaArr):
            '''
            This function does sift feature normalization
            following David Lowe's definition (normalize length ->
            thresholding at 0.2 -> renormalize length)
            '''
            siftlen = np.sqrt(np.sum(feaArr**2,axis=1))
            hcontrast = (siftlen >= self.nrml_thres)
            siftlen[siftlen < self.nrml_thres] = self.nrml_thres
            # normalize with contrast thresholding
            feaArr /= siftlen.reshape((siftlen.size,1))
            # suppress large gradients
            feaArr[feaArr>self.sift_thres] = self.sift_thres
            # renormalize high-contrast ones
            feaArr[hcontrast] /= np.sqrt(np.sum(feaArr[hcontrast]**2,axis=1)).\
                    reshape((feaArr[hcontrast].shape[0],1))
            return feaArr
    
    class SingleSiftExtractor(DsiftExtractor):
        '''
        The simple wrapper class that does feature extraction, treating
        the whole image as a local image patch.//一个简单的封装类,它能把整个图像当作一个局部图像补丁
        '''
        def __init__(self, patchSize,
                     nrml_thres = 1.0,\
                     sigma_edge = 0.8,\
                     sift_thres = 0.2):
            # simply call the super class __init__ with a large gridSpace
            DsiftExtractor.__init__(self, patchSize, patchSize, nrml_thres, sigma_edge, sift_thres)   
        
        def process_image(self, image):
            return DsiftExtractor.process_image(self, image, False, False)[0]
        
    if __name__ == '__main__':
        # ignore this. I only use this for testing purpose...
        from scipy import misc
        extractor = DsiftExtractor(8,16,1)
        image = misc.imread('C:/Users/qgl/Desktop/articles/test1.png')
        image = np.mean(np.double(image),axis=2)
        feaArr,positions = extractor.process_image(image)
        #pyplot.hist(feaArr.flatten(),bins=100)
        #pyplot.imshow(feaArr[:256])
        #pyplot.plot(np.sum(feaArr,axis=0))
        pyplot.imshow(feaArr[np.random.permutation(feaArr.shape[0])[:256]])
        
        # test single sift extractor
        extractor = SingleSiftExtractor(16)
        feaArrSingle = extractor.process_image(image[:16,:16])
        pyplot.figure()
        pyplot.plot(feaArr[0],'r')
        pyplot.plot(feaArrSingle,'b')
        pyplot.show()
      
        
    

    代码e.g.
    如果你的输入图像像素大小是200 * 200,设定步长参数为8,patch块大小为16 * 16,输入图像转换为24 * 24=576个patch块,每个patch块进行SIFT提取关键点,最后得到576个特征点。这样输入图像就转换为了576 * 128维的矩阵向量。
    继续添加一个批量处理函数,处理好数据集,就可以进行后续的分类识别工作了。

    展开全文
  • Easy way to use Dense Sift

    2021-01-09 00:42:26
    <div><p>Is there a simple way to generate lafs to feed into extract_patches_from_pyramid for the purposes of dense sift? <p>I was thinking about feeding a list of centers into laf_from_center_scale_...
  • SIFT算法出现的问题: 在处理牙齿有关的数据时,由于牙齿的特征较少,用一般的SIFT算法求得的特征点是...dense SIFT算法可以得到相对稠密的特征点,则可以通过检测到的足够多的特征点进行特征匹配,并通过RANSAC方
  • Sift VS Dense Sift

    2017-03-02 16:36:55
    有个博友问SIFTDense-SIFT在应用上的区别。这个问题可以放大到Sparse feature和Dense feature的使用场景上(不然现在说Dense-SIFT估计没人鸟了)。之前自己也考虑过这个问题,今天不妨写出来。这些都是对基本问题...
  • vlfeat dense sift理解

    千次阅读 2016-02-26 21:47:43
    一、Dense SIFT SamplingDSIFT在寻找显著点时不是尝试使用一个分类器判断是否是显著点,而是为了简化,所有显著点是均匀分布(equally dense across )在图像的各个区域的。在采样时有个涉及不同尺度下采样步长...
  • KNN+Dense SIFT+手势识别

    2019-05-19 22:29:32
    Dense SIFT 1、介绍 2、原理 3、代码实现 手势识别 1、实现及结果分析 (1)读出手势含义 (2)识别手势 参考文章 KNN 1、介绍 KNN即K最近邻,就是K个最近的邻居的意思,说的是每个样本都...
  • end % Sample SIFT bins at valid locations (without boundary artifacts) % find coordinates of sample points (bin centers) [ samplePosX, samplePosY ] = meshgrid( linspace( 1, nPatchSize + 1, nBinNums +...
  • [VLFeat]Dense Sift的C源码学习

    千次阅读 2015-06-24 15:28:48
    VLFeat是一个很好用的开源库,其中实现了计算机视觉常用的...1,Dense Sift 在文章《sift特征提取算法》中提到,提取图像的sift特征分4步:构建DOG尺度空间;关键点定位;关键点方向赋值;生成描述子。 这里产生的s
  • 上一篇博客中,我们已经介绍了图像检索的原理与实现,这篇要介绍图像分类,什么是图像分类呢?图像分类就是输入一张图像,找到它属于哪一类。比如拍照识花,我们拍一张花的图像上传系统,...二、dense SIFT算法 1....
  • 本文提出了一种基于密集尺度不变特征变换(SIFT)的多聚焦图像融合方法。本文的主要新颖之处在于它显示了图像局部特征的巨大潜力,如被用于图像融合的密度筛选。特别地,局部特征描述不仅可以作为活动水平的测量,而且...
  • KNN算法和Dense SIFT

    2019-05-19 23:09:50
    KNN算法和Dense SIFT 摘要: KNN Dense Sift 1.KNN算法 kNN算法的核心思想是如果一个样本在特征空间中的k个最相邻的样本中的大多数属于某一个类别,则该样本也属于这个类别,并具有这个类别上样本的...
  • VLFeat implements a fast dense version of SIFT, called vl_dsift. The function is roughly equivalent to running SIFT on a dense gird of locations at a fixed scale and orientation. This type of ...
  • KNN_Dense sift_图像识别

    2019-05-19 11:49:54
    title('dense SIFT') show()   # -*- coding: utf-8 -*- import os from PCV.localdescriptors import sift, dsift from pylab import * from PIL import Image imlist=['gesture/example/C-uniform01.ppm...
  • dense SIFT与做特征匹配所用到的SIFT的不同点:dense SIFT是提取我们感兴趣的patches中的每个位置的SIFT特征。而通常做特征匹配的SIFT算法只是得到感兴趣区域或者图像上若干个稳定的关键点的SIFT特征。因此Dense ...
  • title('dense SIFT') show() 图像分类之手势识别 1.用稠密SIFT函数来对图像进行处理,可以得到所有图像的特征向量,还要对所有图像做好标记。 2.用训练数据及其标记作为输入,创建分类器对象(使用了KNN方法)...
  • <div><p>该提问来源于开源项目:mapillary/OpenSfM</p></div>
  • 一个 Dense SIFT 算法的 matlab 实现

    万次阅读 热门讨论 2011-01-08 21:40:00
    % Sample SIFT bins at valid locations (without boundary artifacts) % find coordinates of sample points (bin centers) [ samplePosX, samplePosY ] = meshgrid( linspace( 1, nPatchSize + 1, nBinNums + 1 ) ...
  • pyVLfeat是著名的图像处理库VLFeat在python上的接口包。在linux环境下使用该库提示“段错误”。百度后得知: 所谓的段错误就是指访问的内存超出了系统所给这个程序的内存空间 意思其实就是数组溢出,然后想...
  • Dense SIFT是图像特征描述子SIFT的快版变体,即稠密SIFT特征向量。当研究目标是对同样的物体或者场景寻找对应关系(correspondence)时, SIFT更好。而研究目标是图像表示或者场景理解时,Dense SIFT更好,因为即使...
  • SIFT vs Dense-SIFT

    万次阅读 2014-10-16 20:53:44
    有个博友问SIFTDense-SIFT在应用上的区别。这个问题可以放大到Sparse feature和Dense feature的使用场景上。之前自己也考虑过这个问题,今天不妨写出来。
  • Dense-sift的理解

    千次阅读 2018-02-06 11:45:19
    Dense-SIFTsift的密集采样板,由于SIFT的实时性差,目前特征提取多采用密集采样(源自李菲菲的A Bayesian Hierarchical Model for Learning Natural Scene Categories),代码好理解,但是有一个疑问SPM中采用...

空空如也

空空如也

1 2 3 4 5 6
收藏数 112
精华内容 44
关键字:

densesift