Python
 Computer >> コンピューター >  >> プログラミング >> Python

OpenCVで画像にバイラテラルフィルタを適用する方法

はじめに

この記事では、OpenCVを使って画像にバイラテラルフィルタリングを適用する方法を解説します。バイラテラルフィルタは、エッジ(輪郭)を保持しながら画像を平滑化し、ノイズを低減できるフィルタです。通常のガウシアンブラーなどはエッジも一緒にぼかしてしまいますが、バイラテラルフィルタは輪郭を残したまま平坦な部分だけを滑らかにしたい場合に非常に有効です。

この処理には bilateralFilter() 関数を使用します。この関数には、次の3つの主要な引数を指定します。

  • 各ピクセル近傍の直径(d)
  • 色空間におけるシグマ値(sigmaColor)
  • 座標空間におけるシグマ値(sigmaSpace)

元画像

OpenCVで画像にバイラテラルフィルタを適用する方法

処理の流れ

ステップ1:cv2 をインポートする。
ステップ2:画像を読み込む。
ステップ3:bilateralFilter() 関数を呼び出す。
ステップ4:結果を表示する。

サンプルコード

import cv2

image = cv2.imread('testimage.jpg')
blur = cv2.bilateralFilter(image, 29, 100, 100)
cv2.imshow('BilateralFilter', blur)
cv2.waitKey(0)
cv2.destroyAllWindows()

ウィンドウを正しく表示・終了させるため、cv2.waitKey()cv2.destroyAllWindows() を組み合わせて使用するのが一般的です。

パラメータの詳細

  • d(第2引数):フィルタリングに使うピクセル近傍の直径です。値が大きいほど平滑化の効果が強くなります。
  • sigmaColor(第3引数):色空間におけるシグマ値です。大きいほど、色の異なるピクセル同士も混ぜられるようになります。
  • sigmaSpace(第4引数):座標空間におけるシグマ値です。大きいほど、距離的に離れたピクセルの影響を受けるようになります。

出力結果

OpenCVで画像にバイラテラルフィルタを適用する方法

上記の出力を見ると、ノイズや細かい質感が滑らかに抑えられている一方で、物体の輪郭ははっきりと保たれていることが分かります。これがバイラテラルフィルタの大きな特徴です。

  1. OpenCVを使って画像・動画のエッジを検出するPythonプログラムの書き方

    この記事では、Pythonを使って画像や動画ファイルからエッジ(輪郭)を検出する方法を解説します。エッジ検出には、コンピュータビジョン向けに設計されたオープンソースライブラリ「OpenCV」を使用します。OpenCVはもともとIntelによって開発されたライブラリで、BSDライセンスのもとで無料で利用できます。OpenCVの機能を使うには、pipでインストールを行います。インストール時にNumPyモジュールも自動的にダウンロードされるため、別途用意する必要はありません。sudo pip3 install opencv-python今回の入力には動画ファイルを使用しますが、Webカメラを接続すれ

  2. Python・OpenCVでヒストグラム平坦化を実装する方法|cv2.equalizeHist()の使い方

    ヒストグラム平坦化(Histogram Equalization)とは ヒストグラム平坦化は、画像処理において画像のヒストグラムを利用してコントラストを調整する手法です。 この手法は、多くの画像の全体的なコントラストを向上させる効果があります。特に、画像内の有効なデータが近いコントラスト値で表現されている場合に威力を発揮します。この調整を行うことで、輝度値がヒストグラム上により均等に分布するようになり、局所的にコントラストが低い領域でも高いコントラストを得られるようになります。 OpenCVの cv2.equalizeHist() 関数 OpenCVには、この処理を実行するための関数 cv2