Snake的轮廓线模型继承了上层知识,而轮廓线与目标轮廓的匹配又结合了底层特征。Snake模型与先检测边缘点再将它们连接成边缘的方法不同,轮廓的连通性及角点均影响能量泛函。因此,Snake模型可以通过优化能量泛函得到一个局部最优的轮廓曲线。
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-10-31 10:02 snake_C++
目录 0 2013-10-31 09:13 snake_C++Debug
文件 1442816 2013-10-31 09:13 snake_C++DebugSnake_plus.bsc
文件 307287 2013-10-31 09:13 snake_C++DebugSnake_plus.exe
文件 436112 2013-10-31 09:13 snake_C++DebugSnake_plus.ilk
文件 104481 2013-10-31 09:13 snake_C++DebugSnake_plus.obj
文件 5194996 2013-10-31 09:02 snake_C++DebugSnake_plus.pch
文件 640000 2013-10-31 09:13 snake_C++DebugSnake_plus.pdb
文件 0 2013-10-31 09:13 snake_C++DebugSnake_plus.sbr
文件 148480 2013-10-31 09:21 snake_C++Debugvc60.idb
文件 159744 2013-10-31 09:13 snake_C++Debugvc60.pdb
文件 4880 2013-10-31 09:13 snake_C++Snake_plus.cpp
文件 3453 2013-10-31 10:02 snake_C++Snake_plus.dsp
文件 545 2013-10-30 17:37 snake_C++Snake_plus.dsw
文件 41984 2013-10-31 10:02 snake_C++Snake_plus.ncb
文件 48640 2013-10-31 10:02 snake_C++Snake_plus.opt
文件 916 2013-10-31 09:13 snake_C++Snake_plus.plg
文件 4514 2013-10-30 17:23 snake_C++Snake_plus.vcproj
文件 1419 2013-10-30 17:23 snake_C++Snake_plus.vcproj.WENYAOGUANG.Administrator.user
文件 5490 2013-10-30 17:23 snake_C++Snake_plus.vcxproj
文件 1227 2013-10-30 17:23 snake_C++Snake_plus.vcxproj.filters
文件 143 2013-10-30 17:23 snake_C++Snake_plus.vcxproj.user
文件 20758 2007-01-01 21:29 snake_C++gvfsnake5_31.BMP
文件 11559 2013-10-31 09:22 snake_C++sef.jpg
文件 297 2013-10-30 17:23 snake_C++stdafx.cpp
文件 376 2013-10-30 17:23 snake_C++stdafx.h
#include “stdafx.h“
#include “cv.h“
#include “highgui.h“
#include
#include
#include
#include
#pragma comment(lib“highgui.lib“)
#pragma comment(lib“cv.lib“)
#pragma comment(lib“cvaux.lib“)
#pragma comment(lib“cxcore.lib“)
std::vector InitContour;
//用于显示的图像
IplImage* temp; //= cvCreateImage(cvGetSize(img) IPL_DEPTH_8U 1);
void showContent(IplImage * img)
{
if(temp==NULL)
temp= cvCreateImage(cvGetSize(img) IPL_DEPTH_8U 1);
cvCopyImage(imgtemp);
//在原始图像上划线
for (int i=0;i {
cvCircle(temp InitContour[i] 2 cvScalarAll(155));
int j = (i+1)%InitContour.size();
cvLine( temp InitContour[i]InitContour[j] cvScalarAll(100) 1);
}
cvSaveImage(“sef.jpg“temp);
cvShowImage( “srcImage“ temp );
}
double wcvDistance(CvPoint &pt1CvPoint &pt2)
{
double distance = sqrt(pow((double)(pt1.x - pt2.x)2)+pow((double)(pt1.y - pt2.y)2));
return distance;
}
void CaculateDiff(std::vector &srcstd::vector &diff)
{
int size = src.size();
diff.clear();
diff.reserve(size);
diff.resize(size0.0);
for(int i=0;i {
int j = (i+1)%size;
diff[i] = wcvDistance(src[i]src[j]);
}
}
void removeNearPoints(std::vector &srcstd::vector &dstdouble max_length)
{
std::vector result;
result.clear();
std::vector temp;
temp.clear();
temp = src;
std::vector diff ;
int removed = 1;
while(removed!=0)
{
// diff.clear();
result.clear();
removed = 0;
CaculateDiff(tempdiff);
int srcsize = temp.size();
for(int i=0;i {
if(diff[i] {
removed++;
continue;
}
result.push_back(temp[i]);
}
temp.clear();
temp = result;
}
dst.clear();
dst = result;
return ;
}
void contourInterpolation(std::vector &srcstd::vector &dst)
{
std::vector temp;
std::vector diff ;
CaculateDiff(srcdiff);
}
void on_mouse( int event int x int y int flags void* ptr)
{
if( event == CV_EVENT_LBUTTONDOWN )
{
InitContour.push_back(cvPoint(xy));
showContent((IplImage *)ptr);
}
}
//对所有轮廓点进行插值
void ReGeneralPtArrs(std::vector &srcstd::vector &dst)
{
std::vector temp = src;
std::vector diff ;
for(int k=0;k<10;k++)
{
int size = temp.size();
CaculateDiff(tempdiff);
std::vector na;
for (int i=0;i {
if(diff[i]<0.5)
continue;
na.push_back(temp[i]);
if(diff[i]>=1.8)
{
int next = (i+1)%size;
CvPoint ne = temp[next];
CvPoint mid = cvPoint((temp[i].x+ne.x)/2(temp[i].y+ne.y)/2);
na.push_back(mid);
}
}
temp.clear();
temp = na;
}
dst = temp;
}
int _tmain(int argc _TCHAR* argv[])
{
IplImage * srcimage = NULL;
if ( argc == 2 &&
(srcimage =
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2013-10-31 10:02 snake_C++
目录 0 2013-10-31 09:13 snake_C++Debug
文件 1442816 2013-10-31 09:13 snake_C++DebugSnake_plus.bsc
文件 307287 2013-10-31 09:13 snake_C++DebugSnake_plus.exe
文件 436112 2013-10-31 09:13 snake_C++DebugSnake_plus.ilk
文件 104481 2013-10-31 09:13 snake_C++DebugSnake_plus.obj
文件 5194996 2013-10-31 09:02 snake_C++DebugSnake_plus.pch
文件 640000 2013-10-31 09:13 snake_C++DebugSnake_plus.pdb
文件 0 2013-10-31 09:13 snake_C++DebugSnake_plus.sbr
文件 148480 2013-10-31 09:21 snake_C++Debugvc60.idb
文件 159744 2013-10-31 09:13 snake_C++Debugvc60.pdb
文件 4880 2013-10-31 09:13 snake_C++Snake_plus.cpp
文件 3453 2013-10-31 10:02 snake_C++Snake_plus.dsp
文件 545 2013-10-30 17:37 snake_C++Snake_plus.dsw
文件 41984 2013-10-31 10:02 snake_C++Snake_plus.ncb
文件 48640 2013-10-31 10:02 snake_C++Snake_plus.opt
文件 916 2013-10-31 09:13 snake_C++Snake_plus.plg
文件 4514 2013-10-30 17:23 snake_C++Snake_plus.vcproj
文件 1419 2013-10-30 17:23 snake_C++Snake_plus.vcproj.WENYAOGUANG.Administrator.user
文件 5490 2013-10-30 17:23 snake_C++Snake_plus.vcxproj
文件 1227 2013-10-30 17:23 snake_C++Snake_plus.vcxproj.filters
文件 143 2013-10-30 17:23 snake_C++Snake_plus.vcxproj.user
文件 20758 2007-01-01 21:29 snake_C++gvfsnake5_31.BMP
文件 11559 2013-10-31 09:22 snake_C++sef.jpg
文件 297 2013-10-30 17:23 snake_C++stdafx.cpp
文件 376 2013-10-30 17:23 snake_C++stdafx.h
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)