MayaFlux 0.5.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 107 of file Gradient.cpp.

108{
109 const size_t n = static_cast<size_t>(w) * h;
111 r.dx.resize(n);
112 r.dy.resize(n);
113 std::vector<float> tmp(n);
114 scharr(gray, r.dx, r.dy, tmp, w, h);
115
116 const auto en = static_cast<Eigen::Index>(n);
117 auto dx = Eigen::Map<const Eigen::ArrayXf>(r.dx.data(), en);
118 auto dy = Eigen::Map<const Eigen::ArrayXf>(r.dy.data(), en);
119 r.magnitude.resize(n);
120 r.angle.resize(n);
121
122 Eigen::Map<Eigen::ArrayXf>(r.magnitude.data(), en) = (dx.square() + dy.square()).sqrt();
123 const float peak = Eigen::Map<const Eigen::ArrayXf>(r.magnitude.data(), en).maxCoeff();
124 if (peak > 0.0F)
125 Eigen::Map<Eigen::ArrayXf>(r.magnitude.data(), en) /= peak;
126
127 P::transform(P::par_unseq, r.dx.begin(), r.dx.end(), r.dy.begin(), r.angle.begin(),
128 [](float gx, float gy) { return std::atan2(gy, gx); });
129 return r;
130}
uint32_t h
Definition InkPress.cpp:28
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:99
double peak(const std::vector< double > &data)
Find peak amplitude in single-channel data.
Definition Yantra.cpp:268
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, MayaFlux::peak(), and scharr().

+ Here is the call graph for this function: