什么是图像的尺度空间?
比如用baidu地图的放大缩小查看国家地区信息,这个放大缩小就涉及到图片的尺度信息。
为什么需要尺度空间?
视觉系统处理这些图片时,这些图片来自于未知的一些场景,未知的尺度,未知的角度等噪声影响下,我们为了克服这些困难,就需要建立相应的尺度空间
怎么样去建立尺度空间?
通过不同方差的高斯和去做卷积
结论:通过高斯和获取图像的尺度空间
高斯窗口和高斯方差之间的关系:
高斯窗口(winsize)= 2*(3*方差(sigma))+ 1; sigma 也称为尺度因子
随着高斯窗口的减小即高斯方差的减小,我们获取到的轮廓信息更加的详细。
因此 此时图像的表示可以引用到三维空间中即x,y,sigma,记为I(x,y,sigma).
测试代码:
- #include <iostream>
- #include <sstream>
- #include "cv.h"
- #include "cxcore.h"
- #include "highgui.h"
- using namespace std;
-
- #define SCALESIZE 20
- int main(int argc, char* argv[])
- {
- IplImage* src;
- src = cvLoadImage("E:\\study_opencv_video\\lesson20_1\\test1.jpg",0);
- int winSize[SCALESIZE],i;
- IplImage* scaleImage[SCALESIZE];
- IplImage* edgeImage[SCALESIZE];
- char filename[256];
- char filename2[256];
- winSize[0] = 3;
- scaleImage[0]=cvCreateImage(cvGetSize(src),8,1);
- edgeImage[0]=cvCreateImage(cvGetSize(src),8,1);
- for( i=1;i<SCALESIZE;i++)
- {
- winSize[i] = winSize[i-1]+2;
- scaleImage[i]=cvCreateImage(cvGetSize(src),8,1);
- edgeImage[i]=cvCreateImage(cvGetSize(src),8,1);
- }
- for(i=0;i<SCALESIZE;i++)
- {
- cvSmooth(src,scaleImage[i],CV_GAUSSIAN,winSize[i],winSize[i]);
-
- cvCanny(scaleImage[i], edgeImage[i], 30, 90, 3);
- }
-
- for(i=0;i<SCALESIZE;i++)
- {
- string s1 = "scale_";
- string jpg = ".jpg";
- stringstream ss;
- ss << s1;
- ss << i;
- ss << jpg;
- ss >> filename;
-
- cvSaveImage(filename,scaleImage[i]);
- ss.clear();
- string s2 = "edge_";
- ss << s2;
- ss << i;
- ss << jpg;
- ss >> filename2;
- cvSaveImage(filename2,edgeImage[i]);
- }
-
- for(i=0;i<SCALESIZE;i++)
- {
- cvReleaseImage(&scaleImage[i]);
- cvReleaseImage(&edgeImage[i]);
- }
- cvReleaseImage(&src);
- return 0;
- }
作者:小村长 出处:http://blog.csdn.net/lu597203933 欢迎转载或分享,但请务必声明文章出处。 (新浪微博:小村长zack, 欢迎交流!)