图像分割--金字塔分割算法

来源:互联网 发布:gta5神作 知乎 编辑:程序博客网 时间:2024/04/30 07:48
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-通道图像,且大小一样 

实验实例:

#include <iostream>  #include<opencv2\highgui\highgui.hpp>#include<opencv2\opencv.hpp>#include<opencv2\legacy\legacy.hpp>//cvPyrSegmentation函数要加这个头文件//#pragma comment(lib, "opencv_legacy249d.lib")  using namespace std;    using namespace cv; void cvPyr( IplImage* src, IplImage* dst);static void ShowHelpText() ;int main(int argc, char** argv){IplImage* src, *dst;CvMemStorage* storage=cvCreateMemStorage(0);ShowHelpText();if (argc==2 && (src=cvLoadImage(argv[1],-1))!=0){return -1;}else{src=cvLoadImage("lena.jpg",1);}dst = cvCreateImage( cvGetSize(src), src->depth, src->nChannels);    cvPyr( src, dst);    // Create a named window with a the name of the file.    cvNamedWindow( "src", 1 );    // Show the image in the named windowcvShowImage( "src", src );cvShowImage( "dst", dst );    // Press any key to exit.    cvWaitKey(0);    // Clean up and don’t be piggies    cvDestroyWindow( "src" );    cvReleaseImage( &src ); cvDestroyWindow( "dst" );    cvReleaseImage( &dst );    return 0;}static void ShowHelpText()    {        //输出一些帮助信息    cout<<endl<<"图像分割--金字塔分割示例程序~"<<endl<<endl;cout<<"当前使用的OpenCV版本为 OpenCV "<<CV_VERSION<<endl;cout<<endl<<"键盘按键任意键- 退出程序"<<endl;} void cvPyr( IplImage* src, IplImage* dst ){    CvMemStorage* storage = cvCreateMemStorage(0);    CvSeq* comp = NULL;    cvPyrSegmentation( src, dst, storage, &comp, 2, 150, 100 );    cvReleaseMemStorage( &storage );}


0 0
原创粉丝点击