MCPcopy Create free account
hub / github.com/arrayfire/arrayfire / edgeTrackingHysteresis

Function edgeTrackingHysteresis

src/backend/cuda/kernel/canny.hpp:51–93  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

49
50template<typename T>
51void edgeTrackingHysteresis(Param<T> output, CParam<T> strong, CParam<T> weak) {
52 auto initEdgeOut = common::getKernel(
53 "arrayfire::cuda::initEdgeOut", {{canny_cuh_src}},
54 TemplateArgs(TemplateTypename<T>()),
55 {{DefineValue(STRONG), DefineValue(WEAK), DefineValue(NOEDGE),
56 DefineValue(THREADS_X), DefineValue(THREADS_Y)}});
57 auto edgeTrack = common::getKernel(
58 "arrayfire::cuda::edgeTrack", {{canny_cuh_src}},
59 TemplateArgs(TemplateTypename<T>()),
60 {{DefineValue(STRONG), DefineValue(WEAK), DefineValue(NOEDGE),
61 DefineValue(THREADS_X), DefineValue(THREADS_Y)}});
62 auto suppressLeftOver = common::getKernel(
63 "arrayfire::cuda::suppressLeftOver", {{canny_cuh_src}},
64 TemplateArgs(TemplateTypename<T>()),
65 {{DefineValue(STRONG), DefineValue(WEAK), DefineValue(NOEDGE),
66 DefineValue(THREADS_X), DefineValue(THREADS_Y)}});
67
68 dim3 threads(kernel::THREADS_X, kernel::THREADS_Y);
69
70 // Launch only threads to process non-border pixels
71 int blk_x = divup(weak.dims[0] - 2, threads.x);
72 int blk_y = divup(weak.dims[1] - 2, threads.y);
73
74 // launch batch * blk_x blocks along x dimension
75 dim3 blocks(blk_x * weak.dims[2], blk_y * weak.dims[3]);
76
77 EnqueueArgs qArgs(blocks, threads, getActiveStream());
78 initEdgeOut(qArgs, output, strong, weak, blk_x, blk_y);
79 POST_LAUNCH_CHECK();
80
81 auto flagPtr = edgeTrack.getDevPtr("hasChanged");
82
83 int notFinished = 1;
84 while (notFinished) {
85 notFinished = 0;
86 edgeTrack.setFlag(flagPtr, &notFinished);
87 edgeTrack(qArgs, output, blk_x, blk_y);
88 POST_LAUNCH_CHECK();
89 notFinished = edgeTrack.getFlag(flagPtr);
90 }
91 suppressLeftOver(qArgs, output, blk_x, blk_y);
92 POST_LAUNCH_CHECK();
93}
94} // namespace kernel
95} // namespace cuda
96} // namespace arrayfire

Callers

nothing calls this directly

Calls 8

TemplateArgsFunction · 0.85
getActiveStreamFunction · 0.85
initEdgeOutFunction · 0.85
suppressLeftOverFunction · 0.85
getKernelFunction · 0.50
getDevPtrMethod · 0.45
setFlagMethod · 0.45
getFlagMethod · 0.45

Tested by

no test coverage detected