diff --git a/modules/photo/src/fast_nlmeans_denoising_invoker.hpp b/modules/photo/src/fast_nlmeans_denoising_invoker.hpp index 01588b03db..2ebf76af40 100644 --- a/modules/photo/src/fast_nlmeans_denoising_invoker.hpp +++ b/modules/photo/src/fast_nlmeans_denoising_invoker.hpp @@ -80,15 +80,15 @@ private: std::vector almost_dist2weight_; void calcDistSumsForFirstElementInRow( - int i, Array2d& dist_sums, - Array3d& col_dist_sums, - Array3d& up_col_dist_sums) const; + int i, Array2d& dist_sums, + Array3d& col_dist_sums, + Array3d& up_col_dist_sums) const; void calcDistSumsForElementInFirstRow( int i, int j, int first_col_num, - Array2d& dist_sums, - Array3d& col_dist_sums, - Array3d& up_col_dist_sums) const; + Array2d& dist_sums, + Array3d& col_dist_sums, + Array3d& up_col_dist_sums) const; }; inline int getNearestPowerOf2(int value) @@ -128,8 +128,8 @@ FastNlMeansDenoisingInvoker::FastNlMeansDenoisingInvoker( almost_template_window_size_sq_bin_shift_ = getNearestPowerOf2(template_window_size_sq); double almost_dist2actual_dist_multiplier = ((double)(1 << almost_template_window_size_sq_bin_shift_)) / template_window_size_sq; - IT max_dist = D::template maxDist(); - size_t almost_max_dist = (size_t)(max_dist / almost_dist2actual_dist_multiplier + 1); + int max_dist = D::template maxDist(); + int almost_max_dist = (int)(max_dist / almost_dist2actual_dist_multiplier + 1); almost_dist2weight_.resize(almost_max_dist); const double WEIGHT_THRESHOLD = 0.001; @@ -156,14 +156,14 @@ void FastNlMeansDenoisingInvoker::operator() (const Range& range) int row_to = range.end - 1; // sums of cols anf rows for current pixel p - Array2d dist_sums(search_window_size_, search_window_size_); + Array2d dist_sums(search_window_size_, search_window_size_); // for lazy calc optimization (sum of cols for current pixel) - Array3d col_dist_sums(template_window_size_, search_window_size_, search_window_size_); + Array3d col_dist_sums(template_window_size_, search_window_size_, search_window_size_); int first_col_num = -1; // last elements of column sum (for each element in row) - Array3d up_col_dist_sums(src_.cols, search_window_size_, search_window_size_); + Array3d up_col_dist_sums(src_.cols, search_window_size_, search_window_size_); for (int i = row_from; i <= row_to; i++) { @@ -202,9 +202,9 @@ void FastNlMeansDenoisingInvoker::operator() (const Range& range) for (int y = 0; y < search_window_size; y++) { - IT * dist_sums_row = dist_sums.row_ptr(y); - IT * col_dist_sums_row = col_dist_sums.row_ptr(first_col_num, y); - IT * up_col_dist_sums_row = up_col_dist_sums.row_ptr(j, y); + int * dist_sums_row = dist_sums.row_ptr(y); + int * col_dist_sums_row = col_dist_sums.row_ptr(first_col_num, y); + int * up_col_dist_sums_row = up_col_dist_sums.row_ptr(j, y); const T * b_up_ptr = extended_src_.ptr(start_by - template_window_half_size_ - 1 + y); const T * b_down_ptr = extended_src_.ptr(start_by + template_window_half_size_ + y); @@ -215,7 +215,7 @@ void FastNlMeansDenoisingInvoker::operator() (const Range& range) dist_sums_row[x] -= col_dist_sums_row[x]; int bx = start_bx + x; - col_dist_sums_row[x] = up_col_dist_sums_row[x] + D::template calcUpDownDist(a_up, a_down, b_up_ptr[bx], b_down_ptr[bx]); + col_dist_sums_row[x] = up_col_dist_sums_row[x] + D::template calcUpDownDist(a_up, a_down, b_up_ptr[bx], b_down_ptr[bx]); dist_sums_row[x] += col_dist_sums_row[x]; up_col_dist_sums_row[x] = col_dist_sums_row[x]; @@ -234,10 +234,10 @@ void FastNlMeansDenoisingInvoker::operator() (const Range& range) for (int y = 0; y < search_window_size_; y++) { const T* cur_row_ptr = extended_src_.ptr(border_size_ + search_window_y + y); - IT* dist_sums_row = dist_sums.row_ptr(y); + int* dist_sums_row = dist_sums.row_ptr(y); for (int x = 0; x < search_window_size_; x++) { - size_t almostAvgDist = (size_t)(dist_sums_row[x] >> almost_template_window_size_sq_bin_shift_); + int almostAvgDist = dist_sums_row[x] >> almost_template_window_size_sq_bin_shift_; IT weight = almost_dist2weight_[almostAvgDist]; weights_sum += weight; @@ -257,9 +257,9 @@ void FastNlMeansDenoisingInvoker::operator() (const Range& range) template inline void FastNlMeansDenoisingInvoker::calcDistSumsForFirstElementInRow( int i, - Array2d& dist_sums, - Array3d& col_dist_sums, - Array3d& up_col_dist_sums) const + Array2d& dist_sums, + Array3d& col_dist_sums, + Array3d& up_col_dist_sums) const { int j = 0; @@ -276,7 +276,7 @@ inline void FastNlMeansDenoisingInvoker::calcDistSumsForFirstElem for (int ty = -template_window_half_size_; ty <= template_window_half_size_; ty++) for (int tx = -template_window_half_size_; tx <= template_window_half_size_; tx++) { - int dist = D::template calcDist(extended_src_, + int dist = D::template calcDist(extended_src_, border_size_ + i + ty, border_size_ + j + tx, border_size_ + start_y + ty, border_size_ + start_x + tx); @@ -291,9 +291,9 @@ inline void FastNlMeansDenoisingInvoker::calcDistSumsForFirstElem template inline void FastNlMeansDenoisingInvoker::calcDistSumsForElementInFirstRow( int i, int j, int first_col_num, - Array2d& dist_sums, - Array3d& col_dist_sums, - Array3d& up_col_dist_sums) const + Array2d& dist_sums, + Array3d& col_dist_sums, + Array3d& up_col_dist_sums) const { int ay = border_size_ + i; int ax = border_size_ + j + template_window_half_size_; @@ -312,7 +312,7 @@ inline void FastNlMeansDenoisingInvoker::calcDistSumsForElementIn int by = start_by + y; int bx = start_bx + x; for (int ty = -template_window_half_size_; ty <= template_window_half_size_; ty++) - col_dist_sums[new_last_col_num][y][x] += D::template calcDist(extended_src_, ay + ty, ax, by + ty, bx); + col_dist_sums[new_last_col_num][y][x] += D::template calcDist(extended_src_, ay + ty, ax, by + ty, bx); dist_sums[y][x] += col_dist_sums[new_last_col_num][y][x]; up_col_dist_sums[j][y][x] = col_dist_sums[new_last_col_num][y][x]; diff --git a/modules/photo/src/fast_nlmeans_denoising_invoker_commons.hpp b/modules/photo/src/fast_nlmeans_denoising_invoker_commons.hpp index d77ca3e1f7..dbb4c5eb33 100644 --- a/modules/photo/src/fast_nlmeans_denoising_invoker_commons.hpp +++ b/modules/photo/src/fast_nlmeans_denoising_invoker_commons.hpp @@ -83,63 +83,63 @@ template struct pixelInfo: public pixelInfo_ class DistAbs { - template struct calcDist_ + template struct calcDist_ { - static inline IT f(const T a, const T b) + static inline int f(const T a, const T b) { - return std::abs((IT)(a-b)); + return std::abs((int)(a-b)); } }; - template struct calcDist_, IT> + template struct calcDist_ > { - static inline IT f(const Vec a, const Vec b) + static inline int f(const Vec a, const Vec b) { - return std::abs((IT)(a[0]-b[0])) + std::abs((IT)(a[1]-b[1])); + return std::abs((int)(a[0]-b[0])) + std::abs((int)(a[1]-b[1])); } }; - template struct calcDist_, IT> + template struct calcDist_ > { - static inline IT f(const Vec a, const Vec b) + static inline int f(const Vec a, const Vec b) { return - std::abs((IT)(a[0]-b[0])) + - std::abs((IT)(a[1]-b[1])) + - std::abs((IT)(a[2]-b[2])); + std::abs((int)(a[0]-b[0])) + + std::abs((int)(a[1]-b[1])) + + std::abs((int)(a[2]-b[2])); } }; - template struct calcDist_, IT> + template struct calcDist_ > { - static inline IT f(const Vec a, const Vec b) + static inline int f(const Vec a, const Vec b) { return - std::abs((IT)(a[0]-b[0])) + - std::abs((IT)(a[1]-b[1])) + - std::abs((IT)(a[2]-b[2])) + - std::abs((IT)(a[3]-b[3])); + std::abs((int)(a[0]-b[0])) + + std::abs((int)(a[1]-b[1])) + + std::abs((int)(a[2]-b[2])) + + std::abs((int)(a[3]-b[3])); } }; public: - template static inline IT calcDist(const T a, const T b) + template static inline int calcDist(const T a, const T b) { - return calcDist_::f(a, b); + return calcDist_::f(a, b); } - template - static inline IT calcDist(const Mat& m, int i1, int j1, int i2, int j2) + template + static inline int calcDist(const Mat& m, int i1, int j1, int i2, int j2) { const T a = m.at(i1, j1); const T b = m.at(i2, j2); - return calcDist(a,b); + return calcDist(a,b); } - template - static inline IT calcUpDownDist(T a_up, T a_down, T b_up, T b_down) + template + static inline int calcUpDownDist(T a_up, T a_down, T b_up, T b_down) { - return calcDist(a_down, b_down) - calcDist(a_up, b_up); + return calcDist(a_down, b_down) - calcDist(a_up, b_up); }; template @@ -148,93 +148,93 @@ public: return std::exp(-dist*dist / (h * h * pixelInfo::channels)); } - template + template static double maxDist() { - return (IT)pixelInfo::sampleMax() * (IT)pixelInfo::channels; + return (int)pixelInfo::sampleMax() * pixelInfo::channels; } }; class DistSquared { - template struct calcDist_ + template struct calcDist_ { - static inline IT f(const T a, const T b) + static inline int f(const T a, const T b) { - return (IT)(a-b) * (IT)(a-b); + return (int)(a-b) * (int)(a-b); } }; - template struct calcDist_, IT> + template struct calcDist_ > { - static inline IT f(const Vec a, const Vec b) + static inline int f(const Vec a, const Vec b) { - return (IT)(a[0]-b[0])*(IT)(a[0]-b[0]) + (IT)(a[1]-b[1])*(IT)(a[1]-b[1]); + return (int)(a[0]-b[0])*(int)(a[0]-b[0]) + (int)(a[1]-b[1])*(int)(a[1]-b[1]); } }; - template struct calcDist_, IT> + template struct calcDist_ > { - static inline IT f(const Vec a, const Vec b) + static inline int f(const Vec a, const Vec b) { return - (IT)(a[0]-b[0])*(IT)(a[0]-b[0]) + - (IT)(a[1]-b[1])*(IT)(a[1]-b[1]) + - (IT)(a[2]-b[2])*(IT)(a[2]-b[2]); + (int)(a[0]-b[0])*(int)(a[0]-b[0]) + + (int)(a[1]-b[1])*(int)(a[1]-b[1]) + + (int)(a[2]-b[2])*(int)(a[2]-b[2]); } }; - template struct calcDist_, IT> + template struct calcDist_ > { - static inline IT f(const Vec a, const Vec b) + static inline int f(const Vec a, const Vec b) { return - (IT)(a[0]-b[0])*(IT)(a[0]-b[0]) + - (IT)(a[1]-b[1])*(IT)(a[1]-b[1]) + - (IT)(a[2]-b[2])*(IT)(a[2]-b[2]) + - (IT)(a[3]-b[3])*(IT)(a[3]-b[3]); + (int)(a[0]-b[0])*(int)(a[0]-b[0]) + + (int)(a[1]-b[1])*(int)(a[1]-b[1]) + + (int)(a[2]-b[2])*(int)(a[2]-b[2]) + + (int)(a[3]-b[3])*(int)(a[3]-b[3]); } }; - template struct calcUpDownDist_ + template struct calcUpDownDist_ { - static inline IT f(T a_up, T a_down, T b_up, T b_down) + static inline int f(T a_up, T a_down, T b_up, T b_down) { - IT A = a_down - b_down; - IT B = a_up - b_up; + int A = a_down - b_down; + int B = a_up - b_up; return (A-B)*(A+B); } }; - template struct calcUpDownDist_, IT> + template struct calcUpDownDist_ > { private: typedef Vec T; public: - static inline IT f(T a_up, T a_down, T b_up, T b_down) + static inline int f(T a_up, T a_down, T b_up, T b_down) { - return calcDist(a_down, b_down) - calcDist(a_up, b_up); + return calcDist(a_down, b_down) - calcDist(a_up, b_up); } }; public: - template static inline IT calcDist(const T a, const T b) + template static inline int calcDist(const T a, const T b) { - return calcDist_::f(a, b); + return calcDist_::f(a, b); } - template - static inline IT calcDist(const Mat& m, int i1, int j1, int i2, int j2) + template + static inline int calcDist(const Mat& m, int i1, int j1, int i2, int j2) { const T a = m.at(i1, j1); const T b = m.at(i2, j2); - return calcDist(a,b); + return calcDist(a,b); } - template - static inline IT calcUpDownDist(T a_up, T a_down, T b_up, T b_down) + template + static inline int calcUpDownDist(T a_up, T a_down, T b_up, T b_down) { - return calcUpDownDist_::f(a_up, a_down, b_up, b_down); + return calcUpDownDist_::f(a_up, a_down, b_up, b_down); }; template @@ -243,11 +243,11 @@ public: return std::exp(-dist / (h * h * pixelInfo::channels)); } - template + template static double maxDist() { - return (IT)pixelInfo::sampleMax() * (IT)pixelInfo::sampleMax() * - (IT)pixelInfo::channels; + return (int)pixelInfo::sampleMax() * (int)pixelInfo::sampleMax() * + pixelInfo::channels; } }; diff --git a/modules/photo/src/fast_nlmeans_multi_denoising_invoker.hpp b/modules/photo/src/fast_nlmeans_multi_denoising_invoker.hpp index eb20786435..f1a334040c 100644 --- a/modules/photo/src/fast_nlmeans_multi_denoising_invoker.hpp +++ b/modules/photo/src/fast_nlmeans_multi_denoising_invoker.hpp @@ -85,13 +85,13 @@ private: int almost_template_window_size_sq_bin_shift; std::vector almost_dist2weight; - void calcDistSumsForFirstElementInRow(int i, Array3d& dist_sums, - Array4d& col_dist_sums, - Array4d& up_col_dist_sums) const; + void calcDistSumsForFirstElementInRow(int i, Array3d& dist_sums, + Array4d& col_dist_sums, + Array4d& up_col_dist_sums) const; void calcDistSumsForElementInFirstRow(int i, int j, int first_col_num, - Array3d& dist_sums, Array4d& col_dist_sums, - Array4d& up_col_dist_sums) const; + Array3d& dist_sums, Array4d& col_dist_sums, + Array4d& up_col_dist_sums) const; }; template @@ -139,8 +139,8 @@ FastNlMeansMultiDenoisingInvoker::FastNlMeansMultiDenoisingInvoke int almost_template_window_size_sq = 1 << almost_template_window_size_sq_bin_shift; double almost_dist2actual_dist_multiplier = (double) almost_template_window_size_sq / template_window_size_sq; - IT max_dist = D::template maxDist(); - int almost_max_dist = (int) (max_dist / almost_dist2actual_dist_multiplier + 1); + int max_dist = D::template maxDist(); + int almost_max_dist = (int)(max_dist / almost_dist2actual_dist_multiplier + 1); almost_dist2weight.resize(almost_max_dist); const double WEIGHT_THRESHOLD = 0.001; @@ -166,13 +166,13 @@ void FastNlMeansMultiDenoisingInvoker::operator() (const Range& r int row_from = range.start; int row_to = range.end - 1; - Array3d dist_sums(temporal_window_size_, search_window_size_, search_window_size_); + Array3d dist_sums(temporal_window_size_, search_window_size_, search_window_size_); // for lazy calc optimization - Array4d col_dist_sums(template_window_size_, temporal_window_size_, search_window_size_, search_window_size_); + Array4d col_dist_sums(template_window_size_, temporal_window_size_, search_window_size_, search_window_size_); int first_col_num = -1; - Array4d up_col_dist_sums(cols_, temporal_window_size_, search_window_size_, search_window_size_); + Array4d up_col_dist_sums(cols_, temporal_window_size_, search_window_size_, search_window_size_); for (int i = row_from; i <= row_to; i++) { @@ -216,15 +216,15 @@ void FastNlMeansMultiDenoisingInvoker::operator() (const Range& r for (int d = 0; d < temporal_window_size_; d++) { Mat cur_extended_src = extended_srcs_[d]; - Array2d cur_dist_sums = dist_sums[d]; - Array2d cur_col_dist_sums = col_dist_sums[first_col_num][d]; - Array2d cur_up_col_dist_sums = up_col_dist_sums[j][d]; + Array2d cur_dist_sums = dist_sums[d]; + Array2d cur_col_dist_sums = col_dist_sums[first_col_num][d]; + Array2d cur_up_col_dist_sums = up_col_dist_sums[j][d]; for (int y = 0; y < search_window_size; y++) { - IT* dist_sums_row = cur_dist_sums.row_ptr(y); + int* dist_sums_row = cur_dist_sums.row_ptr(y); - IT* col_dist_sums_row = cur_col_dist_sums.row_ptr(y); - IT* up_col_dist_sums_row = cur_up_col_dist_sums.row_ptr(y); + int* col_dist_sums_row = cur_col_dist_sums.row_ptr(y); + int* up_col_dist_sums_row = cur_up_col_dist_sums.row_ptr(y); const T* b_up_ptr = cur_extended_src.ptr(start_by - template_window_half_size_ - 1 + y); const T* b_down_ptr = cur_extended_src.ptr(start_by + template_window_half_size_ + y); @@ -234,7 +234,7 @@ void FastNlMeansMultiDenoisingInvoker::operator() (const Range& r dist_sums_row[x] -= col_dist_sums_row[x]; col_dist_sums_row[x] = up_col_dist_sums_row[x] + - D::template calcUpDownDist(a_up, a_down, b_up_ptr[start_bx + x], b_down_ptr[start_bx + x]); + D::template calcUpDownDist(a_up, a_down, b_up_ptr[start_bx + x], b_down_ptr[start_bx + x]); dist_sums_row[x] += col_dist_sums_row[x]; up_col_dist_sums_row[x] = col_dist_sums_row[x]; @@ -260,11 +260,11 @@ void FastNlMeansMultiDenoisingInvoker::operator() (const Range& r { const T* cur_row_ptr = esrc_d.ptr(border_size_ + search_window_y + y); - IT* dist_sums_row = dist_sums.row_ptr(d, y); + int* dist_sums_row = dist_sums.row_ptr(d, y); for (int x = 0; x < search_window_size_; x++) { - size_t almostAvgDist = (size_t)(dist_sums_row[x] >> almost_template_window_size_sq_bin_shift); + int almostAvgDist = dist_sums_row[x] >> almost_template_window_size_sq_bin_shift; IT weight = almost_dist2weight[almostAvgDist]; weights_sum += weight; @@ -286,7 +286,7 @@ void FastNlMeansMultiDenoisingInvoker::operator() (const Range& r template inline void FastNlMeansMultiDenoisingInvoker::calcDistSumsForFirstElementInRow( - int i, Array3d& dist_sums, Array4d& col_dist_sums, Array4d& up_col_dist_sums) const + int i, Array3d& dist_sums, Array4d& col_dist_sums, Array4d& up_col_dist_sums) const { int j = 0; @@ -303,14 +303,14 @@ inline void FastNlMeansMultiDenoisingInvoker::calcDistSumsForFirs int start_y = i + y - search_window_half_size_; int start_x = j + x - search_window_half_size_; - IT* dist_sums_ptr = &dist_sums[d][y][x]; - IT* col_dist_sums_ptr = &col_dist_sums[0][d][y][x]; + int* dist_sums_ptr = &dist_sums[d][y][x]; + int* col_dist_sums_ptr = &col_dist_sums[0][d][y][x]; int col_dist_sums_step = col_dist_sums.step_size(0); for (int tx = -template_window_half_size_; tx <= template_window_half_size_; tx++) { for (int ty = -template_window_half_size_; ty <= template_window_half_size_; ty++) { - IT dist = D::template calcDist( + int dist = D::template calcDist( main_extended_src_.at(border_size_ + i + ty, border_size_ + j + tx), cur_extended_src.at(border_size_ + start_y + ty, border_size_ + start_x + tx)); @@ -327,8 +327,8 @@ inline void FastNlMeansMultiDenoisingInvoker::calcDistSumsForFirs template inline void FastNlMeansMultiDenoisingInvoker::calcDistSumsForElementInFirstRow( - int i, int j, int first_col_num, Array3d& dist_sums, - Array4d& col_dist_sums, Array4d& up_col_dist_sums) const + int i, int j, int first_col_num, Array3d& dist_sums, + Array4d& col_dist_sums, Array4d& up_col_dist_sums) const { int ay = border_size_ + i; int ax = border_size_ + j + template_window_half_size_; @@ -350,10 +350,10 @@ inline void FastNlMeansMultiDenoisingInvoker::calcDistSumsForElem int by = start_by + y; int bx = start_bx + x; - IT* col_dist_sums_ptr = &col_dist_sums[new_last_col_num][d][y][x]; + int* col_dist_sums_ptr = &col_dist_sums[new_last_col_num][d][y][x]; for (int ty = -template_window_half_size_; ty <= template_window_half_size_; ty++) { - *col_dist_sums_ptr += D::template calcDist( + *col_dist_sums_ptr += D::template calcDist( main_extended_src_.at(ay + ty, ax), cur_extended_src.at(by + ty, bx)); }