~bertrand-nouvel/pycvf-keypoints/trunk

« back to all changes in this revision

Viewing changes to nodes/gb.py

  • Committer: tranx
  • Date: 2010-10-01 16:56:14 UTC
  • Revision ID: tranx@havane-20101001165614-u938mdd1y1fgd0o5
initial commit

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
# -*- coding: utf-8 -*-
 
2
 
 
3
from compute_channels_oe_nms import compute_channels_oe_nms
 
4
from get_descriptors import get_descriptors
 
5
import numpy
 
6
 
 
7
class GeometricBlurComputer:
 
8
   def __init__(self, usePBEdges=False,  
 
9
                      numFeats=300,
 
10
                      repulsionRadius=5,
 
11
                      blurRate=0.5,
 
12
                      blurBase=1,
 
13
                      sampleRadii=[0, 4, 8, 16, 32, 50],
 
14
                      numSamplePerRadius= [1, 8, 8, 10, 12, 12]):
 
15
        self.usePBEdges=usePBEdges
 
16
        self.numFeats=numFeats
 
17
        self.repulsionRadius=repulsionRadius
 
18
        self.blurRate=blurRate
 
19
        self.blurBase=blurBase
 
20
        self.sampleRadii=sampleRadii
 
21
        self.numSamplePerRadius=numSamplePerRadius
 
22
   def process(self,I):
 
23
     if I.ndim==3:
 
24
       if (I.shape[2]>1):
 
25
         I = I.mean(axis=2)
 
26
       else:
 
27
         I=I.reshape(I.shape[:2])
 
28
    
 
29
     if not self.usePBEdges:
 
30
       fbr = compute_channels_oe_nms(I)
 
31
     else:
 
32
       assert False,"Not yet implemented"
 
33
       #feat = pbEdges(conf, I) 
 
34
       #th  = 4 * mod(feat.theta, numpy.pi) / numpy.pi
 
35
       #i = floor(th)
 
36
       #wi = 1 - (th - i) 
 
37
       #j = i + 1 
 
38
       #wj = 1 - wi 
 
39
       #i = mod(i,4) + 1 
 
40
       #j = mod(j,4) + 1 
 
41
 
 
42
       #fbr = numpy.zeros(I.shape[0],I.shape[1],4) 
 
43
 
 
44
       #fbr=vl_binsum(fbr,wi * feat.pb,i,3) 
 
45
       #fbr=vl_binsum(fbr,wj * feat.pb,j,3)
 
46
 
 
47
 
 
48
     #print len(fbr)
 
49
     descrs, frames=get_descriptors(numpy.dstack(fbr), self.numFeats, self.repulsionRadius, self.blurRate, self.blurBase, numpy.array(self.sampleRadii), numpy.array(self.numSamplePerRadius))
 
50
 
 
51
     frames = numpy.flipud(frames.T) 
 
52
     descrs = numpy.dstack(descrs).swapaxes(1,2)
 
53
     #descrs = numpy.array([ descrs[:,:,0],descrs[:,:,1],descrs[:,:,2],descrs[:,:,4]]).T 
 
54
     #print descrs.shape
 
55
 
 
56
     #feat.frames = frames ; 
 
57
     #feat.descrs = descrs ;
 
58
     return frames, descrs
 
59
 
 
60
from pycvf.core import genericnode
 
61
from pycvfext.image.datatypes import image
 
62
from pycvf.datatypes import numericvectors
 
63
from pycvf.datatypes import list as ldt
 
64
 
 
65
   
 
66
Node=genericnode.pycvf_node_class(image.Datatype(),ldt.Datatype(numericvectors.Datatype))(GeometricBlurComputer)
 
67
__call__=Node
 
68
 
 
69
 
 
70
def gb_distance(desc1,desc2):
 
71
  return  numpy.dot(desc1.ravel(),desc2.ravel())
 
72
 
 
73
 
 
74
if __name__=="__main__":
 
75
  import scipy
 
76
  I=scipy.lena()[::2,::2]
 
77
  r=GeometricBlurComputer().process(I)
 
78
  print r[1].shape
 
79
 
 
80
  #for i in range(len(r)):
 
81
    #scipy.misc.pilutil.imshow(r[i]/r[i].max()*255)
 
82
    #print len(r),r[i].mean()
 
 
b'\\ No newline at end of file'