如何从图中提取所需的点并在MATLAB中计算它们之间的距离?

时间:2015-11-17 09:19:18

标签: matlab plot matlab-figure

我正在工作眼睛检测和跟踪部分。我正在使用该方法通过利用强度变化来检测开眼和闭眼。第一个强度变化是从负峰值到正峰值,第二个强度从正峰值变为负峰值。我绘制了睁眼的水平平均值并计算出最小值。现在我想提取所需的点作为起点和终点。这些点用黑色轮廓标出图表。在图中我感兴趣的是第2和第5最小值我想提取它们的位置并计算它们之间的距离。

I1=imread('open.jpg');
I2=rgb2gray(I1);
figure, title('open');
plot(1:size(I2,1), mean(I2,2));
hold on
horizontalAverages = mean(I2 , 2);
plot(1:size(I2,1) , horizontalAverages)
[Minimas locs] = findpeaks(-horizontalAverages) 
plot(locs , -1*Minimas , 'r*')

Minimas是:

  -86.5647
  -80.3647
  -81.3588
 -106.9882
  -77.0765
  -77.8235
  -92.2353
 -106.2235
 -115.3118
  -98.3706

他们的位置是:

    30
    34
    36
    50
    93
    97
   110
   121
   127
   136

Minimas plotted graph

2 个答案:

答案 0 :(得分:0)

您可以尝试遍历行数据(由数据和时间组成),并在n x 2矩阵中以降序(或升序)顺序存储最小点。

然后,只需选择矩阵的第一行(或最后一行),计算并找出各自数据的差异(我假设你找到它们之间的距离就是你的意思。)

答案 1 :(得分:0)

目前尚不清楚您是拥有数据还是仅拥有图表的图像。如果是后者:寻找峰值和不推荐眼睛谷。我强烈建议您获取DataThief或Engauge数字化仪的副本,并从您的图像中提取实际的x-y数据。您可以通过识别实际的极值或根据需要执行平滑操作来跟踪它。

如果您有基础数据,请使用findpeaks或类似工具来识别极值。一旦你有x,y个兴趣点,计算笛卡尔距离是微不足道的。