PyrSegmentation 图像分割

PyrSegmentation
 
 
PyrSegmentation
用金字塔实现图像分割

void cvPyrSegmentation( IplImage* src, IplImage* dst,
CvMemStorage* storage, CvSeq** comp,
int level, double threshold1, double threshold2 );
src
输入图像.
dst
输出图像.
storage
Storage: 存储连通部件的序列结果
comp
分割部件的输出序列指针 components.
level
建立金字塔的最大层数
threshold1
建立连接的错误阈值
threshold2
分割簇的错误阈值
函数 cvPyrSegmentation 实现了金字塔方法的图像分割。金字塔建立到 level 指定的最大层数。如果 p(c(a),c(b))<threshold1,则在层 i 的象素点 a 和它的相邻层的父亲象素 b 之间的连接被建立起来,

定义好连接部件后,它们被加入到某些簇中。如果p(c(A),c(B))<threshold2,则任何两个分割 A 和 B 属于同一簇。

如果输入图像只有一个通道,那么

p(c1,c2)=|c1-c2|.
如果输入图像有单个通道(红、绿、兰),那幺

p(c1,c2)=0,3·(c1r-c2r)+0,59·(c1g-c2g)+0,11·(c1b-c2b) .
每一个簇可以有多个连接部件。图像 src 和 dst 应该是 8-比特、单通道 或 3-通道图像,且大小一样
 


//学习OpenCV中的介绍:

图像分割需要先建立一个图像金字塔,然后在Gi的像素和Gi+1的像素直接依照对应关系,建立起"父-子"关系,通过这种方式,快速初始分割可以先在金字塔高层的低分辨率图像上完成,然后逐层对分割加以优化;

view plaincopy to clipboardprint?
//rorger  
//2010 Nov 6th  
//2010年11月7日21:45:32  
 
 
#include "highgui.h"  
#include"cv.h"  
 
void  doPyrSegmentation( IplImage * src ,IplImage * dst  
                     ){  
    assert(src->width%2 == 0 && src->height%2 == 0);  
 
    CvMemStorage * stoage = cvCreateMemStorage(0) ;  
    CvSeq* comp=NULL;  
 
    int level = 2 ;   //进行n层采样  
    double threshold1 = 150 ;  
    double threshold2 = 30 ;  
    cvPyrSegmentation(src,dst, stoage,&comp,level, threshold1,threshold2) ;  
};  
 
 
   
int main(int argc,char ** argv)  
{  
    IplImage * src = cvLoadImage(argv[1]);  
      
    IplImage * dst=cvCreateImage(cvGetSize(src), src->depth,src->nChannels);  
 
    doPyrSegmentation(src,dst);  
    cvNamedWindow("src") ;  
    cvNamedWindow("dst") ;  
    cvShowImage("src",src);  
    cvShowImage("dst",dst);  
    cvWaitKey(0) ;  
    cvDestroyAllWindows();  
    return 0;  

//rorger
//2010 Nov 6th
//2010年11月7日21:45:32


#include "highgui.h"
#include"cv.h"

void  doPyrSegmentation( IplImage * src ,IplImage * dst
      ){
 assert(src->width%2 == 0 && src->height%2 == 0);

 CvMemStorage * stoage = cvCreateMemStorage(0) ;
 CvSeq* comp=NULL;

 int level = 2 ;   //进行n层采样
 double threshold1 = 150 ;
 double threshold2 = 30 ;
 cvPyrSegmentation(src,dst, stoage,&comp,level, threshold1,threshold2) ;
};


 
int main(int argc,char ** argv)
{
 IplImage * src = cvLoadImage(argv[1]);
 
 IplImage * dst=cvCreateImage(cvGetSize(src), src->depth,src->nChannels);

 doPyrSegmentation(src,dst);
 cvNamedWindow("src") ;
 cvNamedWindow("dst") ;
 cvShowImage("src",src);
 cvShowImage("dst",dst);
 cvWaitKey(0) ;
 cvDestroyAllWindows();
 return 0;
}
 

 

 

 

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cartoonface/archive/2010/11/09/5998543.aspx

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/cartoonface/archive/2010/11/09/5998543.aspx

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值