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

如何在MATLAB中从图形中提取所需点并计算它们之间的距离?,matlab,plot,matlab-figure,Matlab,Plot,Matlab Figure,我的工作眼睛检测和跟踪部分。我正在使用这种方法通过强度变化来检测眼睛的睁开和闭上。第一个强度变化是从负峰值到正峰值,第二个强度变化是从正峰值到负峰值。我绘制了睁眼的水平平均值,并计算了最小值。现在我想提取所需的点作为起点和终点。这些点在图中用黑色轮廓标出。在图中,我对第二和第五个极小值感兴趣,我想提取它们的LOC并计算它们之间的距离 I1=imread('open.jpg'); I2=rgb2gray(I1); figure, title('open'); plot(1:size(I2,1),

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

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*')
最低要求为:

  -86.5647
  -80.3647
  -81.3588
 -106.9882
  -77.0765
  -77.8235
  -92.2353
 -106.2235
 -115.3118
  -98.3706
他们的LOC是:

    30
    34
    36
    50
    93
    97
   110
   121
   127
   136

您可以尝试遍历由数据和时间组成的行数据,并将最小点以降序或升序存储在nx2矩阵中


然后,只需选择矩阵的前两行或后两行,计算并找出它们各自数据中的差异,我假设这就是你所说的找出它们之间距离的意思。

不清楚你是否有数据或只是图形的图像。如果是后者:不建议用肉眼查找峰谷。我强烈建议您获取data小偷或Engauge Digitalizer的副本,并从图像中提取实际的x-y数据。您可以通过识别实际极值或根据需要执行平滑操作来实现这一点

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*')

如果您有基础数据,则使用FindPeak或类似工具来识别极值。一旦你有了感兴趣的x,y点,计算笛卡尔距离就很简单了。

可能是jim的重复,我只对图中所示的点感兴趣,这些点发生负斜率到正斜率的变化,然后是正斜率到负斜率的变化。就像起点和终点一样。你明白了吗?是的,没错,我想提取兴趣点来寻找距离。我已经用findpeaks-x计算了局部极小值。现在我想提取第二个和第五个局部极小值点,它们是我感兴趣的点,用于自动计算距离。