簡體   English   中英

從已知的邊界框坐標計算旋轉的矩形大小

[英]Calculate rotated rectangle size from known bounding box coordinates

從旋轉的矩形中讀取了“ 計算邊界”框的坐標,以了解如何從旋轉的矩形計算邊界框坐標。 但在特殊情況下如下圖:

http://i.stack.imgur.com/3UNfD.png

如果獲得邊界框大小,坐標和旋轉度,如何獲得旋轉的矩形大小?

我嘗試在javascript中編寫代碼

//assume w=123,h=98,deg=35 and get calculate box size
var deg = 35;
var bw = 156.9661922099485;
var bh = 150.82680201149986;

//calculate w and h
var xMax = bw / 2;
var yMax = bh / 2;
var radian = (deg / 180) * Math.PI;
var cosine = Math.cos(radian);
var sine = Math.sin(radian);
var cx = (xMax * cosine) + (yMax * sine)   / (cosine * cosine + sine * sine);
var cy =  -(-(xMax * sine)  - (yMax * cosine) / (cosine * cosine + sine * sine));
var w = (cx * 2 - bw)*2;
var h = (cy * 2 - bh)*2;

但是......答案與w和h不匹配

在此輸入圖像描述

給定的邊界框的尺寸bx通過byt為矩形尺寸的逆時針旋轉xy

x = (1/(cos(t)^2-sin(t)^2)) * (  bx * cos(t) - by * sin(t))
y = (1/(cos(t)^2-sin(t)^2)) * (- bx * sin(t) + by * cos(t))

求導

為什么是這樣?

首先,考慮長度bx由矩形的一角切成兩塊ab 使用三角學以xytheta表示bx

bx = b          + a
bx = x * cos(t) + y * sin(t)            [1]

同樣地,對於by

by = c          + d
by = x * sin(t) + y * cos(t)            [2]

12可以矩陣形式表示為:

[ bx ] = [ cos(t)  sin(t) ] * [ x ]     [3]
[ by ]   [ sin(t)  cos(t) ]   [ y ]

請注意,矩陣幾乎是一個旋轉矩陣(但不完全 - 它是一個減號。)

左側划分矩陣,給出:

[ x ] = inverse ( [ cos(t)  sin(t) ]    * [ bx ]                        [4]
[ y ]             [ sin(t)  cos(t) ] )    [ by ]

對於2x2矩陣 ,矩陣求逆很容易評估,並擴展為:

[ x ] = (1/(cos(t)^2-sin(t)^2)) * [ cos(t) -sin(t) ] * [ bx ]           [5]
[ y ]                             [-sin(t)  cos(t) ]   [ by ]

[5]給出了兩個公式:

x = (1/(cos(t)^2-sin(t)^2)) * (  bx * cos(t) - by * sin(t))             [6]
y = (1/(cos(t)^2-sin(t)^2)) * (- bx * sin(t) + by * cos(t))

非常簡單!

您可能需要像仿射變換這樣的東西來發現點坐標。 然后使用標准幾何公式計算尺寸。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM