社区
机器视觉
帖子详情
计算一条曲线中的多条直线段,该如果做???
freespider
2003-10-14 11:57:11
有一些离散点,由这些离散点构成了一条曲线,曲线中的大致分为几段,每段都近似于一条直线。我需要根据这些离散点(已经存在数组中了),求出:曲线中分为几段,每段的交界点的位置。
请问该怎样求,提供点思路都行。
...全文
77
8
打赏
收藏
计算一条曲线中的多条直线段,该如果做???
有一些离散点,由这些离散点构成了一条曲线,曲线中的大致分为几段,每段都近似于一条直线。我需要根据这些离散点(已经存在数组中了),求出:曲线中分为几段,每段的交界点的位置。 请问该怎样求,提供点思路都行。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zzwu
2003-10-14
打赏
举报
回复
可以用Hough变换来提取各组成线段.
你不需要考察整幅图像,而只要考察组成曲线的那些点就行了,所以速度应是很快的.
freespider
2003-10-14
打赏
举报
回复
对,是有序的
HUNTON
2003-10-14
打赏
举报
回复
这些离散点是不是从曲线的一头到另一头地放在数组中,也就是说这些点是不是有序的啊?
zzwu
2003-10-14
打赏
举报
回复
要利用2点就来计算斜率恐怕不行.只要不是完全垂直或完全水平的直线,它们的相邻像素的斜率往往变化很大,1,2两点可以是左右走,2,3两就可能立刻变成上下走了,如看成直线,那就是有90度的变化了.
HUNTON
2003-10-14
打赏
举报
回复
把每相邻两点的斜率都算算,如果连续几个斜率都没什么变化,那么这几个斜率对应的点就是在一条直线上了。变化较大的,斜率相应线段的起点就是折线端点。
zzwu
2003-10-14
打赏
举报
回复
Hough变换得到的是一些直线,起点和终点都要利用直线求交来得到.
zzwu
2003-10-14
打赏
举报
回复
Hough变换可以参看下面的程序(要对其中的循环作修改):
BOOL Hough(HWND hWnd)
{
typedef struct{
int topx;
int topy;
int botx;
int boty;
}MYLINE;
DWORD BufSize;
LPBITMAPINFOHEADER lpImgData;
LPSTR lpPtr;
HDC hDc;
LONG x,y;
long i,maxd;
int k;
int Dist,Alpha;
HGLOBAL hDistAlpha,hMyLine;
int *lpDistAlpha;
MYLINE *lpMyLine,*TempLine,MaxdLine;
static LOGPEN rlp={PS_SOLID,1,1,RGB(255,0,0)};
HPEN rhp;
if( NumColors!=256){
MessageBox(hWnd,"Must be a mono bitmap with grayscale palette!","Error Message",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
Dist=(int)(sqrt( (double)bi.biWidth*bi.biWidth+(double)bi.biHeight*bi.biHeight)+0.5);
Alpha=180 /2 ; //0 degree to 178 degree , step is 2 degrees
if((hDistAlpha=GlobalAlloc(GHND,(DWORD)Dist* Alpha * sizeof(int)))==NULL){
MessageBox(hWnd,"Error alloc memory!","Error Message",MB_OK|MB_ICONEXCLAMATION);
return FALSE;
}
if((hMyLine=GlobalAlloc(GHND,(DWORD)Dist*Alpha*sizeof(MYLINE)))==NULL){
GlobalFree(hDistAlpha);
return FALSE;
}
BufSize=bf.bfSize-sizeof(BITMAPFILEHEADER);
lpImgData=(LPBITMAPINFOHEADER)GlobalLock(hImgData);
lpDistAlpha=(int *)GlobalLock(hDistAlpha);
lpMyLine=(MYLINE *)GlobalLock(hMyLine);
for (i=0;i<(long)Dist*Alpha;i++){
TempLine=(MYLINE*)(lpMyLine+i);
(*TempLine).boty=32767;
}
for (y=0;y<bi.biHeight;y++){
lpPtr=(char *)lpImgData+(BufSize-LineBytes-y*LineBytes);
for (x=0;x<bi.biWidth;x++)
if(*(lpPtr++)==0)
for (k=0;k<180;k+=2){
i=(long)fabs((x*cos(k*PI/180.0)+y*sin(k*PI/180.0)));
*(lpDistAlpha+i*Alpha+k/2)=*(lpDistAlpha+i*Alpha+k/2)+1;
TempLine=(MYLINE*)(lpMyLine+i*Alpha+k/2);
if(y> (*TempLine).topy){
(*TempLine).topx=x;
(*TempLine).topy=y;
}
if(y< (*TempLine).boty){
(*TempLine).botx=x;
(*TempLine).boty=y;
}
}
}
maxd=0;
for (i=0;i<(long)Dist*Alpha;i++){
TempLine=(MYLINE*)(lpMyLine+i);
k=*(lpDistAlpha+i);
if( k > maxd){
maxd=k;
MaxdLine.topx=(*TempLine).topx;
MaxdLine.topy=(*TempLine).topy;
MaxdLine.botx=(*TempLine).botx;
MaxdLine.boty=(*TempLine).boty;
}
}
hDc = GetDC(hWnd);
rhp = CreatePenIndirect(&rlp);
SelectObject(hDc,rhp);
MoveToEx(hDc,MaxdLine.botx,MaxdLine.boty,NULL);
LineTo(hDc,MaxdLine.topx,MaxdLine.topy);
DeleteObject(rhp);
ReleaseDC(hWnd,hDc);
GlobalUnlock(hImgData);
GlobalUnlock(hDistAlpha);
GlobalFree(hDistAlpha);
GlobalUnlock(hMyLine);
GlobalFree(hMyLine);
return TRUE;
}
freespider
2003-10-14
打赏
举报
回复
但是我不知道分为几段啊,还有各段的起始和结束,我都不知道,我希望求出的就是这个。
matlab
曲线
函数拟合案例教程
通过本套教程,可以快速入门和掌握matlab
曲线
函数拟合,通过编程技术掌握相关基础案例实践
html
直线
变
曲线
,CSS3怎么画
曲线
?
CSS3怎么画
曲线
?下面本篇文章给大家介绍一下CSS3画
曲线
的方法。...因此,就想着可以利用border的特性画一条
曲线
。1、首先我们先建一个div元素2、给它一些基本样式.container {width: 500px;height: 200px;border...
MATLAB
中
利用cftool导出代码实现一张图
中
拟合多条平滑
曲线
MATLAB
中
自带的cftool拟合工具箱不能将多条
曲线
同时画在同一副图
中
,而常规的plot()函数又不能拟合平滑
直线
,接下来总结一种可以利用cftool导出的代码,在一张图
中
拟合多条平滑
曲线
。 首先输入所要拟合的数据,如x,...
如何使用MATLAB在一个图
中
创建多条拟合
曲线
的方法
以下是未进行拟合的原始
曲线
的实现代码 x1=[0,2.95,6,7.0,13.1,15]; x2=[0,3.1,6,7.1,12.9,15]; y1=[410,328,350,365,250,245];...hold on $不更新图形的情况下画第二条
曲线
plot(x2,y2); 标题 下面进行图...
java
曲线
绘制_Java
中
简单绘制
曲线
和可视
直线
回答是Windows的画图是别人
做
好的界面给你去使用,而你并不了解其
中
的原理一样,只有我们通过一些简单的功能去学习Java
中
的一些基本监听器,以后就可以
做
一些功能丰富的程序。本次我们将用到MouseMotionListener即.....
机器视觉
4,448
社区成员
15,336
社区内容
发帖
与我相关
我的任务
机器视觉
图形图像/机器视觉
复制链接
扫一扫
分享
社区描述
图形图像/机器视觉
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章