在matlab中比较Plots

时间:2013-07-18 09:43:41

标签: image-processing graph matlab

我在matlab中有两个图,其中我绘制了x和y坐标。如果我有这两个图,是否可以比较图是否匹配?我可以获得数字来判断它们的匹配程度吗?

请注意,图表可能在图中右/左/上/下移动(关闭轴没有问题),缩放/旋转(我还想知道它是否偏斜,但是现在,它是不是必须的)。

它不需要测试颜色元素,颜色反转和任何其他复杂的图形属性,而不是上面提到的基本属性。

如果matlab还不够,我会欢迎其他工具。

请注意,我不能简单地取x和y值的绝对差值。我可以获得x-绝对差值平均值和y-绝对差值然后平均值,但我需要一个组合误差。我需要比较图表。

要比较的图表。

enter image description here

修改

直接关联对我不起作用。

对于不同的数据集:我得到了.94相关性。对于给定的数据,这是非常高的。注意到一个数据的波动越来越小,速度越快。

enter image description here

1 个答案:

答案 0 :(得分:3)

您可以使用此代码访问绘制的数据

x = 10:100;  
y = log10(x);  
plot(x,y);  

h = gcf;  
axesObjs = get(h, 'Children'); %axes handles  
dataObjs = get(axesObjs, 'Children'); %handles to low-level graphics objects in axes  
objTypes = get(dataObjs, 'Type'); %type of low-level graphics object  
xdata = get(dataObjs, 'XData'); %data from low-level grahics objects  
ydata = get(dataObjs, 'YData');  

然后,您可以在xdata和ydata之间进行关联,例如,或任何类型的比较。系数R表示百分比匹配。

[R,P] = corrcoef(xdata, ydata);

您还有兴趣比较图形当前轴的轴限制。例如

R = ( diff(get(h_ax1,'XLim')) / diff(get(h_ax2,'XLim')) ) + ...
( diff(get(h_ax1,'YLim')) / diff(get(h_ax2,'YLim')) )

其中h_ax1是第一个ax的句柄,h_ax2是第二个ax的句柄。在这里,您将对(XLim + YLim)的值进行比较。可能与不同gca属性的比较确实很大。

修改

要比较两组点,您可以使用除分析关系之外的其他指标。我想到距离或收敛点,例如Hausdorff distance。 matlab中心提供了一个脚本here。我用这样的距离来比较字母形状。在维基百科页面中,“应用程序”部分非常重要(边缘检测器用于厚形状,但它可能与您的特定问题无关)。