资源简介
能够实现,希望谁能在此基础上添加一个有效外力。是的算法的速度更快。
代码片段和文件信息
/*==================================================================
= 代码内容:GVF Snake
= 修改日期:2009-3-12
= 作者:crond123
= 博客:http://blog.csdn.net/crond123/
= E_Mail:crond123@163.com
====================================================================*/
#include “stdafx.h“
#include “SnakeDeform.h“
#include “SnakeInterp.h“
#include “gvfc.h“
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 );
}
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);
}
}
int main(int argc char* argv[])
{
IplImage * srcimage = NULL;
if ( argc == 2 &&
(srcimage = cvLoadImage((char *)argv[1] CV_LOAD_IMAGE_GRAYSCALE))!=0 );
else
{
srcimage = cvLoadImage(“test.jpg“ CV_LOAD_IMAGE_GRAYSCALE); //载入工作目录下文件名为“tiger.jpg”的图片。
}
if(srcimage==NULL)
{
std::cout<<“error file name“< return -1;
}
CvSize size = cvGetSize(srcimage);
//为 uvedge 申请空间
CvMat * u = cvCreateMat(size.heightsize.widthCV_32FC1);
CvMat * v = cvCreateMat(size.heightsize.widthCV_32FC1);
IplImage * edge = cvCreateImage(sizeIPL_DEPTH_8U1 );
cvCopyImage(srcimageedge);
//图像平滑
cvSmooth( edge edge CV_MEDIAN);
cvSmooth( edge edge CV_GAUSSIAN);
// 求取图像梯度
cvSobel(edgeedge115);
cvNamedWindow(“srcImage“);
cvShowImage(“srcImage“ srcimage);
cvSetMouseCallback(“srcImage“ on_mousesrcimage);
/*
* 通过点击采样获得初始轮廓
*/
char c;
while(c = cvWaitKey(0))
if( c == ‘s‘||c == ‘S‘ )
break;
//定义snake参数
float alpha=0.5;
float beta=0.3;
float gamma=0.3;
float kappa =1.0;
int itetime =20;
/*
* 计算GVF场
*/
GVFC_W(edgeuv0.160);
for(int ite=0;ite {
//清除可疑点
std::vector old(InitContour) ;
int len = InitContour.size();
InitContour.clear();
for (int i=0;i {
if(old[i].x<0||old[i].x>=size.width)
continue;
if(old[i].y<0||old[i].y>=size.height)
continue;
InitContour.push_back(old[i]);
}
//对所有点进行插值
snakeInterp(InitContourInitContour);
//点太少表示失败
if(InitContour.size()<5)
break;
CvPoint* pts = new CvP
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 6188 2009-03-12 19:18 GVF_Snake_plus\GVFC.CPP
文件 1085 2009-03-12 18:47 GVF_Snake_plus\GVFC.H
文件 8986 2009-03-12 16:26 GVF_Snake_plus\GVFC_XU.CPP
文件 3541 2009-03-12 19:21 GVF_Snake_plus\GVF_Snake_plus.cpp
文件 5130 2009-03-12 18:21 GVF_Snake_plus\GVF_Snake_plus.dsp
文件 551 2009-03-12 16:06 GVF_Snake_plus\GVF_Snake_plus.dsw
文件 98304 2009-03-12 19:21 GVF_Snake_plus\GVF_Snake_plus.exe
文件 50176 2009-03-12 19:26 GVF_Snake_plus\GVF_Snake_plus.ncb
文件 51712 2009-03-12 19:26 GVF_Snake_plus\GVF_Snake_plus.opt
文件 3791 2009-03-12 19:21 GVF_Snake_plus\GVF_Snake_plus.plg
文件 1256 2009-03-12 16:06 GVF_Snake_plus\ReadMe.txt
文件 4900 2009-03-12 19:17 GVF_Snake_plus\SnakeDeform.cpp
文件 970 2009-03-12 18:59 GVF_Snake_plus\SnakeDeform.h
文件 1573 2009-03-12 18:30 GVF_Snake_plus\SnakeInterp.cpp
文件 770 2009-03-12 18:59 GVF_Snake_plus\SnakeInterp.h
文件 301 2009-03-12 16:06 GVF_Snake_plus\StdAfx.cpp
文件 1029 2009-03-12 16:26 GVF_Snake_plus\StdAfx.h
文件 18604 2009-03-06 19:50 GVF_Snake_plus\test.jp1g
文件 5548 2009-03-12 18:24 GVF_Snake_plus\test.jpg
文件 10726 2009-03-12 18:28 GVF_Snake_plus\分析结果.JPG
目录 0 2009-03-12 19:26 GVF_Snake_plus
----------- --------- ---------- ----- ----
275141 21
- 上一篇:最速下降法原理及例题
- 下一篇:学习信息安全的必看书籍 30本
评论
共有 条评论