Apollo  6.0
Open source self driving car software
convolve.h
Go to the documentation of this file.
1 /******************************************************************************
2  * Copyright 2019 The Apollo Authors. All Rights Reserved.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *****************************************************************************/
16 
17 /*
18 Copyright (C) 2006 Pedro Felzenszwalb
19 This program is free software; you can redistribute it and/or modify
20 it under the terms of the GNU General Public License as published by
21 the Free Software Foundation; either version 2 of the License, or
22 (at your option) any later version.
23 This program is distributed in the hope that it will be useful,
24 but WITHOUT ANY WARRANTY; without even the implied warranty of
25 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
26 GNU General Public License for more details.
27 You should have received a copy of the GNU General Public License
28 along with this program; if not, write to the Free Software
29 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
30 */
31 #pragma once
32 #include <algorithm>
33 #include <cmath>
34 #include <vector>
35 #include "modules/perception/lidar/detector/ncut_segmentation/common/graph_felzenszwalb/image.h"
36 
37 namespace apollo {
38 namespace perception {
39 namespace lidar {
40 // convolve src with mask. dst is flipped!
42  const std::vector<float> &mask) {
43  int width = src->width();
44  int height = src->height();
45  int len = mask.size();
46  for (int y = 0; y < height; y++) {
47  for (int x = 0; x < width; x++) {
48  float sum = mask[0] * imRef(src, x, y);
49  for (int i = 1; i < len; i++) {
50  sum += mask[i] * (imRef(src, std::max(x - i, 0), y) +
51  imRef(src, std::min(x + i, width - 1), y));
52  }
53  imRef(dst, y, x) = sum;
54  }
55  }
56 }
57 // convolve src with mask. dst is flipped!
59  const std::vector<float> &mask) {
60  int width = src->width();
61  int height = src->height();
62  int len = mask.size();
63  for (int y = 0; y < height; y++) {
64  for (int x = 0; x < width; x++) {
65  float sum = mask[0] * imRef(src, x, y);
66  for (int i = 1; i < len; i++) {
67  sum += mask[i] * (imRef(src, std::max(x - i, 0), y) -
68  imRef(src, std::min(x + i, width - 1), y));
69  }
70  imRef(dst, y, x) = sum;
71  }
72  }
73 }
74 } // namespace lidar
75 } // namespace perception
76 } // namespace apollo
void convolve_odd(Image< float > *src, Image< float > *dst, const std::vector< float > &mask)
Definition: convolve.h:58
int height() const
Definition: image.h:55
PlanningContext is the runtime context in planning. It is persistent across multiple frames...
Definition: atomic_hash_map.h:25
int width() const
Definition: image.h:52
void convolve_even(Image< float > *src, Image< float > *dst, const std::vector< float > &mask)
Definition: convolve.h:41
Definition: image.h:40
#define imRef(im, x, y)
Definition: image.h:68