opencv 金字塔图像分割

原创 2012年03月28日 12:57:04

opencv中有封装好的cvPyrSegmentation函数,参数解释如下:

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-通道图像,且大小一样



Threshold1,Threshold2的解读:

看到别人博客里有人在问这两个参数的区别,其实就如上面黄色底纹文字所说,

金字塔分割先通过p(c(a),c(b))<threshold1在像素a,b...中找连通域,也就是所谓的连接部件A,B...

第二步通过p(c(A),c(B))<threshold2判断两个联通与是否属于同一个簇,簇即使我们最后得到的分割结果


例程:

void ON_SEGMENT(int a)
{   
	cvPyrSegmentation(images0, images1, storage, &comp, 
		level, threshold1+1, threshold2+1);
	cvShowImage("Segmentation", images1);
}

void CCVMFCView::OnPyrSegmentation()
{
	images[0] = cvCloneImage(workImg);
	cvFlip(images[0]);

	cvNamedWindow("Segmentation", 1);

	storage = cvCreateMemStorage ( block_size );

	images[0]->width &= -(1<<level);
	images[0]->height &= -(1<<level);

	images0 = cvCloneImage( images[0] );
	images1 = cvCloneImage( images[0] );
	// 对彩色图像进行分割
	l = 1;
	threshold1 =255;
	threshold2 =30;


	sthreshold1 = cvCreateTrackbar("Threshold1", "Segmentation", 
		&threshold1, 255, ON_SEGMENT);
	sthreshold2 = cvCreateTrackbar("Threshold2", "Segmentation",   
		&threshold2, 255,ON_SEGMENT);

	ON_SEGMENT(1);

	cvWaitKey(0);
	cvDestroyWindow( "Segmentation" ); 
	cvFlip(images1);

	images1->width = workImg->width;
	images1->height = workImg->height;

	cvReleaseMemStorage(&storage );
	cvReleaseImage(&images[0]);
	cvReleaseImage(&images0);

	m_dibFlag=imageReplace(images1,&workImg); 
	m_ImageType=1;
	Invalidate();
}

金字塔图像分割结果:





金字塔图像分割原理解析与示例[opencv]

图像分割指的是将数字图像细分为多个图像子区域的过程,在OpenCv中实现了三种跟图像分割相关的算法,它们分别是:金字塔分割算法,分水岭分割算法以及均值漂移分割算法。它们的使用过程都很简单,刚开始学习o...

高斯金字塔图像分割

基于高斯金子塔的图像分割的原理是,根据相邻金字塔采样的原理可知,上层金字塔是下层金字塔下采样得到,那么上层金子塔的一个点和下层 金字塔的四个点就有一个映射关系,若他们的差值小于threshold1,则...
  • lampqiu
  • lampqiu
  • 2014年08月20日 09:48
  • 6904

采用金字塔方法进行图像分割

opencv 采用金字塔方法进行图像分割
  • byxdaz
  • byxdaz
  • 2010年07月30日 19:43
  • 6153

opencv 金字塔图像分割

我所知的opencv中分割函数:watershed(只是看看效果,不能返回每类pixel类属),cvsegmentImage,cvPyrSegmentation(返回pixel类属)Segment函数...

opencv用金字塔cvPyrSegmentation实现图像分割

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

第5章/图像形态学-图像分割(cvPyrSegmentation)

                                             第5章/图像形态学-图像分割(cvPyrSegmentation)//rorger//2010//仅是练习,不...

opencv学习笔记(十七)利用cvPyrSegmentation()做图像分割

图像分割的意义:在一幅图像中,人们常常只对其中的部分目标感兴趣,这些目标通常占据一定的区域,并且在某些特性(如灰度、轮廓、颜色和纹理等)上和临近的图像有差别。...

OpenCV编译提示:error: C3861: “cvPyrSegmentation”: 找不到标识符

解决: 添加如下语句即可: #include

cvPyrSegmentation 高斯图像金字塔做分割

/*  * cvPyrSegmentation用高斯图像金字塔做分割, 此函数还不支持直接画出contour,只能画出外接矩形  * 实验结果中分割的效果不佳  * Rocky Chen  *...

PyrSegmentation 图像分割

PyrSegmentation   PyrSegmentation用金字塔实现图像分割 void cvPyrSegmentation( IplImage* src, IplImage* dst,CvM...
  • lxfei73
  • lxfei73
  • 2011年05月12日 09:28
  • 1661
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:opencv 金字塔图像分割
举报原因:
原因补充:

(最多只允许输入30个字)