matlab中ginput如何使用,使用ginput在MATLAB中绘制数字化

下面是一个概念证明,可以让你走上正确的轨道。我用原来的代码替换了我认为是“好的做法”的东西。

function q36470836

%% // Definitions:

FIG_NUM = 36470836;

%% // Inputs:

fname = 'http://i.stack.imgur.com/2as4t.png';

xt = logspace(3,8,6);

yt = logspace(-4,-1,4);

%% // Init

figure(FIG_NUM); clf

% Read and plot the image

im = imread(fname);

hIMG = imshow(im); axis image;

%// Set ticks

hDigitizer = axes('Color','none',...

'XLim',[xt(1) xt(end)],'YLim',[yt(1) yt(end)],...

'XScale','log','YScale','log',...

'Position',hIMG.Parent.Position .* [1 1 696/785 (609-64+1)/609]);

uistack(hDigitizer,'top'); %// May be required in some cases

grid on; hold on; grid minor;

%// Collect data:

[x,y] = ginput; %// Click on points, and then hit ENTER to finish

%// Plot collected data:

scatter(x,y,'o','MarkerEdgeColor','r');

%// Save data:

save Fig15a.mat x y以下是它的外观示例:

YwhJ9.png

几点说明:

xt,yt可以使用logspace以更干净的方式创建。

很难(可能不可能)将数字化网格与图像正确对齐,这将不可避免地导致数据错误。虽然这可以在以下场景中帮助(为此您将需要矢量图形编辑器,例如免费软件InkScape):

如果您有任何机会从PDF文件中获取此图像,它将显示为矢量图像(您可以通过尽可能多地放大来测试,而不会使图表变得像素化;这似乎是您的情况从.png看起来的方式来看,最好将其保存为矢量图像,然后你有两个选择:

将图像导出到具有极高分辨率的位图,然后再次尝试数字化过程。

将矢量图像保存为.svg,然后使用您喜欢的文本编辑器打开文件并获取点的确切坐标。

如果源图像是位图(与矢量图形相对),则可以"trace the bitmap",从而将其转换为矢量,然后#GOTO步骤1.

此解决方案(目前)不支持调整图形大小。

Position设置中出现的幻数是下图所示的缩放系数(size(im)也是[609 785 3])。从技术上讲,这些可以使用“原始图像处理”找到,但在这种情况下,我只是明确地对它们进行了硬编码。

chD92.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值