1 #ifndef vil_orientations_h_
2 #define vil_orientations_h_
3 //:
4 // \file
5 // \brief Functions to compute orientations and gradient magnitude
6 // \author Tim Cootes
7
8 #include <vil/vil_image_view.h>
9 #include <vxl_config.h>
10 #include <vil/algo/vil_sobel_3x3.h>
11
12 //: Compute orientation (in radians) and gradient magnitude at each pixel
13 // Images assumed to be single plane
14 // \relatesalso vil_image_view
15 void vil_orientations(const vil_image_view<float>& grad_i,
16 const vil_image_view<float>& grad_j,
17 vil_image_view<float>& orient_im,
18 vil_image_view<float>& grad_mag);
19
20 //: Compute discrete orientation and gradient magnitude at each pixel
21 // Computes orientation at each pixel and scales to range [0,n_orientations-1].
22 //
23 // Orientation of i corresponds to angles in range [(i-0.5)dA,(i+0.5)dA]
24 // where dA=2*pi/n_orientations.
25 //
26 // Images assumed to be single plane
27 // \relatesalso vil_image_view
28 void vil_orientations(const vil_image_view<float>& grad_i,
29 const vil_image_view<float>& grad_j,
30 vil_image_view<vxl_byte>& orient_im,
31 vil_image_view<float>& grad_mag,
32 unsigned n_orientations=256);
33
34 //: Compute discrete orientation and gradient magnitude at edge pixels
35 // Computes orientation at each pixel and scales to range [0,n_orientations].
36 // If gradient magnitude is less than grad_threshold, then orientation
37 // of zero is set, meaning undefined orientation.
38 //
39 // Orientation of i>0 corresponds to angles in range [(i-1.5)dA,(i-0.5)dA]
40 // where dA=2*pi/n_orientations.
41 //
42 // Images assumed to be single plane
43 // \relatesalso vil_image_view
44 void vil_orientations_at_edges(const vil_image_view<float>& grad_i,
45 const vil_image_view<float>& grad_j,
46 vil_image_view<vxl_byte>& orient_im,
47 vil_image_view<float>& grad_mag,
48 float grad_threshold,
49 unsigned n_orientations=255);
50
51 //: Compute orientation and gradient magnitude using sobel to get gradients
52 // \relatesalso vil_image_view
53 template <class T>
vil_orientations_from_sobel(const vil_image_view<T> & src_image,vil_image_view<float> & orient_im,vil_image_view<float> & grad_mag)54 inline void vil_orientations_from_sobel(const vil_image_view<T>& src_image,
55 vil_image_view<float>& orient_im,
56 vil_image_view<float>& grad_mag)
57 {
58 vil_image_view<float> grad_i,grad_j;
59 vil_sobel_3x3(src_image,grad_i,grad_j);
60 vil_orientations(grad_i,grad_j,orient_im,grad_mag);
61 }
62
63 //: Compute discrete orientation and gradient using sobel operations
64 // Computes orientation at each pixel and scales to range [0,n_orientations-1].
65 //
66 // Orientation of i corresponds to angles in range [(i-0.5)dA,(i+0.5)dA]
67 // where dA=2*pi/n_orientations.
68 //
69 // Images assumed to be single plane
70 // \relatesalso vil_image_view
71 template <class T>
72 inline void vil_orientations_from_sobel(const vil_image_view<T>& src_image,
73 vil_image_view<vxl_byte>& orient_im,
74 vil_image_view<float>& grad_mag,
75 unsigned n_orientations=256)
76 {
77 vil_image_view<float> grad_i,grad_j;
78 vil_sobel_3x3(src_image,grad_i,grad_j);
79 vil_orientations(grad_i,grad_j,orient_im,grad_mag,n_orientations);
80 }
81
82 #endif // vil_orientations_h_
83