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
8bc385fe
Commit
8bc385fe
authored
Aug 08, 2014
by
jaco
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
tuning + morphology operators added + code cleaning
parent
c82bd87c
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
26 additions
and
125 deletions
+26
-125
computeSaliency.cpp
modules/saliency/samples/computeSaliency.cpp
+1
-1
motionSaliencyBinWangApr2014.cpp
modules/saliency/src/motionSaliencyBinWangApr2014.cpp
+25
-124
No files found.
modules/saliency/samples/computeSaliency.cpp
View file @
8bc385fe
...
...
@@ -208,7 +208,7 @@ int main( int argc, char** argv )
Mat
saliencyMap
;
if
(
saliencyAlgorithm
->
computeSaliency
(
frame
,
saliencyMap
)
)
{
std
::
cout
<<
"motion saliency done"
<<
std
::
endl
;
//
std::cout << "motion saliency done" << std::endl;
}
imshow
(
"image"
,
frame
);
...
...
modules/saliency/src/motionSaliencyBinWangApr2014.cpp
View file @
8bc385fe
...
...
@@ -43,6 +43,9 @@
//TODO delete highgui include
#include <opencv2/highgui.hpp>
#define thetaA_VAL 200
#define thetaL_VAL 250
namespace
cv
{
...
...
@@ -63,8 +66,8 @@ MotionSaliencyBinWangApr2014::MotionSaliencyBinWangApr2014()
alpha
=
0.01
;
// Learning rate
L0
=
300
;
// Upper-bound values for C0 (efficacy of the first template (matrices) of backgroundModel
L1
=
200
;
// Upper-bound values for C1 (efficacy of the second template (matrices) of backgroundModel
thetaL
=
30
;
// T0, T1 swap threshold
thetaA
=
15
;
thetaL
=
thetaL_VAL
;
// T0, T1 swap threshold
thetaA
=
thetaA_VAL
;
gamma
=
3
;
neighborhoodCheck
=
true
;
...
...
@@ -74,7 +77,7 @@ MotionSaliencyBinWangApr2014::MotionSaliencyBinWangApr2014()
bool
MotionSaliencyBinWangApr2014
::
init
()
{
epslonPixelsValue
=
Mat
(
imgSize
->
height
,
imgSize
->
width
,
CV_32F
,
Scalar
(
7
0
)
);
epslonPixelsValue
=
Mat
(
imgSize
->
height
,
imgSize
->
width
,
CV_32F
,
Scalar
(
2
0
)
);
// Median of range [18, 80] advised in reference paper.
// Since data is even, the median is estimated using two values that occupy
// the position (n / 2) and ((n / 2) +1) (choose their arithmetic mean).
...
...
@@ -89,7 +92,7 @@ bool MotionSaliencyBinWangApr2014::init()
{
Mat
*
tmpm
=
new
Mat
;
tmpm
->
create
(
imgSize
->
height
,
imgSize
->
width
,
CV_32FC2
);
tmpm
->
setTo
(
Scalar
(
NAN
,
0
)
);
tmpm
->
setTo
(
Scalar
(
NAN
,
0
)
);
Ptr
<
Mat
>
tmp
=
Ptr
<
Mat
>
(
tmpm
);
backgroundModel
[
i
]
=
tmp
;
}
...
...
@@ -112,22 +115,16 @@ bool MotionSaliencyBinWangApr2014::fullResolutionDetection( const Mat& image2, M
float
currentEpslonValue
;
bool
backgFlag
=
false
;
Mat
test
(
image
.
rows
,
image
.
cols
,
CV_8U
);
Mat
test1
(
image
.
rows
,
image
.
cols
,
CV_8U
);
test
.
setTo
(
255
);
for
(
int
i
=
0
;
i
<
test
.
rows
;
i
++
)
for
(
int
i
=
0
;
i
<=
K
;
i
++
)
{
for
(
int
j
=
0
;
j
<
test
.
cols
;
j
++
)
{
if
(
backgroundModel
[
0
]
->
at
<
Vec2f
>
(
i
,
j
)[
1
]
==
0
)
{
test
.
at
<
uchar
>
(
i
,
j
)
=
0
;
}
test1
.
at
<
uchar
>
(
i
,
j
)
=
(
int
)
backgroundModel
[
0
]
->
at
<
Vec2f
>
(
i
,
j
)[
0
]
;
vector
<
Mat
>
spl
;
split
(
*
(
backgroundModel
[
i
]
),
spl
);
stringstream
windowTitle
;
windowTitle
<<
"TEST_t"
<<
i
<<
"B"
;
Mat
convert
;
spl
.
at
(
0
).
convertTo
(
convert
,
CV_8UC1
);
imshow
(
windowTitle
.
str
().
c_str
(),
convert
)
;
}
}
imshow
(
"test_T0c"
,
test
);
imshow
(
"test_T0b"
,
test1
);
// Initially, all pixels are considered as foreground and then we evaluate with the background model
highResBFMask
.
create
(
image
.
rows
,
image
.
cols
,
CV_32F
);
...
...
@@ -154,9 +151,6 @@ bool MotionSaliencyBinWangApr2014::fullResolutionDetection( const Mat& image2, M
currentPixelValue
=
pImage
[
j
];
currentEpslonValue
=
pEpslon
[
j
];
if
(
i
==
50
&&
j
==
50
)
cout
<<
"currentPixelValue :"
<<
currentPixelValue
<<
endl
<<
"currentEpslonValue :"
<<
currentEpslonValue
<<
endl
;
int
counter
=
0
;
for
(
size_t
z
=
0
;
z
<
backgroundModel
.
size
();
z
++
)
{
...
...
@@ -175,12 +169,7 @@ bool MotionSaliencyBinWangApr2014::fullResolutionDetection( const Mat& image2, M
currentB
=
&
(
backgroundModel
.
at
(
z
)
->
at
<
Vec2f
>
(
i
,
j
)[
0
]
);
currentC
=
&
(
backgroundModel
.
at
(
z
)
->
at
<
Vec2f
>
(
i
,
j
)[
1
]
);
if
(
i
==
50
&&
j
==
50
)
{
cout
<<
"zeta:"
<<
z
<<
" currentB :"
<<
*
currentB
<<
endl
<<
"currentC :"
<<
*
currentC
<<
endl
;
}
//continue;
if
(
(
*
currentC
)
>
0
)
//The current template is active
{
//cout<< "DIFFERENCE: "<<abs( currentPixelValue - ( *currentB ) )<<endl;
...
...
@@ -206,12 +195,6 @@ bool MotionSaliencyBinWangApr2014::fullResolutionDetection( const Mat& image2, M
}
if
(
i
==
50
&&
j
==
50
)
{
cout
<<
"DOPO IF: "
<<
endl
;
cout
<<
"zeta:"
<<
z
<<
" currentB_A :"
<<
currentB
<<
endl
<<
"currentC_A :"
<<
currentC
<<
endl
;
cout
<<
"zeta:"
<<
z
<<
" currentB :"
<<
*
currentB
<<
endl
<<
"currentC :"
<<
*
currentC
<<
endl
<<
endl
;
}
}
// end "for" cicle of template vector
}
...
...
@@ -223,8 +206,6 @@ bool MotionSaliencyBinWangApr2014::fullResolutionDetection( const Mat& image2, M
}
}
// end "for" cicle of all image's pixels
//cout<<" STATISTICA :"<<countDec<<"/"<< image.rows*image.cols<< " = "<<(float)countDec/(float)(image.rows*image.cols)*100<<" %"<<endl;
return
true
;
}
...
...
@@ -385,7 +366,7 @@ bool MotionSaliencyBinWangApr2014::templateOrdering()
}
bool
MotionSaliencyBinWangApr2014
::
templateReplacement
(
const
Mat
&
finalBFMask
,
const
Mat
&
image
)
{
Mat
test
(
image
.
rows
,
image
.
cols
,
CV_8U
);
/*
Mat test( image.rows, image.cols, CV_8U );
for ( int i = 0; i < test.rows; i++ )
{
for ( int j = 0; j < test.cols; j++ )
...
...
@@ -394,7 +375,7 @@ bool MotionSaliencyBinWangApr2014::templateReplacement( const Mat& finalBFMask,
test.at<uchar>( i, j ) = (int) potentialBackground.at<Vec2f>( i, j )[0];
}
}
imshow
(
"test_BA"
,
test
);
imshow( "test_BA", test );
*/
std
::
vector
<
Mat
>
temp
;
split
(
*
backgroundModel
[
0
],
temp
);
...
...
@@ -403,12 +384,14 @@ bool MotionSaliencyBinWangApr2014::templateReplacement( const Mat& finalBFMask,
if
(
countNonZero
(
temp
.
at
(
1
)
)
<=
(
temp
.
at
(
1
).
cols
*
temp
.
at
(
1
).
rows
)
/
2
)
{
thetaA
=
15
;
thetaL
=
40
;
neighborhoodCheck
=
false
;
}
else
{
thetaA
=
15
;
thetaA
=
thetaA_VAL
;
thetaL
=
thetaL_VAL
;
neighborhoodCheck
=
true
;
}
...
...
@@ -565,42 +548,6 @@ bool MotionSaliencyBinWangApr2014::computeSaliencyImpl( const InputArray image,
t.setTo( 50 );
backgroundModel.at( 0 ) = t; */
std
::
ofstream
ofs4
;
ofs4
.
open
(
"TEMPLATE_0_B.txt"
,
std
::
ofstream
::
out
);
for
(
int
i
=
0
;
i
<
backgroundModel
[
0
]
->
rows
;
i
++
)
{
for
(
int
j
=
0
;
j
<
backgroundModel
[
0
]
->
cols
;
j
++
)
{
//highResBFMask.at<int>( i, j ) = i + j;
stringstream
str
;
str
<<
backgroundModel
[
0
]
->
at
<
Vec2f
>
(
i
,
j
)[
0
]
<<
" "
;
ofs4
<<
str
.
str
();
}
stringstream
str2
;
str2
<<
"
\n
"
;
ofs4
<<
str2
.
str
();
}
ofs4
.
close
();
std
::
ofstream
ofs5
;
ofs5
.
open
(
"TEMPLATE_0_C.txt"
,
std
::
ofstream
::
out
);
for
(
int
i
=
0
;
i
<
backgroundModel
[
0
]
->
rows
;
i
++
)
{
for
(
int
j
=
0
;
j
<
backgroundModel
[
0
]
->
cols
;
j
++
)
{
//highResBFMask.at<int>( i, j ) = i + j;
stringstream
str
;
str
<<
backgroundModel
[
0
]
->
at
<
Vec2f
>
(
i
,
j
)[
1
]
<<
" "
;
ofs5
<<
str
.
str
();
}
stringstream
str2
;
str2
<<
"
\n
"
;
ofs5
<<
str2
.
str
();
}
ofs5
.
close
();
fullResolutionDetection
(
image
.
getMat
(),
highResBFMask
);
lowResolutionDetection
(
image
.
getMat
(),
lowResBFMask
);
...
...
@@ -620,59 +567,13 @@ bool MotionSaliencyBinWangApr2014::computeSaliencyImpl( const InputArray image,
//templateReplacement( highResBFMask, image.getMat() );
templateOrdering
();
//highResBFMask.copyTo( saliencyMap
);
std
::
ofstream
ofs
;
ofs
.
open
(
"highResBFMask.txt"
,
std
::
ofstream
::
out
);
/* Mat kernel = getStructuringElement( MORPH_RECT, Size( 3, 3 )
);
Mat kernel2 = getStructuringElement( MORPH_RECT, Size( 3, 3 ));
morphologyEx(saliencyMap.getMat(), saliencyMap.getMat(), MORPH_OPEN, kernel)
;
morphologyEx(saliencyMap.getMat(), saliencyMap.getMat(), MORPH_CLOSE, kernel2);*/
for
(
int
i
=
0
;
i
<
highResBFMask
.
rows
;
i
++
)
{
for
(
int
j
=
0
;
j
<
highResBFMask
.
cols
;
j
++
)
{
//highResBFMask.at<int>( i, j ) = i + j;
stringstream
str
;
str
<<
highResBFMask
.
at
<
float
>
(
i
,
j
)
<<
" "
;
ofs
<<
str
.
str
();
}
stringstream
str2
;
str2
<<
"
\n
"
;
ofs
<<
str2
.
str
();
}
ofs
.
close
();
std
::
ofstream
ofs2
;
ofs2
.
open
(
"lowResBFMask.txt"
,
std
::
ofstream
::
out
);
for
(
int
i
=
0
;
i
<
lowResBFMask
.
rows
;
i
++
)
{
for
(
int
j
=
0
;
j
<
lowResBFMask
.
cols
;
j
++
)
{
stringstream
str
;
str
<<
lowResBFMask
.
at
<
float
>
(
i
,
j
)
<<
" "
;
ofs2
<<
str
.
str
();
}
stringstream
str2
;
str2
<<
"
\n
"
;
ofs2
<<
str2
.
str
();
}
ofs2
.
close
();
std
::
ofstream
ofs3
;
ofs3
.
open
(
"SALMAP.txt"
,
std
::
ofstream
::
out
);
//highResBFMask.copyTo( saliencyMap );
for
(
int
i
=
0
;
i
<
saliencyMap
.
getMat
().
rows
;
i
++
)
{
for
(
int
j
=
0
;
j
<
saliencyMap
.
getMat
().
cols
;
j
++
)
{
stringstream
str
;
str
<<
saliencyMap
.
getMat
().
at
<
float
>
(
i
,
j
)
<<
" "
;
ofs3
<<
str
.
str
();
}
stringstream
str2
;
str2
<<
"
\n
"
;
ofs3
<<
str2
.
str
();
}
ofs3
.
close
();
return
true
;
}
...
...
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