Python でのバイラテラルフィルタリング
- バイラテラルフィルタリングとは
- Python でバイラテラルフィルタリングを実行する手順
-
Python の
bilateralFilter()
関数 -
Python で
bilateralFilter()
関数を使用してバイラテラルフィルタリングを実行する
フィルタリングは、ComputerVision アプリケーションで画像を処理するために使用されます。この記事では、OpenCV モジュールを使用した Python でのバイラテラルフィルタリングの実装について説明します。
バイラテラルフィルタリングとは
バイラテラルフィルタリングは、スムージングフィルタリング手法です。これは、各ピクセル値を隣接するピクセルの加重平均ピクセル値に置き換える、非線形でノイズを低減するフィルターです。
バイラテラルフィルタリングは、エッジ全体のピクセルを平均化しないため、エッジ保存フィルタリングとも呼ばれます。
Python でバイラテラルフィルタリングを実行する手順
バイラテラルフィルタリングを実行するには、主に 4つのタスクを実行します。
-
画像内の各ピクセルを隣接するピクセルの加重平均に置き換えます。
-
各ネイバーの重みは、現在のピクセルからの距離によって決まります。各ピクセルに重みを割り当て、最も近いピクセルに最大の重みを割り当て、遠いピクセルに最小の重みを割り当てます。
このタスクを実行するには、空間パラメーターを使用します。
-
隣人の重みは、ピクセルの強度の違いにも依存します。現在のピクセルと同様の強度を持つピクセルにはより多くの重みが割り当てられますが、強度の差が大きいピクセルにはより小さな重みが割り当てられます。
このタスクを実行するには、範囲パラメーターを使用します。
-
空間パラメータを増やすことにより、画像のより大きな特徴を滑らかにすることができます。一方、範囲パラメータを大きくすると、バイラテラルフィルタリングはガウスフィルタリングとして動作します。
Python の bilateralFilter()
関数
bilateralFilter()
関数を使用した OpenCV モジュールを使用して、Python でバイラテラルフィルタリングを実行できます。bilateralFilter()
関数の構文は次のとおりです。
bilateralFilter(src, d, sigmaColor, sigmaSpace, borderType)
ここ、
-
パラメータ
src
は、入力引数として処理する必要のあるソースイメージを取得します。 -
パラメータ
d
は、フィルタリング中にピクセルが考慮される近傍の直径を取ります。 -
パラメータ
sigmaColor
は、カラースペースのフィルタシグマの値です。sigmaColor
の値が高いということは、フィルタリング中に色空間で離れている色が考慮されることを意味します。パラメータ
sigmaColor
には、sigmaSpace
の範囲の値が含まれている必要があります。 -
パラメータ
sigmaSpace
は、空間領域での sigma の値を示します。sigmaSpace
の値が高いほど、現在のピクセルから離れているピクセルがフィルタリング中に考慮されることを意味します。パラメータ
sigmaSpace
には、sigmaColor
の範囲の値が含まれている必要があります。 -
パラメータ
borderType
は、画像の境界でピクセルをフィルタリングしながら、画像の外側のピクセルを外挿するためのモードを定義するために使用されます。
Python で bilateralFilter()
関数を使用してバイラテラルフィルタリングを実行する
以下は、Python でバイラテラルフィルタリングを実行する手順です。
-
まず、
cv2
をインポートします。 -
次に、
imread()
関数を使用して画像を開きます。この関数は、入力引数として画像のファイルパスを取り、画像を表す配列を返します。 -
配列を変数
img
に格納します。 -
イメージをロードした後、
bilateralFilter()
関数を使用して Python でバイラテラル機能を実行します。実行後、bilateralFilter()
関数は処理された画像を含む配列を返します。 -
処理された画像を取得したら、
imwrite()
関数を使用してファイルシステムに保存します。この関数は、出力ファイルのファイル名を最初の入力引数として含む文字列と、処理された画像を含む配列を 2 番目の入力として受け取ります。口論。関数の実行後、ファイルはファイルシステムに保存されます。
以下は、Python でバイラテラルフィルタリングを実行するために使用する画像です。
以下は、Python でバイラテラルフィルタリングを実行するためのコードです。
import cv2
img = cv2.imread("pattern.jpg")
output_image = cv2.bilateralFilter(img, 15, 100, 100)
cv2.imwrite("processed_image.jpg", output_image)
入力画像に対してバイラテラルフィルタリングを実行した後の出力画像は次のとおりです。
与えられた画像では、出力画像でストリップの特徴がぼやけていることがわかります。これは、出力ピクセルを作成するときに、各ピクセルの隣接するピクセルが考慮されるためです。
ピクセルの平均化はぼかし効果を与え、特徴はぼやけます。
ガウスフィルタリングと比較すると、バイラテラルフィルタリングはエッジを保持します。したがって、スムージング操作を実行しているときに、画像のエッジを保持する必要がある場合は、いつでもバイラテラルフィルタリングを使用できます。
Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.
GitHub