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

前のチュートリアル: Sobel微分
次のチュートリアル: Cannyエッジ検出器

原著者Ana Huamán
互換性OpenCV >= 3.0

目的

このチュートリアルでは、以下の方法を学ぶ:

  • OpenCVの関数 Laplacian() を使って、ラプラシアン演算子の離散版を実装する。

理論

  1. 前のチュートリアルでは、Sobel演算子の使い方を学んだ。それは、エッジ領域ではピクセル強度が「跳躍」、すなわち強度の大きな変化を示すという事実に基づいていた。強度の一次微分を取ると、図に見られるように、エッジが極大によって特徴づけられることが分かった:
  1. では…二階微分を取るとどうなるだろうか?

二階微分がゼロになることが分かる。したがって、この基準を使って画像中のエッジを検出することも試みられる。ただし、ゼロはエッジだけに現れるわけではなく(実際には意味のない他の場所にも現れうる)、これは必要に応じてフィルタリングを適用することで解決できる。

ラプラシアン演算子

  1. 上の説明から、二階微分を エッジ検出 に利用できると推測される。画像は「*2D*」なので、両方の次元で微分を取る必要がある。ここで、ラプラシアン演算子が役立つ。
  2. ラプラシアン演算子 は次のように定義される:

    \[Laplace(f) = \dfrac{\partial^{2} f}{\partial x^{2}} + \dfrac{\partial^{2} f}{\partial y^{2}}\]

  3. OpenCVではラプラシアン演算子は関数 Laplacian() によって実装されている。実際、ラプラシアンは画像の勾配を使うため、内部で Sobel 演算子を呼び出して計算を行う。

コード

  1. What does this program do?
    • 画像を読み込む
    • ガウシアン平滑化を適用してノイズを除去し、その後、元画像をグレースケールに変換する
    • グレースケール画像にラプラシアン演算子を適用し、出力画像を格納する
    • 結果をウィンドウに表示する

解説

変数の宣言

入力画像の読み込み

ノイズの低減

グレースケール

ラプラシアン演算子

  • The arguments are:
    • src_gray: 入力画像。
    • dst: 出力先(出力)画像
    • ddepth: 出力先画像のビット深度。入力が CV_8U なので、オーバーフローを避けるために ddepth = CV_16S と定義する
    • kernel_size: 内部で適用されるSobel演算子のカーネルサイズ。この例では3を使う。
    • scaledeltaBORDER_DEFAULT: これらはデフォルト値のままにする。

出力を CV_8U 画像に変換する

結果の表示

結果

  1. 上記のコードをコンパイルした後、画像へのパスを引数として与えて実行できる。例えば、入力として次を使う:
  1. 次の結果が得られる。木々や牛のシルエットがおおむねよく定義されている(強度が非常に似ている領域、すなわち牛の頭の周辺を除く)ことに注目してほしい。また、木々の背後(右側)にある家の屋根が著しく際立っていることにも注目してほしい。これは、その領域でコントラストが高いためである。