画像エッジとは、オブジェクトの周囲のピクセルのグレースケールの段階的な変化を表す画像内のピクセルのセットを指します。
画像内の異なるグレースケールを持つ 2 つの隣接する領域の接合部では、グレースケールの急速な遷移、またはジャンプが存在する必要があります。それらは、画像内の各領域のエッジの位置に対応しており、エッジは方向、ステップ特性、形状などの固有の情報が豊富に含まれており、エッジに沿ったピクセルはゆっくりと変化しますが、エッジの方向に垂直なピクセルは大幅に変化します。
画像のほとんどの情報はエッジ部分に集中しており、エッジが決定された後、実際に異なる領域の分割が行われます。
エッジの検出には、多くの場合、いくつかのエッジ検出演算子の助けが必要です。これらの演算子の一部は一次微分に基づいており、一部は二次微分演算子です
Roberts 演算子、Prewitt 演算子、および Sobel 演算子には、x および y 方向のテンプレートが含まれています。各テンプレートは、対応する方向にのみ敏感で、この方向には明らかな出力がありますが、他の方向には敏感ではありません。変化。以下に、一般的な 1 階微分演算子とその特性をいくつか示します。
機能 | ##単純な微分演算子 |
---|---|
ロバーツ演算子 | ノイズを除去します影響は小さく、単純な微分演算子よりもエッジ検出能力が優れています |
Prewitt 演算子 | はノイズの影響を効果的に抑制し、エッジ点を検出できます |
Sobel オペレーター | 得られるエッジが広くなり、ノイズ抑制効果が強くなります |
Canny オペレーター | 検出されました エッジ位置は正確で、エッジは狭いです |
1、ロバーツ演算子 |
Sobel オペレーターによって検出されたエッジは、Roberts オペレーターの検出結果よりも連続的であり、画像の検出能力が優れています。さらに、Sobel エッジ検出器では局所平均化が導入されており、ノイズへの影響が少なく、より良い効果が得られます。
4. Canny オペレーター
Canny によって得られる検出結果は、Roberts および Sobel オペレーターの検出結果よりも優れており、エッジの詳細がより豊富で、エッジの位置が正確です。連続性は良好で、偽エッジはほとんどなく、エッジはすべて 1 ピクセル幅です。 アルゴリズムの実装は次の 4 つのステップに分かれています:
ガウス フィルターを使用して画像を滑らかにする
効果実験
1. Roberts エッジ検出
Roberts_kernel_x = np.array([[-1, 0], [0, 1]], dtype=int) Roberts_kernel_y = np.array([[0, -1], [1, 0]], dtype=int)
2. Prewitt エッジ検出
Prewitt オペレーター コード:
Roberts_kernel_x = np.array([[-1, 0], [0, 1]], dtype=int) Roberts_kernel_y = np.array([[0, -1], [1, 0]], dtype=int)
3 、Sobelエッジ検出
ソーベル関数:
edges = cv2.Sobel(img, -1, 1, 1)
4、キャニー エッジ検出
キャニー関数:
edges = cv2.Canny(img, 5, 100)
5. ラプラシアン エッジ検出
ラプラシアン関数:
edges = cv2.Laplacian(img, -1)
以上がPython を使用して画像のエッジを検出する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。