[Python][OpenCV] 円を四角形/長方形に変換する画像処理手法 – 極座標変換

 文字とか検出したいとき、円のままOCRにかけるとまともに認識してくれない場合などがあります。

 そういうときは円を長方形に変換すると認識性能が上がったりします。

OpenCV/Pythonでの実装


 普通にOpenCVのwarpPolar関数でできます。

import cv2

image = cv2.imread(<画像ファイルパス>)
flags = cv2.INTER_CUBIC + cv2.WARP_FILL_OUTLIERS + cv2.WARP_POLAR_LINEAR
# ここら辺は円検出などした結果を入れる
center = (中心座標x, 中心座標y)
radius = 100
height, width = 500, 1000
result_image = cv2.warpPolar(image, (height, width), center, radius, flags)

 結果はこんなイメージです。

どうやって円を長方形に変換しているのか


 極座標変換で円から長方形に変換しています。

通常の座標(直交座標)は

  image(x, y) = <画素値>

と表現しますが、極座標は原点から点への距離rと角度Θを用いて

  image(r, Θ) = <画素値>

と表します。

 極座標 -> 直交座標はx = r * cosθ, y = r * sinθで変換できます。

 これを用いてr, Θを少しずつ変えて

  result(r, Θ) = image(r * cosΘ, r * sinΘ)

という感じで変換していくと円画像のimageを長方形画像resultに変換できます。

 イメージとしては以下の画像の感じです。

 ほかにも画像処理関連で色々な技術まとめているのでよかったら見てみてください!

コメントを残す

メールアドレスが公開されることはありません。