xiaoniu 发表于 2009-6-3 23:29:44

Matlab Contour 的问题.

本帖最后由 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:

   =meshgrid(1:1:256,1:1:256);
   =contour(x,y,B,,'-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变量的值.

messenger 发表于 2009-6-4 00:36:09

觉得你这个问题可以参考此贴,http://forum.simwe.com/thread-883205-1-1.html

xiaoniu 发表于 2009-6-4 02:59:08

2# messenger

谢谢斑竹.

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

messenger 发表于 2009-6-4 11:52:47

以B为横轴,A为纵轴绘图就可以成为那个贴子那种情况了

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

xiaoniu 发表于 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 http://forum.simwe.com/images/common/back.gif

谢谢斑竹.

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

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

messenger 发表于 2009-6-4 13:18:09

你这么画不行,要把A、B这两个二维矩阵转化为一维矩阵,用reshape命令。

xiaoniu 发表于 2009-6-5 00:02:33

你这么画不行,要把A、B这两个二维矩阵转化为一维矩阵,用reshape命令。
messenger 发表于 2009-6-4 13:18 http://forum.simwe.com/images/common/back.gif

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

messenger 发表于 2009-6-5 00:12:49

你把A、B互换再画图,就可以按2#提供的方法求B=0.5的A了。

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

xiaoniu 发表于 2009-6-5 00:32:42

你把A、B互换再画图,就可以按2#提供的方法求B=0.5的A了。

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

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

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

谢谢!

messenger 发表于 2009-6-5 10:02:43

如何把找到的A值对应回每一条contour,和你找到B=0.5的A值的方法有关系。

另外,不知道你说的contour是什么。

xiaoniu 发表于 2009-6-5 11:46:24

如何把找到的A值对应回每一条contour,和你找到B=0.5的A值的方法有关系。

另外,不知道你说的contour是什么。
messenger 发表于 2009-6-5 10:02 http://forum.simwe.com/images/common/back.gif

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

xiezhh 发表于 2009-6-5 18:29:06

问一句:你是在做基于亚像素级的图像处理吗?
你的问题可以这样解决

A = rand(256);
B = rand(256);
= meshgrid(1:256,1:256);
= contour(x,y,B,0.5,'-m');
C(:,C(1,:) == 0.5) = [];
A_under_B = interp2 (x, y, A, C(1,:), C(2,:), 'spline');


把A,B换成你的即可。

xiaoniu 发表于 2009-6-6 00:09:56

问一句:你是在做基于亚像素级的图像处理吗?
你的问题可以这样解决

A = rand(256);
B = rand(256);
= meshgrid(1:256,1:256);
= contour(x,y,B,0.5,'-m');
C(:,C(1,:) == 0.5) = [];
A_unde ...
xiezhh 发表于 2009-6-5 18:29 http://forum.simwe.com/images/common/back.gif


非常感谢xiezhh!

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

xiezhh 发表于 2009-6-6 17:09:55

contour函数在算等高线数据时,好像用到了插值,得出的坐标点不是整数,所以在求相应的A值时,就需要用插值。
页: [1]
查看完整版本: Matlab Contour 的问题.