声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 7839|回复: 21

[图像处理] 怎样根据选定的点画成闭合曲线?

[复制链接]
发表于 2008-6-11 16:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
怎样根据选定的点画成没有闭合的曲线和闭合曲线?
回复
分享到:

使用道具 举报

发表于 2008-6-11 16:06 | 显示全部楼层
发表于 2008-6-11 17:21 | 显示全部楼层
是不是想这样?
比如:
t=-10:0.1:10;
f=sin(t);
plot([t,t(1)],[f,f(1)]);
发表于 2008-6-11 19:00 | 显示全部楼层
没那么简单。
http://www.simwe.com/forum/thread-539094-1-1.html
PS:今天看到其他版贴了Simwe的链接被某奇人鉴定为“100%做广告”,不可思议+目瞪口呆之余,我也先申明一下:这里贴链接的原因是里面言论太多,代码太多,懒得转。另外,simwe的MATLAB版也不需要在任何论坛做广告。

评分

1

查看全部评分

发表于 2008-6-11 23:15 | 显示全部楼层
有时候确实很难划定界限......
 楼主| 发表于 2008-6-12 14:52 | 显示全部楼层
就是用户在图像上选几个点,然后把这几个点连成闭合曲线。
我试验一下,用matlab帮助里的代码,使用ginput(),可以返回坐标值,然后用样条函数spline,把点连成线,但是要想闭合还得在第一个点上选一下。,代码如下:
hold on
xy = [];
n = 0;
%左键选点
%右键选最后一个点
bt = 1;
while bt == 1
    [xi,yi,bt] = ginput(1);
    plot(xi,yi,'r.')
    n = n+1;
    xy(:,n) = [xi;yi];
end
t = 1:n;
ts = 1: 0.1: n;
xys = spline(t,xy,ts);
plot(xys(1,:),xys(2,:),'b-');
hold off
坐标值就存在xy()里面,怎样把它写进文本?

评分

1

查看全部评分

发表于 2008-6-12 15:05 | 显示全部楼层
原帖由 hanwangabc 于 2008-6-12 14:52 发表
就是用户在图像上选几个点,然后把这几个点连成闭合曲线。
我试验一下,用matlab帮助里的代码,使用ginput(),可以返回坐标值,然后用样条函数spline,把点连成线,但是要想闭合还得在第一个点上选一下。,代码如下: ...


坐标值写进文本可以参考此帖:
http://www.chinavib.com/forum/viewthread.php?tid=45622&extra=page%3D1%26amp%3Bfilter%3Ddigest

LZ的程序要实现最后一个点和第一个点重合好像有点困难,是不是可以修改一下?

[ 本帖最后由 ch_j1985 于 2008-6-12 15:08 编辑 ]
发表于 2008-6-12 15:45 | 显示全部楼层
是不是这个意思?

  1. hold on
  2. xy = [];
  3. n = 0;
  4. %左键选点
  5. %右键选最后一个点
  6. bt = 1;
  7. while bt == 1
  8.     [xi,yi,bt] = ginput(1);
  9.     plot(xi,yi,'r.')
  10.     n = n+1;
  11.     xy(:,n) = [xi;yi];
  12. end
  13. xy(:,n+1)=[xy(1,1),xy(2,1)];
  14. t = 1:n+1;
  15. ts = 1: 0.1: n+1;
  16. xys = spline(t,xy,ts);
  17. plot(xys(1,:),xys(2,:),'b-');
  18. hold off
复制代码

评分

1

查看全部评分

 楼主| 发表于 2008-6-12 15:47 | 显示全部楼层
实际结果我在matlab中试验是:
   141   126   127   149   
      106   113   137   129  
我用save xy.txt xy -ascii;保存后,打开xy.txt是这样的,
1.4100000e+002  1.2600000e+002  1.2700000e+002  1.4900000e+002

1.0600000e+002  1.1300000e+002  1.3700000e+002  1.2900000e+002  
有没有什么办法保存成
   141   126   127   149   
      106   113   137   129  这样?
 楼主| 发表于 2008-6-12 15:55 | 显示全部楼层

回复 8楼 的帖子

太谢谢你了,刚才发错了,原来是循环。

[ 本帖最后由 hanwangabc 于 2008-6-12 16:00 编辑 ]
发表于 2008-6-12 15:56 | 显示全部楼层
原帖由 hanwangabc 于 2008-6-12 15:47 发表
实际结果我在matlab中试验是:
   141   126   127   149   
      106   113   137   129  
我用save xy.txt xy -ascii;保存后,打开xy.txt是这样的,
1.4100000e+002  1.2600000e+002  1.2700000e+002  1.490 ...

是不是这个:

  1. hold on
  2. clc
  3. clear
  4. xy = [];
  5. n = 0;
  6. %左键选点
  7. %右键选最后一个点
  8. bt = 1;
  9. while bt == 1
  10.     [xi,yi,bt] = ginput(1);
  11.     plot(xi,yi,'r.')
  12.     n = n+1;
  13.     xy(:,n) = [xi;yi];
  14. end
  15. xy(:,n+1) = xy(:,1);
  16. t = 1:n+1;
  17. ts = 1: 0.1: n+1;
  18. xys = spline(t,xy,ts);
  19. plot(xys(1,:),xys(2,:),'b-');
  20. hold off
  21. fid=fopen('data.txt','w');
  22. for k1=1:2
  23.     for k2=1:n+1
  24.     fprintf(fid,'%f  ',xy(k1,k2));
  25.     end
  26.     fprintf(fid,'\n');
  27. end
  28. fclose(fid);
复制代码
发表于 2008-6-12 16:03 | 显示全部楼层
原帖由 hanwangabc 于 2008-6-12 15:55 发表
太谢谢你了,我看不懂这里:
xy(:,n+1)=[xy(1,1),xy(2,1)];
t = 1:n+1;
ts = 1: 0.1: n+1;

代码的意思是将第一个点的坐标值赋给最后一个点,这样右击的那个点算是倒数第二个点了,而不是最后一个了
xy(:,n+1)=[xy(1,1),xy(2,1)];
个人觉得应该改为xy(:,n+1)=[xy(1,1);xy(2,1)];
不过也不影响画图
 楼主| 发表于 2008-6-12 16:10 | 显示全部楼层

回复 11楼 的帖子

data.txt数据有点乱,没有自动换行,就像原本是
   141   126   127   149   
      106   113   137   129  
里面就是
    141   126   127   149   106   
          113   137   129
发表于 2008-6-12 16:29 | 显示全部楼层
原帖由 hanwangabc 于 2008-6-12 16:10 发表
data.txt数据有点乱,没有自动换行,就像原本是
   141   126   127   149   
      106   113   137   129  
里面就是
    141   126   127   149   106   
          113   137   129

下图中两个黑色的点就表示换行
保存为其它格式的文件试试看
tu.jpg
 楼主| 发表于 2008-6-12 17:37 | 显示全部楼层

回复 14楼 的帖子

我用这个解决了
dlmwrite('myfile1.txt', xy, 'precision', '%.0f', 'newline', 'pc');结果如下:
146,148,141,125,123,128,135,146
155,170,174,167,158,152,150,155

论坛怎么发图片啊?我本来想把结果切图贴上的。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-29 03:40 , Processed in 0.071168 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表