我正在尝试计算贴在我知道尺寸的面板上的纸张的实际尺寸。这是一个小例子:
当在面板前拍摄照片时,我的程序工作正常,我得到0.416 * 0.294,而我的纸张的实际尺寸是0.420 * 0.297,这是非常令人满意的。您可以尝试我的代码here。 以下是我为计算所做的功能
window.calculer = function(){
//-------------Calcul de X ---------------------------------------------------------------------------
ag_distance_x_metres=0.9;
ag_delta_x=x2-x1; // Calcul des ag_delta_x et ag_delta_y
ag_delta_y=y2-y1;
ag_distance_x_pixels=Math.sqrt(Math.pow(ag_delta_x, 2) + Math.pow(ag_delta_y, 2)); // Calcul de la distance x en pixels
ag_rapport_x = ag_distance_x_pixels/ag_distance_x_metres; // Calcul du rapport taille pixel / taille mètres
ag_delta_X = x5-x4; // Calcul des ag_delta_X et ag_delta_Y
ag_delta_Y = y5-y4;
ag_distance_X_pixels=Math.sqrt(Math.pow(ag_delta_X, 2) + Math.pow(ag_delta_Y, 2)); // Calcul de la distance X en pixels
ag_distance_X_metres=ag_distance_X_pixels/ag_rapport_x; // Calcul de la distance X en mètres
alert("ag_distance_X_metres = "+ ag_distance_X_metres);
//-------------Calcul de Y -----------------------------------------------------------------------------
ag_distance_y_metres=1.20;
ag_delta_x=x3-x2; // Calcul des ag_delta_x et ag_delta_y
ag_delta_y=y3-y2;
ag_distance_y_pixels=Math.sqrt(Math.pow(ag_delta_x, 2) + Math.pow(ag_delta_y, 2)); // Calcul de la distance y en pixels
ag_rapport_y = ag_distance_y_pixels/ag_distance_y_metres; // Calcul du rapport taille pixel / taille mètres
ag_delta_X = x6-x5; // Calcul des ag_delta_X et ag_delta_Y
ag_delta_Y = y6-y5;
ag_distance_Y_pixels=Math.sqrt(Math.pow(ag_delta_X, 2) + Math.pow(ag_delta_Y, 2)); // Calcul de la distance Y en pixels
ag_distance_Y_metres=ag_distance_Y_pixels/ag_rapport_y; // Calcul de la distance Y en mètres
alert("ag_distance_Y_metres = "+ ag_distance_Y_metres);
}
现在我正在尝试做同样的事情,但是如果没有在面板前面拍摄照片,就像这样: 您可以使用此图片here
尝试相同的代码对于这张图片,我的纸张尺寸得到0.405 * 0.254,这不是那么远,但还不够好。我想要有更准确的东西,但我不知道怎么做,我想我可能需要考虑更多的参数,但我对摄影并不是很了解,我在这里丢失了。
非常感谢任何帮助:)
修改:由于没有任何答案,我在谷歌搜索没有成功,我开始认为我没有足够的数据来进行这样的计算。 现在如果:
答案 0 :(得分:2)
您必须找到视角的vanishing points,并使用它来计算平行线的cross-ratio。有关详细信息,请参阅this question。
正如在答案中所说,你的第一个例子是有效的,因为:
如果给定线的消失点处于无穷远处,就像水平线一样 你的图片中的线条,然后它们只受到仿射 变换,因此这些线上的长度比率保留 透视投影。
对于第二个示例,您必须使用答案中给出的方法。
让我们考虑你有一个坐标系,原点为O(面板的一侧)和轴x(与O的消失点方向的倒数)。 A是消失点B,面板的另一侧,C和D是轴x与薄片的交点。
交叉比例CR(A,O;B,C)
为((A-B)/(A-C))/((O-B)/(O-C)) = 0.189
A = -317px
(已调整大小的图片中距离O到A的距离),B = 166
,C = 22
,D = 92.
因此,既然您知道OB = 90cm
,那么您就有OC = 0.189 * 90 = 17 cm
对于OD, CR(A,O;B,D) = 0.654
,您有OD = 0.654 * 90 = 58.9
因此,CD = OD - OC = 41.9 cm
。
你必须按照蓝线对另一个方向做同样的事情。
如果工作表未与面板方向对齐,则只需计算由面板轴定义的坐标系中每个角的坐标。原则保持不变。