您的位置:首页 > 其它

图像各种深度的处理及gvf snake中的CvSepFilter

2010-10-15 12:57 190 查看
最近在实现GVF snake,其中要对读取的图像求解GVF力场。图像以灰度模式读进来之后(IPL_DEPTH_8U),要进行归一化处理,转化成深度为IPL_DEPTH_32F的图像,但是现实不正常。google到了这篇文章 OpenCV对不同图像深度的处理 ,文章中对opencv里面的不同图像深度进行了分析和测试。如下:

测试double型:0.0--1.0之间 IPL_DEPTH_64F
测试float型:0.0--1.0之间 IPL_DEPTH_32F
测试long型:0--65535之间 IPL_DEPTH_32S
测试short int型:-32768--32767之间 IPL_DEPTH_16S
测试unsigned short int型:0--65535之间 IPL_DEPTH_16U
测试char型:-128--127之间 IPL_DEPTH_8S
测试unsigned char型:0--255之间 IPL_DEPTH_8U

在进行不同深度图像间进行转换的时候,如果只是调用cvScale()函数的话,用cvShowImage()来显示图像会不正常。调用过cvScale()之后,要将转换过后的图像进行处理,才能正常的用cvShowImage()函数显示。如下代码显示了从IPL_DEPTH_8U转换到IPL_DEPTH_32F后显示。经归一化处理后便可正常显示。也可用其他方法进行处理,这里使用归一化是因为后面要用到图像的归一化,我这里就顺便贴了归一化的代码。

g_pSrcImage = cvLoadImage( g_strImageFileName,CV_LOAD_IMAGE_GRAYSCALE );
if ( !g_pSrcImage )
{
cout << "Load image error." << endl;
return -1;
}
g_ImageSize = cvGetSize( g_pSrcImage );
g_edge = cvCreateImage( g_ImageSize, IPL_DEPTH_32F, 1 );
cvScale( g_pSrcImage, g_edge, 1, 0 );
double min, max;
cvMinMaxLoc( g_edge, &min, &max, NULL, NULL, NULL );
cvScale( g_edge, g_edge, 1 / ( max - min ), - 1 * min / ( max - min ) );


ps: CSDN上下载的那个gvf snake c++的代码有点问题,根本不能收敛到凹区域,增加迭代次数后也不能收敛到凹区域。而且CvSepFilter在2.1版本中也找不到,用cvFilter2D()替换了CvSepFilter,问题仍不能得到解决。且cvSobel()处理edge map时会有溢出。

预计GVF snake最近一个月能够实现。

小抱怨一下,这学期课多,导师催的也紧,图像处理也是刚刚接触。能逃的课都逃了,逃课都成了习惯,不知最后期末考试成绩会是个什么样。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