声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

12
返回列表 发新帖
楼主: realhappy

[图像处理] 如何把图中曲线的坐标点找出来?

 关闭 [复制链接]
发表于 2006-8-31 23:02 | 显示全部楼层
拿尺子量也没必要,说一个偏方:
1.
  1. >> [X,map]=imread('yourfig.jpg');
  2. imshow(X)
复制代码

2.
图形工具栏里有一个data cursor工具,点击之,右键,将数据display方式改为在window内部显示
3.找到你要的基准点的坐标,右键,输出到workspace,输出时可以选择变量名称。其它所有点相同,鼠标悬停在已经点中的数据点会出现双十字行cursor,移动可以微调,如果还嫌精度不够,可以局部放大图形再选。
4.对已有坐标数据做坐标变换,注意,如果没有记错的话,此时是象素单位应当是pixel,转换为正常单位应当就可以,如何转换我忘记具体数据了。
可能会有一定的误差,不过也比尺子稍强一些^_^
这个问题直接做出精确解难度很大,甚至不可能,因为红色十字点不再代表一个数据点,而是多个象素点堆叠在一起。选哪个象素点不选哪个,难以编程实现。个人认为除了ginput之外,这个方法也不失为一个选择,至少可以连颜色矩阵的数值同样也显示出来,另外它比ginput要精确得多:一方面放大图像和点取数据可以交互,另一方面也是最重要的一点,你点取一个数据点不满意的时候,可以用键盘的光标键左右上下精准移动。hoho...
好像有一个软件可以实现这个功能,好像叫个什么digits...什么的,忘了。
BTW:几个论坛还没见谁这么玩儿过data cursor,应当是我首创,大概是这三天内我最觉满意的一个思路,其实也是没有其它妙法而逼出来的无奈之举...-_-|||

[ 本帖最后由 bainhome 于 2006-8-31 23:28 编辑 ]

评分

1

查看全部评分

回复 支持 反对
分享到:

使用道具 举报

 楼主| 发表于 2006-9-1 14:33 | 显示全部楼层
bainhome的见解很有特色啊。
发表于 2006-9-1 17:05 | 显示全部楼层
这个还是可以找出来的,简单做了一下,下面的代码还不完善,如果要做到通用还需要大量的修改,另外代码也需要进行优化,不过还是基本能实现你这个问题的

  1. clc;
  2. clear;
  3. a=imread('a.jpg');
  4. a(a<150)=0;
  5. a(a>150)=255;
  6. [L,M,N]=size(a);
  7. blkx=[];
  8. blky=[];
  9. for i=1:L;
  10.         if sum(a(i,fix(M/3):fix(2*M/3),2))<10;
  11.         blky=[blky,i];
  12.     end   
  13. end
  14. for j=1:M;
  15.         if sum(a(fix(L/3):fix(2*L/3),j,2))<10;
  16.         blkx=[blkx,j];
  17.     end
  18.     for i=1:L
  19.         if a(i,j,1)~=255 | a(i,j,2)~=0 | a(i,j,3)~=0
  20.             a(i,j,:)=255;
  21.         end
  22.     end
  23. end
  24. b=rgb2gray(a);
  25. b(b~=255)=0;
  26. imshow(b)
  27. for i=1:40
  28.     dx=(max(blkx)-min(blkx))/40;
  29.     xi(i)=fix(dx*i+min(blkx));
  30.     yi(i)=mean(find(b(:,xi(i))==0));
  31.     y(i)=1.5-1.5*(yi(i)-min(blky))/(max(blky)-min(blky));
  32. end
复制代码


其中y就是你需要输出的结果

y =

  Columns 1 through 7

    0.7440    0.6720    0.5160    0.6460    0.9240    1.0680    1.0740

  Columns 8 through 14

    1.0560    1.1760    1.1400    1.2840    1.3080    1.0260    0.9120

  Columns 15 through 21

    0.9480    0.6600    0.6840    0.7920    0.6180    0.7575    1.0380

  Columns 22 through 28

    0.9780    0.8820    1.0380    1.1280    1.2000    1.2420    1.1520

  Columns 29 through 35

       NaN    1.1467    0.8860    0.8760    0.7152    0.6480    0.3915

  Columns 36 through 40

    0.9660    0.9024    0.8400       NaN    1.1880


说明一点这里有两个结果出现了NAN,这是由于在你的图片中那个标签挡住了两个点的原因!

评分

2

查看全部评分

 楼主| 发表于 2006-9-1 18:01 | 显示全部楼层
happy真是高人啊,非常感谢!
发表于 2007-6-13 16:46 | 显示全部楼层
不错啊,受教了。:lol
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-12 13:24 , Processed in 0.102350 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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