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变量的值. 觉得你这个问题可以参考此贴,http://forum.simwe.com/thread-883205-1-1.html 2# messenger
谢谢斑竹.
我觉得那个帖子里面的方法更适合一条平直的线上(轴上),每当相邻两点的B值跨越0.5,插值得出邻近两点中间的A值.但是我的问题是contour的曲线,不规则的,不知道有没有其他的方法? 以B为横轴,A为纵轴绘图就可以成为那个贴子那种情况了
你这个问题如果用contour,画了B就画不了A,画了A就画不了B,根本不是contour能解决的问题,不要总是执着於contour。 本帖最后由 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为纵轴 你这么画不行,要把A、B这两个二维矩阵转化为一维矩阵,用reshape命令。 你这么画不行,要把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). 你把A、B互换再画图,就可以按2#提供的方法求B=0.5的A了。
你没有把数据贴出来,感觉你的数据有规律,明显对应多条曲线,是不是B按0-1循环取值呀? 你把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轨迹的变化。
谢谢! 如何把找到的A值对应回每一条contour,和你找到B=0.5的A值的方法有关系。
另外,不知道你说的contour是什么。 如何把找到的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'); 问一句:你是在做基于亚像素级的图像处理吗?
你的问题可以这样解决
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换成你的即可。 问一句:你是在做基于亚像素级的图像处理吗?
你的问题可以这样解决
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解决了我的问题。再次感谢! contour函数在算等高线数据时,好像用到了插值,得出的坐标点不是整数,所以在求相应的A值时,就需要用插值。
页:
[1]