例えば、画像内の任意の場所にあるboxの座標があるとします。
boxは画像の幅と高さを1として正規化されています。
さらに、そのbox内の任意の場所にある、mini_boxの座標があるとします。
mini_boxは、最初のboxの幅と高さを1として正規化されています。
小さい座標系から、大きい座標系への変換
mini_boxは、画像の座標系では、どのような座標になるのでしょうか?
ここでは、それぞれのboxのorigin_x,origin_y,width,heightがわかっているとします。
box = [x,y,w,h] # 画像内座標系
mini_box = [mini_x,mini_y,mini_w,mini_h] # box内座標系
def scale_to_big_coordinate_system(mini_box,box):
scaled_mini_box = [(mini_box[0])*box[2]+box[0],
(mini_box[1])*crop_box[3]+box[1],
mini_box[2]*box[2],
mini_box[3]*box[3]]
return scaled_mini_box # 画像内座標系にスケールしたmini_box
考え方としては、boxのorigin_xからmini_boxのorigin_xまでの距離を、boxの幅(つまり画像幅に対してのスケール)をかけて画像座標系にスケールし、boxのorigin_xを足す、という計算です。高さも同様です。
center_x,center_yで計算する場合は、boxのorigin_xからmini_boxのcenter_xまでの距離をスケールします。
幅と、高さは、そのまま画像座標系へスケールします。
大きい座標系から、小さい座標系への変換
今度は、逆に、画像内座標系でのmini_boxの座標がわかっているとき、box座標系でのmini_boxの座標はどうなるのでしょうか?
box = [x,y,w,h] # 画像内座標系
mini_box = [mini_x,mini_y,mini_w,mini_h] # 画像内座標系
def scale_to_small_coordinate_system(mini_box,box):
scaled_mini_box = [(mini_box[0]-box[0])/box[2],
(mini_box[1]-box[1])/box[3],
mini_box[2]/box[2],
mini_box[3]/box[3]]
return scaled_mini_box # box内座標系にスケールしたmini_box
boxの原点からmini_boxの原点までの距離を計算し、boxの幅、高さで割ることで(boxの幅、高さを1とすることで)、box内の座標系へ変換しています。mini_boxの幅と高さもboxの幅、高さで割っています。
🐣
フリーランスエンジニアです。
お仕事のご相談こちらまで
rockyshikoku@gmail.com
機械学習、ARアプリ(Web/iOS)を作っています。
機械学習/AR関連の情報を発信しています。