MayaFlux 1.0.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ scharr() [2/2]

MAYAFLUX_API GradientResult MayaFlux::Kinesis::Vision::scharr ( std::span< const float >  gray,
uint32_t  w,
uint32_t  h 
)

Scharr gradient operator.

3x3 Scharr kernels. Better rotational symmetry than Sobel. Same output contract as sobel().

Parameters
graySingle-channel float span, size must be w * h.
wImage width in pixels.
hImage height in pixels.
Returns
GradientResult with all four maps populated.

Definition at line 105 of file Gradient.cpp.

106{
107 const size_t n = static_cast<size_t>(w) * h;
109 r.dx.resize(n);
110 r.dy.resize(n);
111 std::vector<float> tmp(n);
112 scharr(gray, r.dx, r.dy, tmp, w, h);
113
114 const auto en = static_cast<Eigen::Index>(n);
115 auto dx = Eigen::Map<const Eigen::ArrayXf>(r.dx.data(), en);
116 auto dy = Eigen::Map<const Eigen::ArrayXf>(r.dy.data(), en);
117 r.magnitude.resize(n);
118 r.angle.resize(n);
119
120 Eigen::Map<Eigen::ArrayXf>(r.magnitude.data(), en) = (dx.square() + dy.square()).sqrt();
121 const float peak = Eigen::Map<const Eigen::ArrayXf>(r.magnitude.data(), en).maxCoeff();
122 if (peak > 0.0F)
123 Eigen::Map<Eigen::ArrayXf>(r.magnitude.data(), en) /= peak;
124
125 std::transform(std::execution::par_unseq, r.dx.begin(), r.dx.end(), r.dy.begin(), r.angle.begin(),
126 [](float gx, float gy) { return std::atan2(gy, gx); });
127 return r;
128}
uint32_t h
Definition InkPress.cpp:29
void scharr(std::span< const float > gray, std::span< float > dx, std::span< float > dy, std::span< float > tmp, uint32_t w, uint32_t h)
Scharr gradient writing dx and dy into caller-supplied buffers.
Definition Gradient.cpp:97
std::vector< float > angle
Gradient angle in radians, [-pi, pi].
Definition Gradient.hpp:26
std::vector< float > magnitude
Gradient magnitude, normalised to [0, 1].
Definition Gradient.hpp:25
std::vector< float > dx
Horizontal gradient component.
Definition Gradient.hpp:23
std::vector< float > dy
Vertical gradient component.
Definition Gradient.hpp:24
Gradient maps produced by Sobel and Scharr operators.
Definition Gradient.hpp:22

References MayaFlux::Kinesis::Vision::GradientResult::angle, MayaFlux::Kinesis::Vision::GradientResult::dx, MayaFlux::Kinesis::Vision::GradientResult::dy, h, MayaFlux::Kinesis::Vision::GradientResult::magnitude, and scharr().

+ Here is the call graph for this function: