找回密码
 注册
Simdroid-非首页
查看: 157|回复: 13

Matlab Contour 的问题.

[复制链接]
发表于 2009-6-3 23:29:44 | 显示全部楼层 |阅读模式 来自 美国
本帖最后由 xiaoniu 于 2009-6-4 02:51 编辑

在二维面上均匀分布256x256个网格点。每个店有两个变量,A和B.
这样有两个矩阵:A(256,256), B(256,256), 其中B的值在0~1之间。


我的问题是:我先用contour画出B=0.5的曲线,如何在这些B=0.5的contour上确定相应的A值?

我尝试着这样做:
(1) 求出 contour matrix C:

     [x,y]=meshgrid(1:1:256,1:1:256);
     [C,h]=contour(x,y,B,[0.5],'-m');
C是一个2行矩阵,我的C的第一个列上的值是:C(1,1)=0.5; C(2,1)=75, 就是说这第一条B=0.5的contour上有75个点,每一个点的一对(x,y)坐标在C(:,2:76)中.

(2) 我是不是可以利用C(:,2:76)这些坐标来对A进行插值,从而得到B=0.5 contour 线上相应的A值?
具体应该怎样做? 有什么和contour 相类似的intrinsic function可以做这个? 我只想到用interp2之类的插值函数.

谢谢!!

这就是B=0.5的contour曲线,我想求出这些线上的A变量的值.

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2009-6-4 00:36:09 | 显示全部楼层 来自 浙江杭州
Simdroid开发平台
觉得你这个问题可以参考此贴,http://forum.simwe.com/thread-883205-1-1.html
回复 不支持

使用道具 举报

 楼主| 发表于 2009-6-4 02:59:08 | 显示全部楼层 来自 美国
2# messenger

谢谢斑竹.

我觉得那个帖子里面的方法更适合一条平直的线上(轴上),每当相邻两点的B值跨越0.5,插值得出邻近两点中间的A值.但是我的问题是contour的曲线,不规则的,不知道有没有其他的方法?
回复 不支持

使用道具 举报

发表于 2009-6-4 11:52:47 | 显示全部楼层 来自 浙江杭州
以B为横轴,A为纵轴绘图就可以成为那个贴子那种情况了

你这个问题如果用contour,画了B就画不了A,画了A就画不了B,根本不是contour能解决的问题,不要总是执着於contour。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-6-4 12:47:52 | 显示全部楼层 来自 美国
本帖最后由 xiaoniu 于 2009-6-4 12:49 编辑
以B为横轴,A为纵轴绘图就可以成为那个贴子那种情况了

你这个问题如果用contour,画了B就画不了A,画了A就画不了B,根本不是contour能解决的问题,不要总是执着於contour。
messenger 发表于 2009-6-4 11:52


谢谢斑竹.

主要我的问题是: 我要研究沿着某一条(或者说每一条每一条分别研究)B=0.5曲线上面变量A的变化.比如,上面B=0.5的contour图里面大概有7条曲线,我要分别研究每一条上面的A的值的分布.
如果以B为横轴,A为纵轴绘图,那么找到的是所有的B=0.5的A,之后,我怎样才能把这些A值还原到每一条B=0.5的曲线上呢?

我画了一个图: 以B为横轴,A为纵轴

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2009-6-4 13:18:09 | 显示全部楼层 来自 浙江杭州
你这么画不行,要把A、B这两个二维矩阵转化为一维矩阵,用reshape命令。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-6-5 00:02:33 | 显示全部楼层 来自 美国
你这么画不行,要把A、B这两个二维矩阵转化为一维矩阵,用reshape命令。
messenger 发表于 2009-6-4 13:18


这个图里的A,B是已经转化为一维矩阵的。
图里的A(1,256*256),B(1,256*256).
回复 不支持

使用道具 举报

发表于 2009-6-5 00:12:49 | 显示全部楼层 来自 浙江杭州
你把A、B互换再画图,就可以按2#提供的方法求B=0.5的A了。

你没有把数据贴出来,感觉你的数据有规律,明显对应多条曲线,是不是B按0-1循环取值呀?
回复 不支持

使用道具 举报

 楼主| 发表于 2009-6-5 00:32:42 | 显示全部楼层 来自 美国
你把A、B互换再画图,就可以按2#提供的方法求B=0.5的A了。

你没有把数据贴出来,感觉你的数据有规律,明显对应多条曲线,是不是B按0-1循环取值呀?
messenger 发表于 2009-6-5 00:12


我互换了坐标。B没有循环取这个规律,只是分布在0,1之间的散点。在某一个B值上,A会有不同的取值。

根据下面的图,我可以找到B=0.5的A值,但是我不知道如何把找到的A值对应回每一条contour,因为我要每条contour分别画出A随着contour轨迹的变化。

谢谢!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
回复 不支持

使用道具 举报

发表于 2009-6-5 10:02:43 | 显示全部楼层 来自 浙江杭州
如何把找到的A值对应回每一条contour,和你找到B=0.5的A值的方法有关系。

另外,不知道你说的contour是什么。
回复 不支持

使用道具 举报

 楼主| 发表于 2009-6-5 11:46:24 | 显示全部楼层 来自 美国
如何把找到的A值对应回每一条contour,和你找到B=0.5的A值的方法有关系。

另外,不知道你说的contour是什么。
messenger 发表于 2009-6-5 10:02


B=0.5的contour就是我用下面方法画出的,画出的图是第一楼那个temp.jpg。
[x,y]=meshgrid(1:1:256,1:1:256);
[C,h]=contour(x,y,B,[0.5],'-m');
回复 不支持

使用道具 举报

发表于 2009-6-5 18:29:06 | 显示全部楼层 来自 天津
问一句:你是在做基于亚像素级的图像处理吗?
你的问题可以这样解决

  1. A = rand(256);
  2. B = rand(256);
  3. [x,y] = meshgrid(1:256,1:256);
  4. [C,h] = contour(x,y,B,0.5,'-m');
  5. C(:,C(1,:) == 0.5) = [];
  6. A_under_B = interp2 (x, y, A, C(1,:), C(2,:), 'spline');
复制代码


把A,B换成你的即可。

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2009-6-6 00:09:56 | 显示全部楼层 来自 美国
问一句:你是在做基于亚像素级的图像处理吗?
你的问题可以这样解决

A = rand(256);
B = rand(256);
[x,y] = meshgrid(1:256,1:256);
[C,h] = contour(x,y,B,0.5,'-m');
C(:,C(1,:) == 0.5) = [];
A_unde ...
xiezhh 发表于 2009-6-5 18:29



非常感谢xiezhh!

我不是做基于亚像素级的图像处理。但是你的code解决了我的问题。再次感谢!
回复 不支持

使用道具 举报

发表于 2009-6-6 17:09:55 | 显示全部楼层 来自 天津
contour函数在算等高线数据时,好像用到了插值,得出的坐标点不是整数,所以在求相应的A值时,就需要用插值。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-10-7 07:23 , Processed in 0.059333 second(s), 14 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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