Skip to content

Commit 55326e4

Browse files
committed
fix patchGenerator overflow bug
1 parent 86e0b2f commit 55326e4

File tree

3 files changed

+12
-11
lines changed

3 files changed

+12
-11
lines changed

modules/saliency/include/opencv2/saliency/saliencySpecializedClasses.hpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -342,7 +342,7 @@ class CV_EXPORTS_W DiscriminantSaliency : public MotionSaliency
342342
}
343343
void dynamicTextureEstimator( const Mat, DT& );
344344
void patchGenerator( const std::vector<Mat>& img_sq, unsigned index, unsigned r, unsigned c, Mat& center, Mat& surround, Mat& all );
345-
std::vector<Mat> saliencyMapGenerator( std::vector<Mat> );
345+
std::vector<Mat> saliencyMapGenerator( std::vector<Mat>, std::vector<Mat>& );
346346
void saliencyMapVisualize( InputArray _saliencyMap );
347347
protected:
348348
bool computeSaliencyImpl( InputArray image, OutputArray saliencyMap );

modules/saliency/samples/DiscriminantSaliencySample.cpp

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,8 @@ int main(int argc, char* argv[])
5353
//resize(temp, temp, Size(127, 127));
5454
img_sq.push_back(temp);
5555
}
56-
vector<Mat> saliency_sq = t.saliencyMapGenerator(img_sq);
56+
vector<Mat> saliency_sq;
57+
t.computeSaliency(img_sq, saliency_sq);
5758
for ( unsigned i = 0; i < saliency_sq.size(); i++ )
5859
{
5960
resize(saliency_sq[i], saliency_sq[i], Size(1024, 768));

modules/saliency/src/DiscriminantSaliency.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -48,35 +48,35 @@ DiscriminantSaliency::DiscriminantSaliency(unsigned _stride, Size _imgProcessing
4848
patchSize = _patch;
4949
temporalSize = _temporal;
5050
stride = _stride;
51-
CV_Assert( hiddenSpaceDimension <= temporalSize && temporalSize <= (unsigned)imgProcessingSize.width * imgProcessingSize.height );
51+
CV_Assert( hiddenSpaceDimension <= temporalSize && temporalSize <= (unsigned)imgProcessingSize.width * imgProcessingSize.height && stride <= (centerSize - 1) / 2 );
5252
}
5353

5454
DiscriminantSaliency::~DiscriminantSaliency(){}
5555

5656
bool DiscriminantSaliency::computeSaliencyImpl( InputArray image, OutputArray saliencyMap )
5757
{
58-
vector<Mat> img_sq, saliency_sq;
58+
vector<Mat> img_sq;
5959
image.getMatVector(img_sq);
60-
saliencyMap.getMatVector(saliency_sq);
61-
cout << saliency_sq.size() << endl;
60+
vector<Mat>& saliency_sq = *( std::vector<Mat>* ) saliencyMap.getObj();
6261
CV_Assert( !(img_sq.empty()) || !(img_sq[0].empty()) );
62+
saliencyMapGenerator(img_sq, saliency_sq);
6363
return true;
6464
}
6565

66-
vector<Mat> DiscriminantSaliency::saliencyMapGenerator( std::vector<Mat> img_sq )
66+
vector<Mat> DiscriminantSaliency::saliencyMapGenerator( vector<Mat> img_sq, vector<Mat>& saliency_sq )
6767
{
6868
CV_Assert( img_sq.size() >= temporalSize );
6969
for ( unsigned i = 0; i < img_sq.size(); i++ )
7070
{
7171
resize(img_sq[i], img_sq[i], imgProcessingSize);
7272
}
73-
vector<Mat> saliency_sq;
73+
//vector<Mat> saliency_sq;
7474
for ( unsigned i = temporalSize - 1; i < img_sq.size(); i++ )
7575
{
7676
saliency_sq.push_back(Mat(imgProcessingSize, CV_64F, Scalar::all(0.0)));
77-
for ( unsigned r = (centerSize - 1) / 2; r < imgProcessingSize.height - (centerSize - (centerSize - 1) / 2); r+= (2 * stride + 1) )
77+
for ( unsigned r = (centerSize - 1) / 2; r < imgProcessingSize.height - (centerSize - (centerSize - 1) / 2 - 1); r+= (2 * stride + 1) )
7878
{
79-
for ( unsigned c = (centerSize - 1) / 2; c < imgProcessingSize.width - (centerSize - (centerSize - 1) / 2); c+= (2 * stride + 1) )
79+
for ( unsigned c = (centerSize - 1) / 2; c < imgProcessingSize.width - (centerSize - (centerSize - 1) / 2 - 1); c+= (2 * stride + 1) )
8080
{
8181
Mat center, surround, all;
8282
DT para_c0, para_c1, para_w;
@@ -103,7 +103,7 @@ vector<Mat> DiscriminantSaliency::saliencyMapGenerator( std::vector<Mat> img_sq
103103

104104
void DiscriminantSaliency::patchGenerator( const vector<Mat>& img_sq, unsigned index, unsigned r, unsigned c, Mat& center, Mat& surround, Mat& all )
105105
{
106-
unsigned r1 = max(r - (windowSize - 1) / 2, (unsigned)0), c1 = max(c - (windowSize - 1) / 2, (unsigned)0);
106+
unsigned r1 = max((int)r - ((int)windowSize - 1) / 2, 0), c1 = max((int)c - ((int)windowSize - 1) / 2, 0);
107107
unsigned r2 = min(r1 + windowSize, (unsigned)imgProcessingSize.height), c2 = min(c1 + windowSize, (unsigned)imgProcessingSize.width);
108108
all = Mat(patchSize, temporalSize, CV_64F, Scalar::all(0.0));
109109
surround = Mat(patchSize, temporalSize, CV_64F, Scalar::all(0.0));

0 commit comments

Comments
 (0)