void siftPositionTracksToDrawers(const TrackList<SiftPosition>& feature_tracks,
                                 TrackList<DrawerPointer>& drawer_tracks) {
  drawer_tracks.clear();
  TrackList<SiftPosition>::const_iterator feature_track;
  for (feature_track = feature_tracks.begin();
       feature_track != feature_tracks.end();
       ++feature_track) {
    Track<DrawerPointer> drawer_track;
    siftPositionTrackToDrawers(*feature_track, drawer_track);

    drawer_tracks.push_back(Track<DrawerPointer>());
    drawer_tracks.back().swap(drawer_track);
  }
}
void translationTracksToDrawers(const TrackList<cv::Point2d>& feature_tracks,
                                TrackList<DrawerPointer>& drawer_tracks,
                                int radius) {
  drawer_tracks.clear();
  TrackList<cv::Point2d>::const_iterator feature_track;
  for (feature_track = feature_tracks.begin();
       feature_track != feature_tracks.end();
       ++feature_track) {
    Track<DrawerPointer> drawer_track;
    translationTrackToDrawers(*feature_track, drawer_track, radius);

    drawer_tracks.push_back(Track<DrawerPointer>());
    drawer_tracks.back().swap(drawer_track);
  }
}