社区
机器视觉
帖子详情
计算一条曲线中的多条直线段,该如果做???
freespider
2003-10-14 11:57:11
有一些离散点,由这些离散点构成了一条曲线,曲线中的大致分为几段,每段都近似于一条直线。我需要根据这些离散点(已经存在数组中了),求出:曲线中分为几段,每段的交界点的位置。
请问该怎样求,提供点思路都行。
...全文
177
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
打赏
举报
回复
但是我不知道分为几段啊,还有各段的起始和结束,我都不知道,我希望求出的就是这个。
使用Arcpy自定义
曲线
线
段
替换为线
段
的实现
从数据质检需求和需要保持源数据不变的原则下,当我们需要对
曲线
线
段
(贝塞尔、圆弧和椭圆弧)进行查找和修复时,需要单独输出
曲线
线
段
的记录和最后修复后的结果。本文介绍如何使用Arcpy自定义
曲线
线
段
替换为线
段
。
直线
段
裁剪Cohen-Sutherland算法
•
直线
段
裁剪算法是复杂图元裁剪的基础。 • 复杂的
曲线
可以通过折线
段
来近似,从而裁剪问题也可以化为
直线
段
的裁剪问题。 Cohen-Sutherland裁剪 • 基本思想: 对于每条线
段
P1P2分为三种情况处理分为三种情况处理: (1)若P1P2完全在窗口内,则显示该线
段
P1P2简称“取”之。 (2)若P1P2明显在窗口外,则丢弃该线
段
,简称“弃”之。 (3)若线
段
不满足“取”或 “弃”的条件,则...
详解样条
曲线
(上)(包含贝塞尔
曲线
)
样条
曲线
(Spline Curves) 前言: 关于样条
曲线
的一些总结和使用,其
中
包含贝塞尔
曲线
的介绍。内容实际是为了解决在给定控制点的条件下,如何确定一个光滑
曲线
的问题。样条
曲线
被广泛应用于模型的几何重构平滑
中
。 文章目录样条
曲线
(Spline Curves)0. 基本概念1. 起源2. 贝塞尔
曲线
(Bézier curve)1.1
直线
段
表示(2 points)1.2 抛物线三切线定理(3 points)1.3 通用公式1.4 代码实现3.
曲线
连续性描述4. B样条基函数(B-Spline Bas
Reeds-Shepp和Dubins
曲线
简介
什么是Reeds-Shepp
曲线
? 想象你下班开车回家,到了小区后想把车停到你个人的停车位里面。作为一个喜欢追求挑战的老司机,你想找
一条
最短的路径把车停进去。那么这样的路径是什么呢?答案就是Reeds-Shepp
曲线
。Reeds-Shepp
曲线
由Reeds和Shepp二人在1990年的论文《Optimal paths for a car that goes both forwards and ......
交通工程
中
的
曲线
放样
计算
实践
在解决上述问题
中
,缓和
曲线
和圆
曲线
扮演着至关重要的角色。缓和
曲线
是指在
直线
与圆
曲线
或两圆
曲线
之间设置的一种过渡
曲线
,用以使车辆平滑过渡,减少离心力的影响。圆
曲线
则是一种标准
曲线
,广泛应用于道路弯道设计
中
,其设计不仅要保证车辆平稳行驶,还需兼顾土地利用、工程成本等多方面因素。缓和
曲线
是指在平面
曲线
设计
中
,为减少离心力突变、提高行驶舒适性和安全性,用
一条
曲线
来代替
直线
与圆
曲线
的突变连接。缓和
曲线
通常位于
直线
段
和圆
曲线
段
的
中
间,它为车辆从
直线
行驶状态平稳过渡到
曲线
行驶状态提供了必要的时间和空间。
机器视觉
4,514
社区成员
15,347
社区内容
发帖
与我相关
我的任务
机器视觉
图形图像/机器视觉
复制链接
扫一扫
分享
社区描述
图形图像/机器视觉
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章