OpenCV 5.0.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 5.0.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
Graph API: 画像フィルタ

詳細説明

関数

GMat cv::gapi::bilateralFilter (const GMat &src, int d, double sigmaColor, double sigmaSpace, int borderType=BORDER_DEFAULT)
 画像にバイラテラルフィルタを適用する。
 
GMat cv::gapi::blur (const GMat &src, const Size &ksize, const Point &anchor=Point(-1,-1), int borderType=BORDER_DEFAULT, const Scalar &borderValue=Scalar(0))
 正規化ボックスフィルタを使って画像を平滑化する。
 
GMat cv::gapi::boxFilter (const GMat &src, int dtype, const Size &ksize, const Point &anchor=Point(-1,-1), bool normalize=true, int borderType=BORDER_DEFAULT, const Scalar &borderValue=Scalar(0))
 ボックスフィルタを使って画像を平滑化する。
 
GMat cv::gapi::dilate (const GMat &src, const Mat &kernel, const Point &anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar &borderValue=morphologyDefaultBorderValue())
 特定の構造要素を使って画像を膨張させる。
 
GMat cv::gapi::dilate3x3 (const GMat &src, int iterations=1, int borderType=BORDER_CONSTANT, const Scalar &borderValue=morphologyDefaultBorderValue())
 3x3の矩形構造化要素を用いて画像を膨張させる。
 
GMat cv::gapi::erode (const GMat &src, const Mat &kernel, const Point &anchor=Point(-1,-1), int iterations=1, int borderType=BORDER_CONSTANT, const Scalar &borderValue=morphologyDefaultBorderValue())
 特定の構造要素を使って画像を収縮させる。
 
GMat cv::gapi::erode3x3 (const GMat &src, int iterations=1, int borderType=BORDER_CONSTANT, const Scalar &borderValue=morphologyDefaultBorderValue())
 3x3の矩形構造化要素を用いて画像を収縮させる。
 
GMat cv::gapi::filter2D (const GMat &src, int ddepth, const Mat &kernel, const Point &anchor=Point(-1,-1), const Scalar &delta=Scalar(0), int borderType=BORDER_DEFAULT, const Scalar &borderValue=Scalar(0))
 画像をカーネルで畳み込む。
 
GMat cv::gapi::gaussianBlur (const GMat &src, const Size &ksize, double sigmaX, double sigmaY=0, int borderType=BORDER_DEFAULT, const Scalar &borderValue=Scalar(0))
 ガウシアンフィルタを使って画像を平滑化する。
 
GMat cv::gapi::Laplacian (const GMat &src, int ddepth, int ksize=1, double scale=1, double delta=0, int borderType=BORDER_DEFAULT)
 画像のラプラシアンを計算する。
 
GMat cv::gapi::medianBlur (const GMat &src, int ksize)
 メディアンフィルタを使って画像を平滑化する。
 
GMat cv::gapi::morphologyEx (const GMat &src, const MorphTypes op, const Mat &kernel, const Point &anchor=Point(-1,-1), const int iterations=1, const BorderTypes borderType=BORDER_CONSTANT, const Scalar &borderValue=morphologyDefaultBorderValue())
 高度なモルフォロジー変換を実行する。
 
GMat cv::gapi::sepFilter (const GMat &src, int ddepth, const Mat &kernelX, const Mat &kernelY, const Point &anchor, const Scalar &delta, int borderType=BORDER_DEFAULT, const Scalar &borderValue=Scalar(0))
 行列(画像)に分離可能な線形フィルタを適用する。
 
GMat cv::gapi::Sobel (const GMat &src, int ddepth, int dx, int dy, int ksize=3, double scale=1, double delta=0, int borderType=BORDER_DEFAULT, const Scalar &borderValue=Scalar(0))
 拡張Sobel演算子を使って1次、2次、3次、または混合の画像微分を計算する。
 
std::tuple< GMat, GMatcv::gapi::SobelXY (const GMat &src, int ddepth, int order, int ksize=3, double scale=1, double delta=0, int borderType=BORDER_DEFAULT, const Scalar &borderValue=Scalar(0))
 拡張Sobel演算子を使って1次、2次、3次、または混合の画像微分を計算する。
 

関数詳解

◆ bilateralFilter()

