28 CentSur::CentSur(cv::Size tmpSize,
int tmpGauss,
double tmpSigma)
34 psize = (cv::Size*)malloc(ngauss*
sizeof(cv::Size));
35 proi = (cv::Rect*)malloc(ngauss*
sizeof(cv::Rect));
37 for (
int ng=0;ng<ngauss;ng++)
39 psize[ng].width = (int)ceil( ( (
double)srcSize.width ) /
double( 1<<ng ) );
40 psize[ng].height = (int)ceil( ( ((
double)srcSize.height) / ( (
double)srcSize.width) ) * psize[ng].width );
43 proi[ng].width = psize[ng].width;
44 proi[ng].height = psize[ng].height;
45 pyramid[ng] = cv::Mat ( psize[ng].height, psize[ng].width, CV_32FC1 );
46 pyramid_gauss[ng] = cv::Mat ( psize[ng].height, psize[ng].width, CV_32FC1 );
47 gauss[ng] = cv::Mat ( srcSize.height, srcSize.width, CV_32FC1 );
50 img_32f = cv::Mat ( srcSize.height, srcSize.width, CV_32FC1 );
51 csTot32f = cv::Mat ( srcSize.height, srcSize.width, CV_32FC1 );
52 csTot32fTmp = cv::Mat ( srcSize.height, srcSize.width, CV_32FC1 );
53 csTot8u = cv::Mat ( srcSize.height, srcSize.width, CV_8UC1 );
62 for (
int ng=0;ng<ngauss;ng++)
64 pyramid[ng].release();
65 pyramid_gauss[ng].release();
72 csTot32fTmp.release();
75 void CentSur::proc_im_8u(
const cv::Mat &img_8u )
78 img_8u.convertTo( img_32f, CV_32FC1, 1.0/255.0 );
80 proc_im_32f( img_32f );
83 void CentSur::proc_im_32f(
const cv::Mat &im_32f )
86 make_pyramid( im_32f );
89 csTot32f.setTo( cv::Scalar(0) );
93 for (
int nd=0; nd<ngauss-1; nd++)
95 cv::absdiff( gauss[nd], gauss[nd+1], csTot32fTmp);
96 cv::add(csTot32fTmp, csTot32f, csTot32f);
100 for (
int ndd=0;ndd<ngauss-2;ndd++)
102 cv::absdiff( gauss[ndd], gauss[ndd+2], csTot32fTmp);
103 cv::add(csTot32fTmp, csTot32f, csTot32f);
113 csTot32f.convertTo( csTot8u, CV_8UC1, 1.0 * 255.0 );
116 void CentSur::make_pyramid(
const cv::Mat &im_32f )
119 im_32f.copyTo( pyramid[0] );
121 cv::Point anchor(-1,-1);
122 cv::Size ksize(KERNSIZE, KERNSIZE);
123 cv::boxFilter(pyramid[0], pyramid_gauss[0],-1, ksize, anchor,
true, cv::BORDER_REPLICATE);
126 pyramid_gauss[0].copyTo( gauss[0] );
131 for (
int sg=1;sg<ngauss;sg++)
134 cv::resize(pyramid[sg-1], pyramid[sg], cv::Size(proi[sg].width, proi[sg].height), sd, sd, cv::INTER_LANCZOS4);
136 cv::Point anchor(-1,-1);
137 cv::Size ksize(KERNSIZE, KERNSIZE);
138 cv::boxFilter(pyramid[sg], pyramid_gauss[sg],-1, ksize, anchor,
true, cv::BORDER_REPLICATE);
142 cv::resize(pyramid_gauss[sg], gauss[sg], srcSize, su, su, cv::INTER_LANCZOS4);
An implementation modelling the centre-surround response, used for construction of spatial uniqueness...