void projection_skewed_rows(const T& image, FloatVector* angles, std::vector<IntVector*>& proj) { int y; size_t i; size_t n = angles->size(); FloatVector sina(n); FloatVector cosa(n); for (i = 0; i < n; i++) { sina[i] = sin((*angles)[i] * M_PI / 180.0); cosa[i] = cos((*angles)[i] * M_PI / 180.0); } for (i = 0; i < n; i++) proj[i] = new IntVector(image.nrows(), 0); // compute skewed projections simultanously for (size_t r = 0; r < image.nrows(); ++r) { for (size_t c = 0; c < image.ncols(); ++c) { if (is_black(image.get(Point(c, r)))) { for (i = 0; i < n; i++) { y = (int) round(c*sina[i] + r*cosa[i]); if ((y > 0) && (y < (int)image.nrows())) ++(*(proj[i]))[y]; } } } } }
static inline A0 cosa(const A0& a0){ return cosa(a0, style()); }