GMat cv::gapi::bilateralFilter ( const GMat & src,
int d,
double sigmaColor,
double sigmaSpace,
int borderType = BORDER_DEFAULT )
Python:
cv.gapi.bilateralFilter(src, d, sigmaColor, sigmaSpace[, borderType]) -> retval

#include <opencv2/gapi/imgproc.hpp>

画像にバイラテラルフィルタを適用する。

この関数は、http://www.dai.ed.ac.uk/CVonline/LOCAL_COPIES/MANDUCHI1/Bilateral_Filtering.html に記載されているように、入力画像にバイラテラルフィルタリングを適用する。bilateralFilter はエッジを比較的シャープに保ちながら、不要なノイズを非常によく低減できる。ただし、ほとんどのフィルタと比べて非常に低速である。

シグマ値: 簡単のため、2つのシグマ値を同じに設定してよい。値が小さい場合(< 10)はフィルタの効果はあまりなく、逆に大きい場合(> 150)は非常に強い効果が現れ、画像が「漫画調 (cartoonish)」に見えるようになる。

フィルタサイズ: 大きなフィルタ(d > 5)は非常に低速であるため、リアルタイムアプリケーションでは d=5 を、強いノイズ除去が必要なオフラインアプリケーションではおそらく d=9 を使うことが推奨される。

このフィルタはインプレース処理では動作しない。

覚え書き
関数のテキストIDは "org.opencv.imgproc.filters.bilateralfilter" である。
引数
src入力となる8ビットまたは浮動小数点型の、1チャンネルまたは3チャンネルの画像。
dフィルタ処理中に使用される各ピクセル近傍の直径。0以下の場合は sigmaSpace から計算される。
sigmaColor色空間におけるフィルタのシグマ。この引数の値が大きいほど、ピクセル近傍内(sigmaSpace を参照)のより遠い色どうしが混ざり合い、ほぼ同色の領域が大きくなる。
sigmaSpace座標空間におけるフィルタのシグマ。この引数の値が大きいほど、色が十分に近い限り、より遠いピクセルどうしが互いに影響し合う(sigmaColor を参照)。d>0 のときは、sigmaSpace に関係なく近傍サイズを指定する。それ以外の場合、d は sigmaSpace に比例する。
borderType画像の外側のピクセルを外挿するために使用される境界モード。BorderTypes を参照
戻り値
srcと同じサイズおよび型の出力画像。

◆ blur()

