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