声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 5314|回复: 8

[绘图技巧] [讨论] 图片曲线如何用Matlab取点并画图

[复制链接]
发表于 2007-7-21 17:06 | 显示全部楼层 |阅读模式

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

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

x
最近忙于研究一些有趣的问题,其中涉及一些图片曲线的处理问题。
我发现一个有趣的事情---
举个简单例子,当用Matlab对图片曲线取点,然后画图时,发现画出的图形竟然是反的!
我想了一个办法可以实现原曲线图形,但坐标刻度反了,目前我还没有想到更好的办法,不知各位有何高见,欢迎讨论。

附件是曲线的图片,以下是我的代码:
%%%%%%%%%%%%%%%%%%%%
a=imread('conduct1.jpg');
imshow(a)
[x,y]=ginput         % 取点
plot(x,y,'b:',x,y,'o')
p=findobj('type','axes')
set(p,'Ydir', 'reverse')
%%%%%%%%%%%%%%%%%%%%

当然更复杂的是刻度与原图形一致.不过作适当标度,这个问题倒不难解决.
目前的问题是不反转y轴,能否画出原图片中的曲线? 欢迎各位参与讨论.

conduct1.jpg

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2007-7-21 19:03 | 显示全部楼层

回复 #1 xjzuo 的帖子

问题的原因:
axes显示图像以后坐标会有变化:左上角表示(1,1),右下角为(M,N)。其中M和N分别为图像的行数和列数。而plot、text等绘图默认的坐标是坐下角(0,0),右上角(1,1)。可以用下边的程序进行验证:

clear;
a=imread('lena.bmp');
imshow(a)
hold on;
text(1,1,'\heartsuit','Color','red')
[x,y]=ginput         % 取点
plot(x,y,'--rs','LineWidth',3,...
                'MarkerEdgeColor','k',...
                'MarkerFaceColor','g',...
                'MarkerSize',10)
figure(2)
text(1,1,'\heartsuit','Color','red')
text(0,0,'\heartsuit','Color','red')
应该是在你的imshow(a)指令后加个hold on就解决问题了

[ 本帖最后由 花如月 于 2007-7-21 19:09 编辑 ]

取点绘图的结果

取点绘图的结果

figure2(正常axes坐标)

figure2(正常axes坐标)
发表于 2007-7-21 19:16 | 显示全部楼层
又想了一下,虽然可以解决问题。不过画的曲线在图上,程序稍作修改可以不用翻转坐标而且不留原图的痕迹:

a=imread('lena.bmp');
b=a;
b(:,:)=255;
imshow(a)
[x,y]=ginput         % 取点
imshow(b);
hold on;
plot(x,y,'b:',x,y,'o')
觉得这种方法比反正坐标好理解点:handshake

[ 本帖最后由 无水1324 于 2007-7-22 09:55 编辑 ]
发表于 2007-7-21 19:59 | 显示全部楼层
晕了,貌似刚才的可以不用翻转y坐标轴。axis on以后结果和翻转的一样。应该用下面的程序:
clear;
a=imread('lena.bmp');
imshow(a)
[M N]=size(a)
[x,y]=ginput         % 取点
plot(x,M-y,'--rs','LineWidth',3,...
                'MarkerEdgeColor','k',...
                'MarkerFaceColor','g',...
                'MarkerSize',10)
各位见笑了:@D,继续讨论哦,好的办法继续贴。

[ 本帖最后由 花如月 于 2007-7-21 20:03 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2007-7-21 21:58 | 显示全部楼层
虽然感觉应该还有更好的办法(不用size(a),直接取点后处理,画图),不过还是赞一个!

(当然,我后面已经在实现曲线的平移,抓图等等)

[ 本帖最后由 xjzuo 于 2007-7-21 22:00 编辑 ]
发表于 2007-7-21 22:11 | 显示全部楼层

回复 #5 xjzuo 的帖子

谢谢你的鼓励。显示图像以后,gca.YDir内容都会变成 'reverse'。3楼程序不用size,不过结果和你的程序处理结果一样,会出现坐标刻度与原图形不一致(plot绘图的时候gca.YDir内容是'normal')。用plot(x,M-y,'--rs','LineWidth',3,...
                'MarkerEdgeColor','k',...
                'MarkerFaceColor','g',...
                'MarkerSize',10)
虽然需要计算一次图像的宽度,但相当于对y做了一次翻转,图像和坐标标注都正常了。而原来的虽然翻转了一次标注却有问题。呵呵,期待更精炼的程序
发表于 2011-1-17 20:38 | 显示全部楼层
好贴! Trein bien!
发表于 2012-3-26 11:39 | 显示全部楼层
发表于 2012-3-26 22:15 | 显示全部楼层
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-11-29 04:42 , Processed in 0.087590 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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