void gradient_mat(rvec grad, int nmat, t_matrix mat[]) { int m; for(m=0; m<nmat; m++) gradient_map(grad, mat[m].nmap, mat[m].map); }
//pair<double, double> --> current energy seam, gradient value std::vector<std::vector<std::pair<double, double> > > calculate_gradient(std::vector<std::vector<double> > luminosity_map) { std::vector<std::vector<std::pair<double, double> > > gradient_map(luminosity_map.size(), std::vector<std::pair<double, double> >(luminosity_map[0].size(), std::pair<double, double>(DBL_MAX, DBL_MAX))); int width = luminosity_map[0].size(); int height = luminosity_map.size(); for (int i = 0; i < luminosity_map.size(); i++) { for (int j = 0; j < luminosity_map[i].size(); j++) { double current_val = luminosity_map[i][j]; double u = valid_coord(std::pair<int, int>(i - 1, j), width, height) ? luminosity_map[i - 1][j] : current_val; double d = valid_coord(std::pair<int, int>(i + 1, j), width, height) ? luminosity_map[i + 1][j] : current_val; double l = valid_coord(std::pair<int, int>(i, j - 1), width, height) ? luminosity_map[i][j - 1] : current_val; double r = valid_coord(std::pair<int, int>(i, j + 1), width, height) ? luminosity_map[i][j + 1] : current_val; double dx = r - l; double dy = u - d; gradient_map[i][j] = std::pair<double, double>(DBL_MAX, pythagorean(dx, dy)); if (i == 0) { gradient_map[i][j].first = gradient_map[i][j].second; } } } return gradient_map; }