資源簡介
隨機生成五百個點作為初始數據,根據RANSAC算法,對初始數據進行擬合,尋找一條最能表示這五百個點的貝賽爾曲線。
代碼片段和文件信息
//?BezierFitting.cpp?:?定義控制臺應用程序的入口點。
//
#include?“stdafx.h“
#include?
#include?
#include?
#include?
#include?
#include?
#include?
using?namespace?std;
int?divs?=?50;?//?貝塞爾曲線粗細程度
IplImage?*image;
int?main(int?argc?char*?argv[])
{
CvSize?image_size?=?cvSize(10241024);
image?=?cvCreateImage(image_sizeIPL_DEPTH_8U3);
cvZero(image);
cvNamedWindow(“imageShow“0);
//隨機生成500個點,x值在[3060]y值在[01024]
vector?pointList;
srand((unsigned?int)?time(NULL));
for?(int?i?=?0;i?500;i++)
{
int?x?=?rand()?%30?+?30;?
int?y?=?rand()?%1024;
CvPoint?pt?=?cvPoint(xy);
pointList.push_back(pt);
}
uchar?*data?=?(uchar?*)image->imageData;
int?step?=?image->widthStep?/?sizeof(uchar);
vector::iterator?iter;
for(iter?=?pointList.begin();iter?!=?pointList.end();iter++)
{
int?x?=?(*iter).x;
int?y?=?(*iter).y;
data[y?*?step?+?x?*?image->nChannels?+?0]?=?0;
data[y?*?step?+?x?*?image->nChannels?+?1]?=?255;
data[y?*?step?+?x?*?image->nChannels?+?2]?=?0;
}
int?BestScore?=?0;
int?iterTimes?=?100;//迭代次數
CvPoint?controlPoints[4];//最終控制點
CvPoint?samplePoints[4];//迭代過程隨機驗證的控制點
int?countInliners?=?0;?//內聯點數
int?k?=?1;
srand((unsigned?int)?time(NULL));
int?x?=?0;
for?(int?i?=?0;i? {
//隨機選取四個點作為控制點
//srand(time(0));
srand(k);
samplePoints[0]?=?pointList[rand()?%20];
srand(k++);
samplePoints[1]?=?pointList[rand()?%230];
srand(k++);
samplePoints[2]?=?pointList[rand()?%230?+?250];
srand(k++);
samplePoints[3]?=?pointList[rand()?%20?+?480];
//判斷點到曲線距離,計算內聯點數
countInliners?=?0;
//vector::iterator?iter;
float?dis?=?0;//點到曲線距離
// x?=?samplePoints[0].x;
int?x0?=?samplePoints[0].x;
int?y0?=?samplePoints[0].y;
int?x1?=?samplePoints[1].x;
int?y1?=?samplePoints[1].y;
int?x2?=?samplePoints[2].x;
int?y2?=?samplePoints[2].y;
int?x3?=?samplePoints[3].x;
int?y3?=?samplePoints[3].y;
for?(iter?=?pointList.begin();iter?!=?pointList.end();iter++)
{
?float?d?=?(float)((*iter).y?-?(*iter).x);
?bool?Isinliner?=?false;
?for?(float?t?=?0;t?1;t?+=?(1/divs))
?{
?float?dTemp?=?(y0?-?x0)?*?pow(t3)?+?(y1?-?x1)?*?3?*?pow(t2)?*?(1?-?t)?+?(y2?-?x2)?*?3?*?t?*?pow((1?-?t)2)?+?(y3?-?x3)?*?pow((1?-?t)3);
?if?(abs(d?-?dTemp)?10)
?{
?Isinliner?=?true;
?break;
?}
?}
?if?(Isinliner)
?{
?countInliners++;
?}
}
if?(countInliners?>?400)??//如果內聯點數超出預期值,則直接跳出,否則選擇最優的
{
*controlPoints?=?*samplePoints;
/*for?(int?k?=?0;k?4;k++)
{
controlPoints[k]?=?samplePoints[k];
}*/
break;
}
if?(countInliners?>?BestScore)
{
BestScore?=?countInliners;
*controlPoints?=?*samplePoints;
/*for?(int?k?=?0;k?4;k++)
{
controlPoints[k]?=?samplePoints[k];
}*/
}
}
cvShowImage(“imageShow“image);
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2014-06-09?16:42??BezierFitting\
?????目錄???????????0??2014-06-05?15:13??BezierFitting\BezierFitting\
?????文件????????3639??2014-06-09?11:30??BezierFitting\BezierFitting\BezierFitting.cpp
?????文件????????5095??2014-06-09?16:42??BezierFitting\BezierFitting\BezierFitting.vcxproj
?????文件????????1454??2014-06-09?16:42??BezierFitting\BezierFitting\BezierFitting.vcxproj.filters
?????文件?????????143??2014-06-05?10:49??BezierFitting\BezierFitting\BezierFitting.vcxproj.user
?????目錄???????????0??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\
?????文件?????????406??2014-06-05?15:13??BezierFitting\BezierFitting\Debug\BezierFitting.exe.em
?????文件?????????472??2014-06-05?15:13??BezierFitting\BezierFitting\Debug\BezierFitting.exe.em
?????文件?????????381??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\BezierFitting.exe.intermediate.manifest
?????文件??????????57??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\BezierFitting.lastbuildstate
?????文件????????3089??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\BezierFitting.log
?????文件??????235642??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\BezierFitting.obj
?????文件?????1179648??2014-06-05?15:13??BezierFitting\BezierFitting\Debug\BezierFitting.pch
?????文件?????????713??2014-06-05?15:13??BezierFitting\BezierFitting\Debug\BezierFitting.vcxprojResolveAssemblyReference.cache
?????文件???????????0??2014-06-05?15:13??BezierFitting\BezierFitting\Debug\BezierFitting.write.1.tlog
?????文件?????????216??2014-06-05?15:13??BezierFitting\BezierFitting\Debug\BezierFitting_manifest.rc
?????文件???????21432??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\CL.read.1.tlog
?????文件?????????832??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\CL.write.1.tlog
?????文件????????1506??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\cl.command.1.tlog
?????文件???????????2??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\li
?????文件???????????2??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\li
?????文件???????????2??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\li
?????文件???????????2??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\li
?????文件???????????2??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\li
?????文件???????????2??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\li
?????文件???????????2??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\li
?????文件???????????2??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\li
?????文件???????????2??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\li
?????文件???????????2??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\li
?????文件???????????2??2014-06-09?11:06??BezierFitting\BezierFitting\Debug\li
............此處省略37個文件信息
評論
共有 條評論