Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

エッジ検出

イメージの中では、エッジはイメージ強度が急激に変化する経路に沿った曲線です。エッジはしばしばイメージ内のオブジェクトの境界に関係しています。エッジ検出はイメージの中のエッジを特定するために使用されます。

エッジを見つけるには、関数 edge を使用できます。この関数は、次の 2 つの条件を使用してイメージの中で強度が急速に変化する場所を探します。

  • 強度の 1 次微分が指定されたしきい値より大きい場所

  • 強度の 2 次微分がゼロクロッシングをもつ場所

edge は微分推定器を複数提供し、そのそれぞれが上記の定義の 1 つを実装します。これらの推定器の中には、水平エッジ、垂直エッジまたは両方に対する感度を演算にもたせるかどうかを指定できるものがあります。edge はエッジが見つかった場所に 1、その他の場所には 0 が入ったバイナリ イメージを返します。

edge が提供する最も強力なエッジ検出法はキャニー法です。キャニー法は他のエッジ検出法と違って、2 つの異なるしきい値 (強いエッジと弱いエッジの検出用) を使用し、強いエッジに接続する弱いエッジのみを出力に含めます。したがって、他の方法よりノイズの影響を受けにくいので、弱いエッジを正確に検出できる可能性が高くなります。

イメージ内のエッジの検出

この例では、キャニー エッジ検出器とソーベル エッジ検出器の両方を適用してイメージのエッジを検出する方法を説明します。

イメージをワークスペースに読み取って表示します。

I = imread('coins.png');
imshow(I)

Figure contains an axes object. The axes object contains an object of type image.

ソーベル エッジ検出器を、フィルター処理されていない入力イメージに適用します。その後、キャニー エッジ検出器を、フィルター処理されていない入力イメージに適用します。

BW1 = edge(I,'sobel');
BW2 = edge(I,'canny');

フィルター処理されたイメージを並べて表示し、比較します。

tiledlayout(1,2)

nexttile
imshow(BW1)
title('Sobel Filter')

nexttile
imshow(BW2)
title('Canny Filter')

Figure contains 2 axes objects. Axes object 1 with title Sobel Filter contains an object of type image. Axes object 2 with title Canny Filter contains an object of type image.