資源簡介
實現高斯金字塔和高斯差分金字塔,采用opencv實現的對圖像建立高斯金字塔與高斯差分金字塔。
代碼片段和文件信息
#include?
#include?
#include?
#include?
using?namespace?std;
using?namespace?cv;
static?const?int???GAUSS_ADD_INTERVALS?=?3;
static?const?int???DOG_ADD_INTERVALS?=?2;
static?const?float?SIFT_INIT_SIGMA?=?0.5f;
int?_computeOctaves(const?cv::Mat&?vGrayImage);
void?_convertToGray(const?cv::Mat&?vSrcImage?cv::Mat&?voGrayImage);
void?_createInitImage(const?cv::Mat&?vSrcImage?bool?vDoubleImageSize?double?vSigma?cv::Mat&?voInitImage);
void?_buildGaussPyramid(const?cv::Mat&?vImage?int?vIntervals?double?vSigma?std::vector&?voGaussPyramid);
void?_buildDoGPyramid(const?std::vector&?vGaussPyramid?int?vIntervals?std::vector&?voDoGPyramid);
int?main()
{
cv::Mat?image?=?cv::imread(“1.jpg“1);
if?(!image.data)
{
std::cout?<“Could?not?open?or?find?the?image!“?< return?-1;
}
cv::Mat?InitImage;
std::vector?gaussPyr;
std::vector?doGpyr;
_createInitImage(image?false?1.6?InitImage);
_buildGaussPyramid(InitImage?3?1.6?gaussPyr);
_buildDoGPyramid(gaussPyr?3?doGpyr);
vector?DisGauss(gaussPyr.size());
for?(int?i?=?0;?i?(signed?int)gaussPyr.size();?++i)
{
gaussPyr[i].convertTo(DisGauss[i]?DataType::type?100?0);
std::ostringstream?oss;
oss?< std::string?str?=?oss.str();
std::string?name?=?“gaussPyr“?+?str;
cv::imshow(name?DisGauss[i]);
}
for?(int?j?=?0;?j? {
std::ostringstream?oss;
oss?< std::string?str?=?oss.str();
std::string?name2?=?“DoGPyr“?+?str;
cv::imshow(name2?doGpyr[j]);
}
cvWaitKey(0);
return?0;
}
//******************************************************************
//FUNCTION:
int?_computeOctaves(const?cv::Mat&?vGrayImage)
{
int?OctavesNum;
OctavesNum?=?cvRound(log(MIN(vGrayImage.size().width?vGrayImage.size().height))?/?log(2))?-?2;
return?OctavesNum;
}
//******************************************************************
//FUNCTION:
void?_convertToGray(const?cv::Mat&?vSrcImage?cv::Mat&?voGrayImage)
{
Mat?gray;
if?(vSrcImage.channels()?==?3?||?vSrcImage.channels()?==?4)
cv::cvtColor(vSrcImage?gray?cv::COLOR_BGR2GRAY);
else
vSrcImage.copyTo(gray);
//voGrayImage?=?gray;
gray.convertTo(voGrayImage?DataType::type?1.0?0);
}
//******************************************************************
//FUNCTION:
void?_createInitImage(const?cv::Mat&?vSrcImage?bool?vDoubleImageSize?double?vSigma?cv::Mat&?voInitImage)
{
cv::Mat?OrginalImage?=?vSrcImage;
cv::Mat?GrayImage;
_convertToGray(OrginalImage?GrayImage);
double?SigmaDiff;
if?(vDoubleImageSize)
{
SigmaDiff?=?sqrtf(std
評論
共有 條評論