Python を使用して画像に勾配フィルターを実行する方法
勾配フィルターはデジタル画像処理で一般的に使用される手法で、画像内のエッジと輪郭情報を検出するために使用されます。 。 Python では、OpenCV ライブラリを使用して勾配フィルタリングを実装できます。この記事では、Python を使用して画像にグラデーション フィルター処理を実行する方法を紹介し、参考用のコード例を添付します。
勾配フィルタリングの原理は、ピクセル点の周囲のピクセル値の差を計算することによってエッジの位置を決定することです。一般に、画像内のエッジは、画像のグレー値がより急激に変化する領域として表されます。したがって、勾配フィルター処理では、画像のグレースケールの一次微分または二次微分を計算することでエッジを見つけることができます。
以下は、Python および OpenCV ライブラリを使用してグラデーション フィルタリングを実装するコード例です。
import cv2 import numpy as np # 读取图片 image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE) # 使用Sobel算子计算图像梯度 gradient_x = cv2.Sobel(image, cv2.CV_64F, 1, 0, ksize=3) gradient_y = cv2.Sobel(image, cv2.CV_64F, 0, 1, ksize=3) # 计算梯度幅值 gradient_magnitude = np.sqrt(np.square(gradient_x) + np.square(gradient_y)) # 将梯度幅值映射到0-255的灰度空间 gradient_magnitude = cv2.normalize(gradient_magnitude, None, 0, 255, cv2.NORM_MINMAX, cv2.CV_8U) # 显示原图和梯度图像 cv2.imshow('original', image) cv2.imshow('gradient', gradient_magnitude) cv2.waitKey(0) cv2.destroyAllWindows()
まず、cv2.imread()
関数を使用してグレースケールを読み取ります。画像。ここで、画像のパスと読み取りモードを指定する必要があります。 cv2.IMREAD_GRAYSCALLE
は、画像をグレースケール モードで読み取ることを意味します。
次に、cv2.Sobel()
関数を使用して画像の勾配を計算します。ここでのパラメーターには、入力画像、勾配が計算される順序 (x 方向または y 方向)、導関数の次数、および Sobel オペレーターのサイズが含まれます。 Sobel オペレーターは、画像のグレー値に対して 1 次微分を実行して勾配を計算する、一般的に使用されるエッジ検出オペレーターです。
次に、x 方向と y 方向の勾配に対して平方根演算を実行することで勾配の振幅を取得できます。この操作では、NumPy ライブラリによって提供される関数 np.square()
および np.sqrt()
を使用します。
最後に、勾配振幅を 0 ~ 255 のグレースケール空間にマッピングし、正規化に cv2.normalize()
関数を使用します。
最後に、cv2.imshow()
関数を使用して元の画像とグラデーション画像を表示し、cv2.waitKey()
と cv2 を使用します。 .destroyAllWindows( )
関数はユーザーの操作を待ってウィンドウを閉じます。
上記のコードを使用すると、入力画像に対してグラデーション フィルターを実行し、結果を表示できます。他の勾配フィルター アルゴリズムを実装する場合は、より柔軟な畳み込み演算を提供する cv2.filter2D()
関数を使用してみてください。
グラデーション フィルターはデジタル画像処理で一般的に使用される手法で、画像内のエッジや輪郭の情報を抽出するのに役立ちます。この記事の内容がお役に立ち、画像処理の分野をさらに学び探求するきっかけになれば幸いです。
以上がPython を使用して画像に勾配フィルタリングを実行する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。