imgproc_warpPolar

[32/64bit] 画像を極座標または半極座標空間に再マッピングします.

imgproc_warpPolar p1,p2,p3,p4,p5,p6

p1 = sptr : IntPtr src
p2 = sptr : IntPtr dst
p3 = ARGS_SIZE : Size dsize
p4 = ARGS_POINT2F : Point2f center
p5 = double : double maxRadius
p6 = int : int flags

(プラグイン / モジュール : OpenCvSharpExtern.dll)

解説

Polar remaps reference次の変換を用いて、ソース画像を変換します。\(x - center.x, y - center.y) (phi)(♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪Klin (McDot)(with) & default ¶ Klog ¶ log_e(??? -? ???)(semilog ????????\♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪♪\♪♪♪♪♪♪♪~Kangle = dsize.height / 2Pi ☆Klin = dsize.width / maxRadius ☆Klog = dsize.width / log_e(maxRadius) ☆end{array} ☆end{array} ☆end{array} ☆end{array}!\Linear vs semilog mappingPolar mappingにはlinearとsemi-logがあります。線形はデフォルトで、セミログマッピングは、人間の「小窩座」と呼ばれる視力を模したもので、周辺部の視力が低いのに対して、視線上の視力が非常に高いという特徴があります。


\dsize.width = ????? ) ????? ) ????? ) ????? )








dsize.height <= 0のみの場合、出力画像の領域は bounding circleの領域に比例しますが、Kx * Kxでスケーリングされます。


\dsize.height = ????? (dmsize.width ?????) ????? (frank)\]








dsize>0の場合、出力画像は指定されたサイズになりますので、外接円の面積はdsizeに合わせて拡大されます。リバースマッピング flagsにWARP_INVERSE_MAPを追加することで、リバースマッピングを行うことができます//直接変換 warpPolar(src, lin_polar_img, Size(),center, maxRadius, flags);                     // linear Polar warpPolar(src, log_polar_img, Size(),center, maxRadius, flags + WARP_POLAR_LOG); // semilog Polar // 逆変換 warpPolar(lin_polar_img, recovered_lin_polar_img, src.size(), center, maxRadius, flags + WARP_INVERSE_MAP); warpPolar(log_polar_img, recovered_log_polar, src.size(), center, maxRadius, flags + WARP_POLAR_LOG + WARP_INVERSE_MAP);fragment追加で,極マップされた座標から元の座標を計算する方法 ?((rho, phi)->(x, y)?):double angleRad, magnitude; double Kangle = dst.rows / CV_2PI; angleRad = phi / Kangle; if (flags & WARP_POLAR_LOG) { double Klog = dst.cols / std::log(maxRadius); magnitude = std::exp(rho / Klog); } else { double Klin = dst.cols / maxRadius; magnitude = rho / Klin; } int x = cvRound(center.x + magnitude * cos(angleRad)); int y = cvRound(center.y + magnitude * sin(angleRad));fragmentNote


この関数は,置換して動作させることはできません.


大きさと角度を度単位で計算するために,内部では cartToPolar が利用され,角度は 0 から 360 まで,約 0.3 度の精度で測定されます.


この関数はリマップを使用します。alsocv::remapExamples: samples/cpp/polar_transforms.cpp を参照してください。

元関数名(C#): imgproc_warpPolar
元DLLエクスポート名: imgproc_warpPolar
参照元CSファイル: Internal\PInvoke\NativeMethods\imgproc\NativeMethods_imgproc.cs
▼ C言語側関数定義
CVAPI(ExceptionStatus) imgproc_warpPolar(
    cv::_InputArray *src, cv::_OutputArray *dst, MyCvSize dsize,
    MyCvPoint2D32f center, double maxRadius, int flags)
{
    BEGIN_WRAP
    cv::warpPolar(*src, *dst, cpp(dsize), cpp(center), maxRadius, flags);
    END_WRAP
}

情報

プラグイン / モジュールOpenCvSharpExtern.dll
バージョン1.00
作成日2021/11/30
著作者inovia
URLhttps://hsp.moe/
備考#include "OpenCvSharpExtern32.as"
#include "OpenCvSharpExtern64.as"
使用するHSPランタイムのビット数に合わせたインクルードファイルを使用すること
タイプOpenCVSharpラッパーDLL
グループNativeMethods_imgproc
対応環境
  • Windows 版 HSP
hs ファイルhsphelp\OpenCvSharpExtern.hs