@@ -7,30 +7,27 @@ freak_params = FREAK([pattern_scale = 22.0])
77|----------|------|-------------|
88| **pattern_scale** | Float64 | Scaling factor for the sampling window |
99"""
10- type FREAK{S, T, O } <: Params
10+ type FREAK{S, T, OW } <: Params
1111 pattern_scale:: Float64
12- pattern_table:: Array{Array{S, 1}, 1 }
13- smoothing_table:: Array{T, 1 }
14- orientation_weights:: Array{O, 1 }
12+ pattern_table:: Vector{Vector{S} }
13+ smoothing_table:: Vector{Vector{T} }
14+ orientation_weights:: Vector{OW }
1515end
1616
17- typealias OrientationPair Vector{Int}
18- typealias SamplePair Vector{Float64}
19-
2017function FREAK (; pattern_scale:: Float64 = 22.0 )
2118 pattern_table, smoothing_table = _freak_tables (pattern_scale)
22- orientation_weights = OrientationPair []
19+ orientation_weights = OrientationWeights []
2320 for o in freak_orientation_sampling_pattern
2421 offset_1 = pattern_table[1 ][o[1 ]]
2522 offset_2 = pattern_table[1 ][o[2 ]]
2623 dy, dx = offset_1 - offset_2
2724 norm = (dx ^ 2 + dy ^ 2 )
28- push! (orientation_weights, OrientationPair ([ round (Int, dy * 4096 / norm), round (Int, dx * 4096 / norm) ]))
25+ push! (orientation_weights, OrientationWeights ([ dy / norm, dx / norm]))
2926 end
3027 FREAK (pattern_scale, pattern_table, smoothing_table, orientation_weights)
3128end
3229
33- function _freak_mean_intensity {T<:Gray} (int_img:: AbstractArray{T, 2} , keypoint:: Keypoint , offset:: SamplePair , sigma:: Float64 )
30+ function _freak_mean_intensity {T<:Gray} (int_img:: AbstractArray{T, 2} , keypoint:: Keypoint , offset:: SamplePair , sigma:: Float16 )
3431 y = keypoint[1 ] + offset[1 ]
3532 x = keypoint[2 ] + offset[2 ]
3633 if sigma < 0.5
@@ -45,15 +42,15 @@ function _freak_mean_intensity{T<:Gray}(int_img::AbstractArray{T, 2}, keypoint::
4542end
4643
4744function _freak_orientation {T<:Gray} (int_img:: AbstractArray{T, 2} , keypoint:: Keypoint , pattern:: Array{SamplePair} ,
48- orientation_weights:: Array{OrientationPair } , sigmas:: Array{Float64 } )
45+ orientation_weights:: Array{OrientationWeights } , sigmas:: Array{Float16 } )
4946 direction_sum_y = 0.0
5047 direction_sum_x = 0.0
5148 for (i, o) in enumerate (freak_orientation_sampling_pattern)
5249 offset_1 = pattern[o[1 ]]
5350 offset_2 = pattern[o[2 ]]
5451 intensity_diff = _freak_mean_intensity (int_img, keypoint, offset_1, sigmas[o[1 ]]) - _freak_mean_intensity (int_img, keypoint, offset_2, sigmas[o[2 ]])
55- direction_sum_y += orientation_weights[i][1 ] * intensity_diff / 4096
56- direction_sum_x += orientation_weights[i][2 ] * intensity_diff / 4096
52+ direction_sum_y += orientation_weights[i][1 ] * intensity_diff
53+ direction_sum_x += orientation_weights[i][2 ] * intensity_diff
5754 end
5855 angle = atan2 (direction_sum_y, direction_sum_x)
5956 scaled_angle = ceil (Int, (angle + pi ) * freak_orientation_steps / (2 * pi ))
6259
6360function _freak_tables (pattern_scale:: Float64 )
6461 pattern_table = Vector{SamplePair}[]
65- smoothing_table = Vector{Float64 }[]
62+ smoothing_table = Vector{Float16 }[]
6663 for ori in 0 : freak_orientation_steps - 1
6764 theta = ori * 2 * pi / freak_orientation_steps
6865 pattern = SamplePair[]
69- sigmas = Float64 []
66+ sigmas = Float16 []
7067 for (i, n) in enumerate (freak_num_circular_pattern)
7168 for circle_number in 0 : n - 1
7269 alt_offset = (pi / n) * ((i - 1 ) % 2 )
@@ -88,10 +85,9 @@ function create_descriptor{T<:Gray}(img::AbstractArray{T, 2}, keypoints::Keypoin
8885 descriptors = BitArray{1 }[]
8986 ret_keypoints = Keypoint[]
9087 window_size = ceil (Int, (freak_radii[1 ] + freak_sigma[1 ]) * params. pattern_scale) + 1
91- tl_lim = CartesianIndex (- window_size, - window_size)
92- br_lim = CartesianIndex (window_size, window_size)
88+ lim = CartesianIndex (window_size, window_size)
9389 for k in keypoints
94- checkbounds (Bool, img, k + tl_lim ) && checkbounds (Bool, img, k + br_lim ) || continue
90+ checkbounds (Bool, img, k - lim ) && checkbounds (Bool, img, k + lim ) || continue
9591 orientation = _freak_orientation (int_img, k, params. pattern_table[1 ], params. orientation_weights, params. smoothing_table[1 ])
9692 sampled_intensities = T[]
9793 for (i, p) in enumerate (params. pattern_table[orientation])
0 commit comments