LoginSignup
29
15

More than 3 years have passed since last update.

【OpenCV】【Python】warpPolar()を使用して画像の極座標変換を行う

Last updated at Posted at 2020-07-11

はじめに

画像を極座標変換したい時(アナログメータを解析したい時とか)のメモです。
下の例は時計ですが、、、🦔
m08sf-wztf9.gif

どうやら、OpenCV3系にあったlinearPolar()やlogPolar()は非推奨となったようなので、warpPolar()を使用しています。

ソースコード

ソースコード全文は以下リポジトリを参照ください。
本投稿には抜粋したものを記載しています。

Kazuhito00/cv-warpPolar-example
cv-warpPolar-exampleは、OpenCVでの極座標変換/逆変換の実行例です。

極座標への線形変換

# キュービック補間 + 外れ値塗りつぶし + 極座標へリニアマッピング
flags = cv2.INTER_CUBIC + cv2.WARP_FILL_OUTLIERS + cv2.WARP_POLAR_LINEAR
# 引き数:画像, 変換後サイズ(幅、高さ)、中心座標(X座標、Y座標)、半径、変換フラグ
linear_polar_image = cv2.warpPolar(image, (300, 1000), (480, 270), 220, flags) 

01.pngarrow2.png02.png

極座標からの逆変換

# 逆変換(リニア)
flags = cv2.INTER_CUBIC + cv2.WARP_FILL_OUTLIERS + cv2.WARP_POLAR_LINEAR + cv2.WARP_INVERSE_MAP
linear_polar_inverse_image = cv2.warpPolar(linear_polar_image, (960, 540), (480, 270), 220, flags)

02.pngarrow2.png04.png

対数極座標への線形変換

# キュービック補間 + 外れ値塗りつぶし + 対数極座標へリニアマッピング
flags = cv2.INTER_CUBIC + cv2.WARP_FILL_OUTLIERS + cv2.WARP_POLAR_LOG
# 引き数:画像, 変換後サイズ(幅、高さ)、中心座標(X座標、Y座標)、半径、変換フラグ
log_polar_image = cv2.warpPolar(image, (300, 1000), (480, 270), 220, flags)

01.pngarrow2.png03.png

極座標からの逆変換

# 逆変換(対数)
flags = cv2.INTER_CUBIC + cv2.WARP_FILL_OUTLIERS + cv2.WARP_POLAR_LOG + cv2.WARP_INVERSE_MAP
log_polar_inverse_image = cv2.warpPolar(log_polar_image, (960, 540), (480, 270), 220, flags)

03.pngarrow2.png05.png

参考

OpenCV Geometric Image Transformations

以上。

29
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
15