Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
O
opencv_contrib
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
opencv_contrib
Commits
24d9e616
Commit
24d9e616
authored
Dec 11, 2015
by
Vadim Pisarevsky
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #452 from jesusbriales:fixSubpixelPrecision
parents
926fc203
ad765a75
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
24 additions
and
23 deletions
+24
-23
LSDDetector.cpp
modules/line_descriptor/src/LSDDetector.cpp
+24
-23
No files found.
modules/line_descriptor/src/LSDDetector.cpp
View file @
24d9e616
...
...
@@ -72,32 +72,32 @@ void LSDDetector::computeGaussianPyramid( const Mat& image, int numOctaves, int
}
/* check lines' extremes */
inline
void
checkLineExtremes
(
cv
::
Vec4
i
&
extremes
,
cv
::
Size
imageSize
)
inline
void
checkLineExtremes
(
cv
::
Vec4
f
&
extremes
,
cv
::
Size
imageSize
)
{
if
(
extremes
[
0
]
<
0
)
extremes
[
0
]
=
0
;
if
(
extremes
[
0
]
>=
imageSize
.
width
)
extremes
[
0
]
=
imageSize
.
width
-
1
;
extremes
[
0
]
=
(
float
)
imageSize
.
width
-
1.0
f
;
if
(
extremes
[
2
]
<
0
)
extremes
[
2
]
=
0
;
if
(
extremes
[
2
]
>=
imageSize
.
width
)
extremes
[
2
]
=
imageSize
.
width
-
1
;
extremes
[
2
]
=
(
float
)
imageSize
.
width
-
1.0
f
;
if
(
extremes
[
1
]
<
0
)
extremes
[
1
]
=
0
;
if
(
extremes
[
1
]
>=
imageSize
.
height
)
extremes
[
1
]
=
imageSize
.
height
-
1
;
extremes
[
1
]
=
(
float
)
imageSize
.
height
-
1.0
f
;
if
(
extremes
[
3
]
<
0
)
extremes
[
3
]
=
0
;
if
(
extremes
[
3
]
>=
imageSize
.
height
)
extremes
[
3
]
=
imageSize
.
height
-
1
;
extremes
[
3
]
=
(
float
)
imageSize
.
height
-
1.0
f
;
}
/* requires line detection (only one image) */
...
...
@@ -148,48 +148,49 @@ void LSDDetector::detectImpl( const Mat& imageSrc, std::vector<KeyLine>& keyline
cv
::
Ptr
<
cv
::
LineSegmentDetector
>
ls
=
cv
::
createLineSegmentDetector
(
cv
::
LSD_REFINE_ADV
);
/* prepare a vector to host extracted segments */
std
::
vector
<
std
::
vector
<
cv
::
Vec4
i
>
>
lines_lsd
;
std
::
vector
<
std
::
vector
<
cv
::
Vec4
f
>
>
lines_lsd
;
/* extract lines */
for
(
int
i
=
0
;
i
<
numOctaves
;
i
++
)
{
std
::
vector
<
Vec4
i
>
octave_lines
;
std
::
vector
<
Vec4
f
>
octave_lines
;
ls
->
detect
(
gaussianPyrs
[
i
],
octave_lines
);
lines_lsd
.
push_back
(
octave_lines
);
}
/* create keylines */
int
class_counter
=
-
1
;
for
(
int
j
=
0
;
j
<
(
int
)
lines_lsd
.
size
();
j
++
)
for
(
int
octaveIdx
=
0
;
octaveIdx
<
(
int
)
lines_lsd
.
size
();
octaveIdx
++
)
{
for
(
int
k
=
0
;
k
<
(
int
)
lines_lsd
[
j
].
size
();
k
++
)
float
octaveScale
=
pow
(
(
float
)
scale
,
octaveIdx
);
for
(
int
k
=
0
;
k
<
(
int
)
lines_lsd
[
octaveIdx
].
size
();
k
++
)
{
KeyLine
kl
;
cv
::
Vec4
i
extremes
=
lines_lsd
[
j
][
k
];
cv
::
Vec4
f
extremes
=
lines_lsd
[
octaveIdx
][
k
];
/* check data validity */
checkLineExtremes
(
extremes
,
gaussianPyrs
[
j
].
size
()
);
checkLineExtremes
(
extremes
,
gaussianPyrs
[
octaveIdx
].
size
()
);
/* fill KeyLine's fields */
kl
.
startPointX
=
(
float
)
extremes
[
0
]
;
kl
.
startPointY
=
(
float
)
extremes
[
1
]
;
kl
.
endPointX
=
(
float
)
extremes
[
2
]
;
kl
.
endPointY
=
(
float
)
extremes
[
3
]
;
kl
.
sPointInOctaveX
=
(
float
)
extremes
[
0
];
kl
.
sPointInOctaveY
=
(
float
)
extremes
[
1
];
kl
.
ePointInOctaveX
=
(
float
)
extremes
[
2
];
kl
.
ePointInOctaveY
=
(
float
)
extremes
[
3
];
kl
.
lineLength
=
(
float
)
sqrt
(
pow
(
(
float
)
extremes
[
0
]
-
extremes
[
2
],
2
)
+
pow
(
(
float
)
extremes
[
1
]
-
extremes
[
3
],
2
)
);
kl
.
startPointX
=
extremes
[
0
]
*
octaveScale
;
kl
.
startPointY
=
extremes
[
1
]
*
octaveScale
;
kl
.
endPointX
=
extremes
[
2
]
*
octaveScale
;
kl
.
endPointY
=
extremes
[
3
]
*
octaveScale
;
kl
.
sPointInOctaveX
=
extremes
[
0
];
kl
.
sPointInOctaveY
=
extremes
[
1
];
kl
.
ePointInOctaveX
=
extremes
[
2
];
kl
.
ePointInOctaveY
=
extremes
[
3
];
kl
.
lineLength
=
(
float
)
sqrt
(
pow
(
extremes
[
0
]
-
extremes
[
2
],
2
)
+
pow
(
extremes
[
1
]
-
extremes
[
3
],
2
)
);
/* compute number of pixels covered by line */
LineIterator
li
(
gaussianPyrs
[
j
],
Point
(
extremes
[
0
],
extremes
[
1
]
),
Point
(
extremes
[
2
],
extremes
[
3
]
)
);
LineIterator
li
(
gaussianPyrs
[
octaveIdx
],
Point2f
(
extremes
[
0
],
extremes
[
1
]
),
Point2f
(
extremes
[
2
],
extremes
[
3
]
)
);
kl
.
numOfPixels
=
li
.
count
;
kl
.
angle
=
atan2
(
(
kl
.
endPointY
-
kl
.
startPointY
),
(
kl
.
endPointX
-
kl
.
startPointX
)
);
kl
.
class_id
=
++
class_counter
;
kl
.
octave
=
j
;
kl
.
octave
=
octaveIdx
;
kl
.
size
=
(
kl
.
endPointX
-
kl
.
startPointX
)
*
(
kl
.
endPointY
-
kl
.
startPointY
);
kl
.
response
=
kl
.
lineLength
/
max
(
gaussianPyrs
[
j
].
cols
,
gaussianPyrs
[
j
].
rows
);
kl
.
response
=
kl
.
lineLength
/
max
(
gaussianPyrs
[
octaveIdx
].
cols
,
gaussianPyrs
[
octaveIdx
].
rows
);
kl
.
pt
=
Point2f
(
(
kl
.
endPointX
+
kl
.
startPointX
)
/
2
,
(
kl
.
endPointY
+
kl
.
startPointY
)
/
2
);
keylines
.
push_back
(
kl
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment