MATLAB:エッジ検出のためのガウス フィルターのラプラシアン
ガウス フィルターは、画像をぼかしたり滑らかにしたりするための画像処理で使用される線形フィルターです。この名前は、フィルターの形状を定義するために使用されるガウス関数にちなんで付けられています。ガウス フィルタは一般に、画像内のノイズとディテールを低減するために使用され、さらなる処理や分析により適したものになります。
Laplacian of Gaussian (LoG) フィルターは、画像処理で使用される一般的な画像強調およびエッジ検出フィルターです。ガウス フィルターとラプラシアン フィルターの 2 つのフィルターを組み合わせたものです。ガウス フィルターは画像を滑らかにしてノイズを減らすために使用され、ラプラシアン フィルターはエッジを検出するために使用されます。
ラプラシアン/ガウス フィルターは、画像内のさまざまなスケールでエッジを検出するのに役立ちます。ガウス フィルターの標準偏差を変更することで、エッジが検出されるスケールを制御できます。標準偏差が小さいほど詳細な部分が検出され、標準偏差が大きいほど広範囲の特徴が検出されます。
ガウス フィルターのラプラシアンの例をいくつか見てみましょう。
例 1:fspecial() 関数の使用
fspecial() 関数を使用してガウス フィルターが作成され、このガウスのラプラシアンが計算されて LoG フィルターが作成されます。ただし、ラプラシアン フィルターは、ガウス フィルターが double 型であることを想定しています。
私たちが持っているコードは-
です
% Read the image
img = imread('peppers.jpg');
% Convert the image to grayscale
if size(img, 3) == 3
img_gray = rgb2gray(img);
else
img_gray = img;
end
% Create a Gaussian filter
sigma = 2; % Standard deviation of the Gaussian filter
hsize = 2 * ceil(3 * sigma) + 1; % Filter size
gaussian_filter = fspecial('gaussian', hsize, sigma);
% Create a Laplacian of Gaussian filter
log_filter = fspecial('log', hsize, sigma);
% Apply the LoG filter to the image
filtered_img = imfilter(double(img_gray), log_filter, 'conv', 'replicate');
% Display the original and filtered images
subplot(1, 2, 1);
imshow(img_gray);
title('Original Image');
subplot(1, 2, 2);
imshow(uint8(filtered_img));
title('Laplacian of Gaussian Filtered Image');
コードを詳しく理解しましょう −
img = imread('peppers.jpg');
ここでは、現在のディレクトリから画像「peppers.jpg」を読み取り、変数 img に保存します。
if size(img, 3) == 3 img_gray = rgb2gray(img); else img_gray = img; end
画像がカラー (RGB 形式) の場合、rgb2gray 関数を使用してグレースケールに変換されます。グレースケール画像は変数 img_gray に保存されます。画像がすでにグレースケールである場合は、そのまま保存されます。
sigma = 2; % Standard deviation of the Gaussian filter
hsize = 2 * ceil(3 * sigma) + 1; % Filter size
gaussian_filter = fspecial('gaussian', hsize, sigma);
上記のコードはガウス フィルターを作成します。ここでは、ガウス フィルターの標準偏差 sigma を定義し、標準偏差に基づいてフィルター サイズ hsize を計算します。次に、関数 fspecial を使用し、フィルター タイプとして「gaussian」を指定してガウス フィルターを作成します。
log_filter = fspecial('log', hsize, sigma);
フィルター タイプとして「log」を指定した関数 fspecial を使用して、ラプラシアン/ガウス フィルターを作成します。このフィルタは、エッジ検出に使用されるガウス フィルタのラプラシアンを表します。
filtered_img = imfilter(double(img_gray), log_filter, 'conv', 'replicate');
ここでは、関数 imfilter を使用して、グレースケール イメージ img_gray にラプラシアン フィルターまたはガウス フィルターを適用します。 「conv」オプションは、畳み込みを使用してフィルタを適用することを指定し、「replicate」オプションは、フィルタリング中に画像の境界をどのように処理するかを指定します。
subplot(1, 2, 1);
imshow(img_gray);
title('Original Image');
subplot(1, 2, 2);
imshow(uint8(filtered_img));
title('Laplacian of Gaussian Filtered Image');
最後に、関数 subplot、imshow、および title を使用して、元のグレースケール イメージとフィルター処理されたイメージを並べて表示します。フィルタリングされた画像は、表示前に uint8 形式に変換されます。
コードが実行されると、得られる出力は次のとおりです-
例 2:ラプラシアン フィルターと LoG フィルターを使用した画像フィルタリング
この例では、2 つの異なるフィルター、ラプラシアン フィルターとガウスのラプラシアン (LoG) フィルターを入力画像 'peppers.jpg' に適用する方法を示します。
私たちが持っているコードは-
です
x=imread('peppers.jpg');
figure;
imshow(x);
title('Input Image');
figure;
h=fspecial('laplacian');
filtered_image=imfilter(x,h);
imshow(filtered_image);
title('Output of Laplacian Filter');
figure;
h=fspecial('log');
filtered_image=imfilter(x,h);
imshow(filtered_image);
title('Laplacian Gaussian Filter');
上の例では-
x = imread('peppers.jpg');
figure;
imshow(x);
title('Input Image');
このコードは、画像「peppers.jpg」を読み取り、関数 imshow を使用して表示します。 title 関数は、画像図にタイトルを追加します。
h = fspecial('laplacian');
filtered_image = imfilter(x, h);
ここでは、ラプラシアン フィルターは、フィルター タイプとして「laplacian」を指定した関数 fspecial を使用して作成されます。次に、imfilter 関数を使用してこのフィルターを入力画像 x に適用し、フィルター処理された画像 filtered_image が生成されます。
figure;
imshow(filtered_image);
title('Output of Laplacian Filter');
このコードは、ラプラシアン フィルターから取得したフィルター処理されたイメージを表示します。 title 関数は、画像図にタイトルを追加します。
h = fspecial('log');
filtered_image = imfilter(x, h);
ラプラシアン フィルターと同様に、LoG フィルターは、フィルター タイプとして「log」を指定した関数 fspecial を使用して作成されます。次に、imfilter 関数を使用してこのフィルターを入力画像 x に適用し、フィルター処理された画像 filtered_image が生成されます。
imshow(filtered_image);
title('Laplacian of Gaussian Filter');
このコードは、LoG フィルターから取得したフィルター処理された画像を表示します。 title 関数は、画像図にタイトルを追加します。
コードが実行されると、得られる出力は次のとおりです。 −
MATLAB