43 #ifndef __OPENCV_VIDEOSTAB_FAST_MARCHING_INL_HPP__
44 #define __OPENCV_VIDEOSTAB_FAST_MARCHING_INL_HPP__
53 template <
typename Inpa
int>
59 CV_Assert(mask.
type() == CV_8U);
61 static const int lut[4][2] = {{-1,0}, {0,-1}, {1,0}, {0,1}};
64 flag_.create(mask.
size());
65 dist_.create(mask.
size());
66 index_.create(mask.
size());
71 for (
int y = 0;
y < flag_.rows; ++
y)
73 for (
int x = 0;
x < flag_.cols; ++
x)
75 if (flag_(
y,
x) == KNOWN)
82 for (
int i = 0; i < 4; ++i)
84 int xn =
x +
lut[i][0];
85 int yn =
y + lut[i][1];
87 if (xn >= 0 && xn < flag_.cols && yn >= 0 && yn < flag_.rows)
90 if (flag_(yn,xn) != KNOWN)
95 if (n>0 && nunknown == n)
106 narrowBand_.push_back(DXY(0.
f,
x,
y));
107 index_(
y,
x) = size_++;
114 for (
int i = size_/2-1; i >= 0; --i)
120 int x = narrowBand_[0].x;
121 int y = narrowBand_[0].y;
125 for (
int n = 0;
n < 4; ++
n)
127 int xn = x +
lut[
n][0];
128 int yn = y + lut[
n][1];
130 if (xn >= 0 && xn < flag_.cols && yn >= 0 && yn < flag_.rows && flag_(yn,xn) != KNOWN)
132 dist_(yn,xn) =
min(
min(
solve(xn-1, yn, xn, yn-1),
solve(xn+1, yn, xn, yn-1)),
135 if (flag_(yn,xn) == INSIDE)
139 heapAdd(DXY(dist_(yn,xn),xn,yn));
143 int i = index_(yn,xn);
144 if (dist_(yn,xn) < narrowBand_[i].
dist)
146 narrowBand_[i].dist = dist_(yn,xn);
GLenum GLint GLint y
Definition: core_c.h:613
CvArr const CvArr * lut
Definition: core_c.h:1439
CV_EXPORTS_W void inpaint(InputArray src, InputArray inpaintMask, OutputArray dst, double inpaintRadius, int flags)
restores the damaged image areas using one of the available intpainting algorithms ...
void copyTo(OutputArray m) const
copies the matrix content to "m".
CV_EXPORTS_W bool solve(InputArray src1, InputArray src2, OutputArray dst, int flags=DECOMP_LU)
solves linear system or a least-square problem
int type() const
returns element type, similar to CV_MAT_TYPE(cvmat->type)
Definition: mat.hpp:399
CV_EXPORTS_W void min(InputArray src1, InputArray src2, OutputArray dst)
computes per-element minimum of two arrays (dst = min(src1, src2))
GLenum GLint x
Definition: core_c.h:632
The n-dimensional matrix class.
Definition: core.hpp:1688
int int y
Definition: highgui_c.h:186
int n
Definition: legacy.hpp:3070
int x
Definition: highgui_c.h:186
MSize size
Definition: core.hpp:2006
GLenum GLint GLuint mask
Definition: tracking.hpp:132
CvPoint3D64f double * dist
Definition: legacy.hpp:556
Inpaint run(const Mat &mask, Inpaint inpaint)
Definition: fast_marching_inl.hpp:54