opencv学习_14 (图像的尺度空间)

来源:互联网 发布:php支付插件 编辑:程序博客网 时间:2024/06/05 14:52

什么是图像的尺度空间?

    比如用baidu地图的放大缩小查看国家地区信息,这个放大缩小就涉及到图片的尺度信息。

为什么需要尺度空间?

视觉系统处理这些图片时,这些图片来自于未知的一些场景,未知的尺度,未知的角度等噪声影响下,我们为了克服这些困难,就需要建立相应的尺度空间

怎么样去建立尺度空间?

通过不同方差的高斯和去做卷积

结论:通过高斯和获取图像的尺度空间

高斯窗口和高斯方差之间的关系:

高斯窗口(winsize)=  2*(3*方差(sigma))+ 1;  sigma 也称为尺度因子

随着高斯窗口的减小即高斯方差的减小,我们获取到的轮廓信息更加的详细。

因此 此时图像的表示可以引用到三维空间中即x,y,sigma,记为I(x,y,sigma).

测试代码:

[cpp] view plain copy
 print?
  1. #include <iostream>  
  2. #include <sstream>  
  3. #include "cv.h"  
  4. #include "cxcore.h"  
  5. #include "highgui.h"  
  6. using namespace std;  
  7.   
  8. #define SCALESIZE 20  
  9. int main(int argc, char* argv[])  
  10. {  
  11.     IplImage* src;  
  12.     src = cvLoadImage("E:\\study_opencv_video\\lesson20_1\\test1.jpg",0);  
  13.     int winSize[SCALESIZE],i;  
  14.     IplImage* scaleImage[SCALESIZE];  
  15.     IplImage* edgeImage[SCALESIZE];  
  16.     char filename[256];  
  17.     char filename2[256];  
  18.     winSize[0] = 3;  
  19.     scaleImage[0]=cvCreateImage(cvGetSize(src),8,1);  
  20.     edgeImage[0]=cvCreateImage(cvGetSize(src),8,1);   
  21.     for( i=1;i<SCALESIZE;i++)  
  22.     {  
  23.         winSize[i] = winSize[i-1]+2;  
  24.         scaleImage[i]=cvCreateImage(cvGetSize(src),8,1);  
  25.         edgeImage[i]=cvCreateImage(cvGetSize(src),8,1);  
  26.     }     
  27.     for(i=0;i<SCALESIZE;i++)  
  28.     {  
  29.         cvSmooth(src,scaleImage[i],CV_GAUSSIAN,winSize[i],winSize[i]);  
  30.   
  31.         cvCanny(scaleImage[i], edgeImage[i], 30, 90, 3);  
  32.     }  
  33.     //保存图像  
  34.     for(i=0;i<SCALESIZE;i++)  
  35.     {  
  36.         string s1 = "scale_";  
  37.         string jpg = ".jpg";  
  38.         stringstream ss;  
  39.         ss << s1;  
  40.         ss << i;  
  41.         ss << jpg;  
  42.         ss >> filename;  
  43.         //sprintf(filename,"scale_%d.jpg",i);  
  44.         cvSaveImage(filename,scaleImage[i]);  
  45.         ss.clear();  
  46.         string s2 = "edge_";  
  47.         ss << s2;  
  48.         ss << i;  
  49.         ss << jpg;  
  50.         ss >> filename2;  
  51.         cvSaveImage(filename2,edgeImage[i]);  
  52.     }  
  53.   
  54.     for(i=0;i<SCALESIZE;i++)  
  55.     {  
  56.         cvReleaseImage(&scaleImage[i]);  
  57.         cvReleaseImage(&edgeImage[i]);  
  58.     }  
  59.     cvReleaseImage(&src);  
  60.     return 0;  
  61. }  

作者:小村长  出处:http://blog.csdn.net/lu597203933 欢迎转载或分享,但请务必声明文章出处。 (新浪微博:小村长zack, 欢迎交流!)
0 0