如何根据matlab拟合的曲线读出图像中点的坐标值

2024-12-05 13:22:28
推荐回答(2个)
回答1:

一种是利用图像工具栏的放大功能,用肉眼读出。
具体做法为:不断放大目标点,直到坐标精度达到使用者的要求

第二种是利用ginput函数,从图中点击不同位置获取不同点的坐标值,但是这个坐标值是相对坐标,不是绝对坐标
a = ginput(1);disp(a);此时使用者只需在图中点击目标点,即可显示出目标点坐标。

最后一种是利用工具栏中的tip工具,插入数据点标注,这个功能不仅能精确得到点坐标,而且可以标识出来。
工具栏->insert->tip工具。点击待读入点即可,程序会自动定位至曲线上

回答2:

楼主的意思是:已知图片上的一条曲线,如何获取该曲线上点的坐标(x,y)。
下面有段程序,是本人读曲线坐标所写,看看对楼主是否有帮助:
clc
clear all
im1 = imread('runx2.jpg'); %楼主在此替换成自己的图片.
im = rgb2gray(im1);
im = im(end:-1:1,:);
%imshow(im)
[m,n]=size(im);
cordx=[];
cordy=[];
for i=1:m
for j=1:n
if im(i,j)<100 %这个参数100可以在 0~255 之间随意改变,值越小越精确.
cordx=[cordx i];
cordy=[cordy j];
end
end
end
x=[];y=[];%得到的坐标
l=2;%此处参数可调
for k=1:l:length(cordx)
x=[x cordx(k)];
y=[y cordy(k)];
end
[xx ind]= sort(y);
yy = x(ind);
plot(xx,yy,'+')

xxx = unique(xx);
yyy = zeros(size(xxx));
for k = 1:length(xxx)
indxx = xx==xxx(k);
n = sum(indxx);
yyy(k) = sum(indxx.*yy)/n;
end
figure
plot(xxx,yyy,'+')
runx2 = [xxx' yyy'];