GMat cv::gapi::blur ( const GMat & src,
const Size & ksize,
const Point & anchor = Point(-1,-1),
int borderType = BORDER_DEFAULT,
const Scalar & borderValue = Scalar(0) )
Python:
cv.gapi.blur(src, ksize[, anchor[, borderType[, borderValue]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

正規化ボックスフィルタを使って画像を平滑化する。

この関数は次のカーネルを使って画像を平滑化する:

\[\texttt{K} = \frac{1}{\texttt{ksize.width*ksize.height}} \begin{bmatrix} 1 & 1 & 1 & \cdots & 1 & 1 \\ 1 & 1 & 1 & \cdots & 1 & 1 \\ \hdotsfor{6} \\ 1 & 1 & 1 & \cdots & 1 & 1 \\ \end{bmatrix}\]

blur(src, ksize, anchor, borderType) の呼び出しは boxFilter(src, src.type(), ksize, anchor, true, borderType) と等価である。

サポートされている入力行列のデータ型は CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1 である。出力画像は入力画像と同じ型、サイズ、チャンネル数でなければならない。

覚え書き
  • ハードウェアがサポートしている場合は最近接偶数への丸めが行われ、サポートしていない場合は最近接への丸めが行われる。
  • 関数のテキストIDは "org.opencv.imgproc.filters.blur" である。
引数
src入力画像。
ksize平滑化カーネルのサイズ。
anchorアンカーポイント。デフォルト値の Point(-1,-1) は、アンカーがカーネルの中心にあることを意味する。
borderType画像外のピクセルを外挿するために使用される境界モード。cv::BorderTypes を参照
borderValue境界の種類が定数(constant)の場合の境界値
参照
boxFilter, bilateralFilter, GaussianBlur, medianBlur

◆ boxFilter()

GMat cv::gapi::boxFilter ( const GMat & src,
int dtype,
const Size & ksize,
const Point & anchor = Point(-1,-1),
bool normalize = true,
int borderType = BORDER_DEFAULT,
const Scalar & borderValue = Scalar(0) )
Python:
cv.gapi.boxFilter(src, dtype, ksize[, anchor[, normalize[, borderType[, borderValue]]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

ボックスフィルタを使って画像を平滑化する。

この関数は次のカーネルを使って画像を平滑化する:

\[\texttt{K} = \alpha \begin{bmatrix} 1 & 1 & 1 & \cdots & 1 & 1 \\ 1 & 1 & 1 & \cdots & 1 & 1 \\ \hdotsfor{6} \\ 1 & 1 & 1 & \cdots & 1 & 1 \end{bmatrix}\]

ここで

\[\alpha = \begin{cases} \frac{1}{\texttt{ksize.width*ksize.height}} & \texttt{when } \texttt{normalize=true} \\1 & \texttt{otherwise} \end{cases}\]

正規化されていないボックスフィルタは、各ピクセル近傍における各種の積分特性(密なオプティカルフローアルゴリズムなどで用いられる画像導関数の共分散行列など)を計算するのに有用である。可変サイズのウィンドウにわたるピクセル和を計算する必要がある場合は、cv::integral を使用する。

サポートされている入力行列のデータ型は CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1 である。出力画像は入力画像と同じ型、サイズ、チャンネル数でなければならない。

覚え書き
  • ハードウェアがサポートしている場合は最近接偶数への丸めが行われ、サポートしていない場合は最近接への丸めが行われる。
  • 関数のテキストIDは "org.opencv.imgproc.filters.boxfilter" である。
引数
src入力画像。
dtype出力画像のビット深度(-1 で入力画像のデータ型に設定)。
ksize平滑化カーネルのサイズ。
anchorカーネル内のアンカー位置。デフォルト値 \((-1,-1)\) はアンカーがカーネル中心にあることを意味する。
normalizeカーネルをその面積で正規化するかどうかを指定するフラグ。
borderTypeピクセルの外挿方法。cv::BorderTypes を参照
borderValue境界の種類が定数(constant)の場合の境界値
参照
sepFilter, gaussianBlur, medianBlur, integral

◆ dilate()

GMat cv::gapi::dilate ( const GMat & src,
const Mat & kernel,
const Point & anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue() )
Python:
cv.gapi.dilate(src, kernel[, anchor[, iterations[, borderType[, borderValue]]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

特定の構造化要素を使って画像を膨張させる。

この関数は、最大値をとるピクセル近傍の形状を決定する指定の構造化要素を使って、入力画像を膨張させる:

\[\texttt{dst} (x,y) = \max _{(x',y'): \, \texttt{element} (x',y') \ne0 } \texttt{src} (x+x',y+y')\]

膨張は複数回(iterations)適用できる。マルチチャンネル画像の場合、各チャンネルは独立して処理される。サポートされている入力行列のデータ型は CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1 である。出力画像は入力画像と同じ型、サイズ、チャンネル数でなければならない。

覚え書き
  • ハードウェアがサポートしている場合は最近接偶数への丸めが行われ、サポートしていない場合は最近接への丸めが行われる。
  • 関数のテキストIDは "org.opencv.imgproc.filters.dilate" である。
引数
src入力画像。
kernel膨張に使用する構造化要素。elemenat=Mat() の場合、3 x 3 の矩形構造化要素が使用される。カーネルは getStructuringElement を使用して作成できる
anchor構造要素内のアンカーの位置。デフォルト値の (-1, -1) は、アンカーが構造要素の中心にあることを意味する。
iterations膨張を適用する回数。
borderTypeピクセルの外挿方法。cv::BorderTypes を参照
borderValue定数境界の場合の境界値
参照
erode, morphologyEx, getStructuringElement

◆ dilate3x3()

GMat cv::gapi::dilate3x3 ( const GMat & src,
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue() )
Python:
cv.gapi.dilate3x3(src[, iterations[, borderType[, borderValue]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

3×3の矩形構造化要素を使って画像を膨張させる。

この関数は、最大値をとるピクセル近傍の形状を決定する指定の構造化要素を使って、入力画像を膨張させる:

\[\texttt{dst} (x,y) = \max _{(x',y'): \, \texttt{element} (x',y') \ne0 } \texttt{src} (x+x',y+y')\]

膨張は複数回(iterations)適用できる。マルチチャンネル画像の場合、各チャンネルは独立して処理される。サポートされている入力行列のデータ型は CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1 である。出力画像は入力画像と同じ型、サイズ、チャンネル数でなければならない。

覚え書き
  • ハードウェアがサポートしている場合は最近接偶数への丸めが行われ、サポートしていない場合は最近接への丸めが行われる。
  • 関数のテキストIDは "org.opencv.imgproc.filters.dilate" である。
引数
src入力画像。
iterations膨張を適用する回数。
borderTypeピクセルの外挿方法。cv::BorderTypes を参照
borderValue定数境界の場合の境界値
参照
dilate, erode3x3

◆ erode()

GMat cv::gapi::erode ( const GMat & src,
const Mat & kernel,
const Point & anchor = Point(-1,-1),
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue() )
Python:
cv.gapi.erode(src, kernel[, anchor[, iterations[, borderType[, borderValue]]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

特定の構造化要素を使って画像を収縮させる。

この関数は、最小値をとるピクセル近傍の形状を決定する指定の構造化要素を使って、入力画像を収縮させる:

\[\texttt{dst} (x,y) = \min _{(x',y'): \, \texttt{element} (x',y') \ne0 } \texttt{src} (x+x',y+y')\]

収縮は複数回(iterations)適用できる。マルチチャンネル画像の場合、各チャンネルは独立して処理される。サポートされている入力行列のデータ型は CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1 である。出力画像は入力画像と同じ型、サイズ、チャンネル数でなければならない。

覚え書き
  • ハードウェアがサポートしている場合は最近接偶数への丸めが行われ、サポートしていない場合は最近接への丸めが行われる。
  • 関数のテキストIDは "org.opencv.imgproc.filters.erode" である。
引数
src入力画像
kernel収縮に使用する構造化要素。element=Mat() の場合、3 x 3 の矩形構造化要素が使用される。カーネルは getStructuringElement を使用して作成できる。
anchor構造要素内のアンカーの位置。デフォルト値の (-1, -1) は、アンカーが構造要素の中心にあることを意味する。
iterations収縮を適用する回数。
borderTypeピクセルの外挿方法。cv::BorderTypes を参照
borderValue定数境界の場合の境界値
参照
dilate, morphologyEx

◆ erode3x3()

GMat cv::gapi::erode3x3 ( const GMat & src,
int iterations = 1,
int borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue() )
Python:
cv.gapi.erode3x3(src[, iterations[, borderType[, borderValue]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

3×3の矩形構造化要素を使って画像を収縮させる。

この関数は、矩形の中心をアンカーとして矩形構造化要素を使い、元画像を収縮させる。収縮は複数回(iterations)適用できる。マルチチャンネル画像の場合、各チャンネルは独立して処理される。サポートされている入力行列のデータ型は CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1 である。出力画像は入力画像と同じ型、サイズ、チャンネル数でなければならない。

覚え書き
  • ハードウェアがサポートしている場合は最近接偶数への丸めが行われ、サポートしていない場合は最近接への丸めが行われる。
  • 関数のテキストIDは "org.opencv.imgproc.filters.erode" である。
引数
src入力画像
iterations収縮を適用する回数。
borderTypeピクセルの外挿方法。cv::BorderTypes を参照
borderValue定数境界の場合の境界値
参照
erode, dilate3x3

◆ filter2D()

GMat cv::gapi::filter2D ( const GMat & src,
int ddepth,
const Mat & kernel,
const Point & anchor = Point(-1,-1),
const Scalar & delta = Scalar(0),
int borderType = BORDER_DEFAULT,
const Scalar & borderValue = Scalar(0) )
Python:
cv.gapi.filter2D(src, ddepth, kernel[, anchor[, delta[, borderType[, borderValue]]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

画像をカーネルで畳み込む。

この関数は、画像に任意の線形フィルタを適用する。開口部が部分的に画像の外にある場合、指定された境界モードに従って外れ値のピクセル値を補間する。

この関数は実際には畳み込みではなく、相関を計算する:

\[\texttt{dst} (x,y) = \sum _{ \substack{0\leq x' < \texttt{kernel.cols}\\{0\leq y' < \texttt{kernel.rows}}}} \texttt{kernel} (x',y')* \texttt{src} (x+x'- \texttt{anchor.x} ,y+y'- \texttt{anchor.y} )\]

つまり、カーネルはアンカー点を中心に反転されない。本物の畳み込みが必要な場合は、flip を使ってカーネルを反転し、新しいアンカーを (kernel.cols - anchor.x - 1, kernel.rows - anchor.y - 1) に設定する。

サポートされている行列のデータ型は CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1 である。出力画像は入力画像と同じサイズおよびチャンネル数でなければならない。

覚え書き
  • ハードウェアがサポートしている場合は最近接偶数への丸めが行われ、サポートしていない場合は最近接への丸めが行われる。
  • 関数のテキストIDは "org.opencv.imgproc.filters.filter2D" である。
引数
src入力画像。
ddepth出力画像の希望するビット深度
kernel畳み込みカーネル(より正確には相関カーネル)。シングルチャンネルの浮動小数点型行列。チャンネルごとに異なるカーネルを適用したい場合は、split を使って画像を個別の色プレーンに分割し、それぞれを個別に処理する。
anchorカーネルのアンカー。フィルタ処理される点のカーネル内での相対位置を示す。アンカーはカーネル内に存在しなければならない。デフォルト値の (-1,-1) は、アンカーがカーネルの中心にあることを意味する。
deltaフィルタ処理されたピクセルを dst に格納する前に加算される省略可能な値。
borderTypeピクセルの外挿方法。cv::BorderTypes を参照
borderValue境界の種類が定数(constant)の場合の境界値
参照
sepFilter

◆ gaussianBlur()

GMat cv::gapi::gaussianBlur ( const GMat & src,
const Size & ksize,
double sigmaX,
double sigmaY = 0,
int borderType = BORDER_DEFAULT,
const Scalar & borderValue = Scalar(0) )
Python:
cv.gapi.gaussianBlur(src, ksize, sigmaX[, sigmaY[, borderType[, borderValue]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

ガウシアンフィルタを使って画像を平滑化する。

この関数は、指定されたガウシアンカーネルで元画像を filter2D 処理する。出力画像は入力画像と同じ型およびチャンネル数でなければならない。

サポートされている入力行列のデータ型は CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1 である。出力画像は入力画像と同じ型、サイズ、チャンネル数でなければならない。

覚え書き
  • ハードウェアがサポートしている場合は最近接偶数への丸めが行われ、サポートしていない場合は最近接への丸めが行われる。
  • 関数のテキストIDは "org.opencv.imgproc.filters.gaussianBlur" である。
引数
src入力画像;
ksizeガウシアンカーネルのサイズ。ksize.width と ksize.height は異なっていてもよいが、いずれも正の奇数でなければならない。あるいは両方を0とすることもでき、その場合は sigma から計算される。
sigmaXX方向のガウシアンカーネルの標準偏差。
sigmaYY方向のガウシアンカーネルの標準偏差。sigmaY がゼロの場合は sigmaX と等しく設定される。両方の sigma がゼロの場合は、それぞれ ksize.width と ksize.height から計算される(詳細は cv::getGaussianKernel を参照)。これらの意味づけが将来変更される可能性に関わらず結果を完全に制御するには、ksize、sigmaX、sigmaY のすべてを指定することを推奨する。
borderTypeピクセルの外挿方法。cv::BorderTypes を参照
borderValue境界の種類が定数(constant)の場合の境界値
参照
sepFilter, boxFilter, medianBlur

◆ Laplacian()

GMat cv::gapi::Laplacian ( const GMat & src,
int ddepth,
int ksize = 1,
double scale = 1,
double delta = 0,
int borderType = BORDER_DEFAULT )
Python:
cv.gapi.Laplacian(src, ddepth[, ksize[, scale[, delta[, borderType]]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

画像のラプラシアンを計算する。

この関数は、Sobel演算子を用いて計算したxおよびyの2次微分を加算することで、入力画像のラプラシアンを計算する:

\[\texttt{dst} = \Delta \texttt{src} = \frac{\partial^2 \texttt{src}}{\partial x^2} + \frac{\partial^2 \texttt{src}}{\partial y^2}\]

これは ksize > 1 の場合に行われる。ksize == 1 の場合、ラプラシアンは次の \(3 \times 3\) のアパーチャで画像をフィルタリングすることにより計算される:

\[\vecthreethree {0}{1}{0}{1}{-4}{1}{0}{1}{0}\]

覚え書き
関数のテキストIDは "org.opencv.imgproc.filters.laplacian" である。
引数
src入力画像。
ddepth出力画像の希望するビット深度。
ksize2次微分フィルタの計算に使用するアパーチャサイズ。詳細は getDerivKernels を参照。サイズは正かつ奇数でなければならない。
scale計算されたラプラシアン値に対する省略可能なスケールファクタ。デフォルトではスケーリングは適用されない。詳細は getDerivKernels を参照。
delta結果を dst に格納する前に加算される省略可能なデルタ値。
borderTypeピクセル外挿方法。BorderTypes を参照。BORDER_WRAP はサポートされていない。
戻り値
src と同じサイズおよび同じチャンネル数の出力画像。
参照
Sobel, Scharr

◆ medianBlur()

GMat cv::gapi::medianBlur ( const GMat & src,
int ksize )
Python:
cv.gapi.medianBlur(src, ksize) -> retval

#include <opencv2/gapi/imgproc.hpp>

メディアンフィルタを用いて画像を平滑化する。

この関数は、\(\texttt{ksize} \times \texttt{ksize}\) の開口を持つメディアンフィルタを使って画像を平滑化する。マルチチャンネル画像の各チャンネルは独立して処理される。出力画像は入力画像と同じ型、サイズ、チャンネル数でなければならない。

覚え書き
  • ハードウェアがサポートしている場合は最近接偶数への丸めが行われ、サポートしていない場合は最近接への丸めが行われる。メディアンフィルタは境界ピクセルを扱うために内部で cv::BORDER_REPLICATE を使用する。cv::BorderTypes を参照。
  • 関数のテキストIDは "org.opencv.imgproc.filters.medianBlur" である。
引数
src入力行列(画像)
ksizeアパーチャの線形サイズ。奇数かつ1より大きくなければならない。例: 3, 5, 7 ...
参照
boxFilter, gaussianBlur

◆ morphologyEx()

GMat cv::gapi::morphologyEx ( const GMat & src,
const MorphTypes op,
const Mat & kernel,
const Point & anchor = Point(-1,-1),
const int iterations = 1,
const BorderTypes borderType = BORDER_CONSTANT,
const Scalar & borderValue = morphologyDefaultBorderValue() )
Python:
cv.gapi.morphologyEx(src, op, kernel[, anchor[, iterations[, borderType[, borderValue]]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

高度なモルフォロジー変換を実行する。

この関数は、収縮と膨張を基本演算として用い、高度なモルフォロジー変換を実行できる。

いずれの操作もインプレースで行うことができる。マルチチャンネル画像の場合、各チャンネルは独立して処理される。

覚え書き
  • 関数のテキストIDは "org.opencv.imgproc.filters.morphologyEx" である。
  • iterations の数は、収縮または膨張の演算が適用される回数である。例えば、2回反復するオープニング演算(MORPH_OPEN)は、erode -> erode -> dilate -> dilate を順に適用するのと等価である(erode -> dilate -> erode -> dilate ではない)。
引数
src入力画像。
opモルフォロジー演算の種類。MorphTypes を参照
kernel構造化要素。getStructuringElement を使って作成できる。
anchor要素内におけるアンカー位置。両方が負の値の場合、アンカーはカーネルの中心にあることを意味する。
iterations収縮と膨張を適用する回数。
borderTypeピクセル外挿方法。BorderTypes を参照。BORDER_WRAP はサポートされていない。
borderValue定数境界の場合の境界値。デフォルト値は特別な意味を持つ。
参照
dilate, erode, getStructuringElement

◆ sepFilter()

GMat cv::gapi::sepFilter ( const GMat & src,
int ddepth,
const Mat & kernelX,
const Mat & kernelY,
const Point & anchor,
const Scalar & delta,
int borderType = BORDER_DEFAULT,
const Scalar & borderValue = Scalar(0) )
Python:
cv.gapi.sepFilter(src, ddepth, kernelX, kernelY, anchor, delta[, borderType[, borderValue]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

行列(画像)に分離可能な線形フィルタを適用する。

この関数は、行列に分離可能な線形フィルタを適用する。すなわち、まず src の各行を1次元カーネル kernelX でフィルタリングする。次に、その結果の各列を1次元カーネル kernelY でフィルタリングする。最終結果が返される。

サポートされている行列のデータ型は CV_8UC1, CV_8UC3, CV_16UC1, CV_16SC1, CV_32FC1 である。出力画像は入力画像と同じ型、サイズ、チャンネル数でなければならない。

覚え書き
  • 浮動小数点計算の場合、ハードウェアがサポートしていれば最近接偶数への丸めが行われる(サポートしていない場合は最近接値への丸め)。
  • 関数のテキストIDは "org.opencv.imgproc.filters.sepfilter" である。
引数
src入力画像。
ddepth出力画像に必要なビット深度(src.depth() と ddepth の以下の組み合わせがサポートされている):
 src.depth() = CV_8U, ddepth = -1/CV_16S/CV_32F/CV_64F src.depth() = CV_16U/CV_16S, ddepth = -1/CV_32F/CV_64F src.depth() = CV_32F, ddepth = -1/CV_32F/CV_64F src.depth() = CV_64F, ddepth = -1/CV_64F 

ddepth=-1 の場合、出力画像は元画像と同じビット深度になる)

引数
kernelX各行をフィルタリングするための係数。
kernelY各列をフィルタリングするための係数。
anchorカーネル内のアンカー位置。デフォルト値 \((-1,-1)\) はアンカーがカーネル中心にあることを意味する。
deltaフィルタリング結果を格納する前に加算される値。
borderTypeピクセルの外挿方法。cv::BorderTypes を参照
borderValue境界の種類が定数(constant)の場合の境界値
参照
boxFilter, gaussianBlur, medianBlur

◆ Sobel()

GMat cv::gapi::Sobel ( const GMat & src,
int ddepth,
int dx,
int dy,
int ksize = 3,
double scale = 1,
double delta = 0,
int borderType = BORDER_DEFAULT,
const Scalar & borderValue = Scalar(0) )
Python:
cv.gapi.Sobel(src, ddepth, dx, dy[, ksize[, scale[, delta[, borderType[, borderValue]]]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

拡張Sobel演算子を用いて、1次、2次、3次、または混合の画像微分を計算する。

1つの場合を除くすべての場合で、微分の計算には \(\texttt{ksize} \times \texttt{ksize}\) の分離可能なカーネルが使用される。\(\texttt{ksize = 1}\) の場合は、\(3 \times 1\) または \(1 \times 3\) のカーネルが使用される(すなわち、ガウシアン平滑化は行われない)。ksize = 1 はxまたはyの1次または2次微分にのみ使用できる。

特別な値 ksize = FILTER_SCHARR (-1) も存在し、これは \(3\times3\) のScharrフィルタに対応する。Scharrフィルタは \(3\times3\) のSobelよりも正確な結果を与える場合がある。Scharrの開口は次のとおりである。

\[\vecthreethree{-3}{0}{3}{-10}{0}{10}{-3}{0}{3}\]

これはx微分の場合であり、y微分の場合は転置したものとなる。

この関数は、適切なカーネルで画像を畳み込むことにより画像微分を計算する:

\[\texttt{dst} = \frac{\partial^{xorder+yorder} \texttt{src}}{\partial x^{xorder} \partial y^{yorder}}\]

Sobel演算子はガウシアン平滑化と微分を組み合わせるため、結果はノイズに対して多少なりとも耐性がある。最も一般的には、xまたはyの1次画像微分を計算するために、この関数は ( xorder = 1, yorder = 0, ksize = 3) または ( xorder = 0, yorder = 1, ksize = 3) で呼び出される。前者の場合は次のカーネルに対応する:

\[\vecthreethree{-1}{0}{1}{-2}{0}{2}{-1}{0}{1}\]

後者の場合は次のカーネルに対応する:

\[\vecthreethree{-1}{-2}{-1}{0}{0}{0}{1}{2}{1}\]

覚え書き
  • ハードウェアがサポートしている場合は最近接偶数への丸めが行われ、サポートしていない場合は最近接への丸めが行われる。
  • 関数のテキストIDは "org.opencv.imgproc.filters.sobel" である。
引数
src入力画像。
ddepth出力画像のビット深度。組み合わせ を参照。8ビットの入力画像の場合、導関数が打ち切られた値になる。
dxx方向の微分の階数。
dyy方向の微分の階数。
ksize拡張されたSobelカーネルのサイズ。奇数でなければならない。
scale計算された導関数値に対する省略可能なスケール係数。デフォルトではスケーリングは適用されない(詳細は cv::getDerivKernels を参照)。
delta結果を dst に格納する前に加算される省略可能なデルタ値。
borderTypeピクセルの外挿方法。cv::BorderTypes を参照
borderValue境界の種類が定数(constant)の場合の境界値
参照
filter2D, gaussianBlur, cartToPolar

◆ SobelXY()

std::tuple< GMat, GMat > cv::gapi::SobelXY ( const GMat & src,
int ddepth,
int order,
int ksize = 3,
double scale = 1,
double delta = 0,
int borderType = BORDER_DEFAULT,
const Scalar & borderValue = Scalar(0) )
Python:
cv.gapi.SobelXY(src, ddepth, order[, ksize[, scale[, delta[, borderType[, borderValue]]]]]) -> retval

#include <opencv2/gapi/imgproc.hpp>

拡張Sobel演算子を用いて、1次、2次、3次、または混合の画像微分を計算する。

1つの場合を除くすべての場合で、微分の計算には \(\texttt{ksize} \times \texttt{ksize}\) の分離可能なカーネルが使用される。\(\texttt{ksize = 1}\) の場合は、\(3 \times 1\) または \(1 \times 3\) のカーネルが使用される(すなわち、ガウシアン平滑化は行われない)。ksize = 1 はxまたはyの1次または2次微分にのみ使用できる。

特別な値 ksize = FILTER_SCHARR (-1) も存在し、これは \(3\times3\) のScharrフィルタに対応する。Scharrフィルタは \(3\times3\) のSobelよりも正確な結果を与える場合がある。Scharrの開口は次のとおりである。

\[\vecthreethree{-3}{0}{3}{-10}{0}{10}{-3}{0}{3}\]

これはx微分の場合であり、y微分の場合は転置したものとなる。

この関数は、適切なカーネルで画像を畳み込むことにより画像微分を計算する:

\[\texttt{dst} = \frac{\partial^{xorder+yorder} \texttt{src}}{\partial x^{xorder} \partial y^{yorder}}\]

Sobel演算子はガウシアン平滑化と微分を組み合わせるため、結果はノイズに対して多少なりとも耐性がある。最も一般的には、xまたはyの1次画像微分を計算するために、この関数は ( xorder = 1, yorder = 0, ksize = 3) または ( xorder = 0, yorder = 1, ksize = 3) で呼び出される。前者の場合は次のカーネルに対応する:

\[\vecthreethree{-1}{0}{1}{-2}{0}{2}{-1}{0}{1}\]

後者の場合は次のカーネルに対応する:

\[\vecthreethree{-1}{-2}{-1}{0}{0}{0}{1}{2}{1}\]

覚え書き
  • 最初に返される行列は dx 導関数に対応し、2番目は dy に対応する。
  • ハードウェアがサポートしている場合は最近接偶数への丸めが行われ、サポートしていない場合は最近接への丸めが行われる。
  • 関数のテキストIDは "org.opencv.imgproc.filters.sobelxy" である。
引数
src入力画像。
ddepth出力画像のビット深度。組み合わせ を参照。8ビットの入力画像の場合、導関数が打ち切られた値になる。
order導関数の階数。
ksize拡張されたSobelカーネルのサイズ。奇数でなければならない。
scale計算された導関数値に対する省略可能なスケール係数。デフォルトではスケーリングは適用されない(詳細は cv::getDerivKernels を参照)。
delta結果を dst に格納する前に加算される省略可能なデルタ値。
borderTypeピクセルの外挿方法。cv::BorderTypes を参照
borderValue境界の種類が定数(constant)の場合の境界値
参照
filter2D, gaussianBlur, cartToPolar