1#ifndef LAPLACIAN_POINT_DETECT_H
2#define LAPLACIAN_POINT_DETECT_H
10namespace laplacian_detection {
19inline std::vector<std::vector<int32_t>>
20apply_point_detection(
const std::vector<std::vector<int32_t>> img,
const double threshold) {
21 int height = img.size();
22 int width = img[0].size();
23 std::vector<std::vector<int32_t>>
kernel = {{-1, -1, -1}, {-1, 8, -1}, {-1, -1, -1}};
24 Image resulted_img(img);
25 for (
int x = 1; x < height - 1; x++) {
26 for (
int y = 1; y < width - 1; y++) {
27 int padding = img[x - 1][y - 1] + img[x][y - 1] + img[x + 1][y + 1] + img[x][y + 1] +
28 img[x + 1][y] + img[x + 1][y - 1] + img[x - 1][y];
29 if (8 * img[x][y] - padding >= threshold) {
30 resulted_img.add_2_point(x, y, img[x][y] * kernel[1][1]);
32 resulted_img.add_2_point(x, y, img[x][y - 1] * kernel[1][0]);
35 resulted_img.add_2_point(x, y, img[x][y + 1] * kernel[1][2]);
37 resulted_img.add_2_point(x, y, img[x + 1][y + 1] * kernel[2][2]);
41 resulted_img.add_2_point(x, y, img[x - 1][y] * kernel[0][1]);
43 resulted_img.add_2_point(x, y, img[x - 1][y + 1] * kernel[0][2]);
46 resulted_img.add_2_point(x, y, img[x - 1][y - 1] * kernel[0][0]);
50 resulted_img.add_2_point(x, y, img[x + 1][y] * kernel[2][1]);
52 resulted_img.add_2_point(x, y, img[x + 1][y - 1] * kernel[2][0]);
56 resulted_img.set_point(x, y, 255);
60 return resulted_img.get_2d_array();
std::pair< std::vector< std::vector< int32_t > >, std::vector< std::vector< int32_t > > > kernel()
Definition sobel_operator.h:24