画像のシャープ化処理におけるラプラシアンとソーベルフィルタの比較

実験目的

画像のエッジや輪郭などの高周波成分を強調するシャープ化処理を理解し、ラプラシアンフィルタおよびソーベルフィルタを用いた空間ドメインでのフィルタリング手法を実装・評価する。さらに、フィルタカーネルのサイズがシャープ化結果に与える影響を検討し、各手法の特性とノイズへの感度を分析する。

理論的背景

シャープ化は、画像中の画素値の急激な変化(すなわちエッジ)を強調することで、視覚的な鮮明さを向上させる処理である。これは微分演算に基づくフィルタによって実現される。

ラプラシアンフィルタ

ラプラシアンは2階微分演算子であり、画像の局所的な曲率を検出する。典型的な3×3カーネルは次のように定義される:

[ 0  1  0 ]
[ 1 -4  1 ]
[ 0  1  0 ]

このフィルタはエッジを両側から正負で強調するため、原画像との加算により全体のシャープ化が可能となる。ただし、高周波ノイズも同時に増幅される傾向がある。

ソーベルフィルタ

ソーベルフィルタは1階微分に基づくエッジ検出器であり、水平方向(x)と垂直方向(y)の勾配を別々に計算する:

Gx = [-1 0 1; -2 0 2; -1 0 1]
Gy = [ 1 2 1;  0 0 0; -1 -2 -1]

最終的な勾配強度は |Gx| + |Gy| で近似され、エッジの方向性を考慮したシャープ化が可能である。

カーネルサイズの影響

大きなカーネル(例:5×5)は広範囲の画素情報を統合するため、より滑らかなエッジ応答を得られるが、同時にノイズ感受性も増大する。一方、小さなカーネル(例:3×3)は局所的な変化に敏感だが、細かい構造の検出に適している。

実験内容

  1. グレースケール画像にラプラシアンフィルタを適用し、原画像と加算してシャープ化画像を生成。
  2. 同一画像にソーベルフィルタを適用し、x方向・y方向の勾配および合成結果を可視化。
  3. 中心係数が-24の5×5ラプラシアン型カーネルと、中心係数が-8の3×3カーネルを比較し、シャープ化効果とノイズのトレードオフを評価。

実装と結果

主プログラム(MATLAB)

clear; close all;

% 画像読み込み
img = imread('i_camera.bmp');
gray = img(:,:,1);

% 原画像表示
figure;
subplot(1,3,1); imshow(gray); title('Original');

% ラプラシアンシャープ化 (3×3, 中心 -4)
L3 = [0 1 0; 1 -4 1; 0 1 0];
edge_L3 = convolve_gray(gray, L3);
sharpen_L3 = uint8(double(gray) + double(edge_L3));
subplot(1,3,2); imshow(edge_L3); title('Laplacian Edge');
subplot(1,3,3); imshow(sharpen_L3); title('Sharpened (L3)');

% ソーベルフィルタ
Sx = [-1 0 1; -2 0 2; -1 0 1];
Sy = [1 2 1; 0 0 0; -1 -2 -1];
gx = abs(convolve_gray(gray, Sx));
gy = abs(convolve_gray(gray, Sy));
sobel_mag = gx + gy;

figure;
subplot(2,2,1); imshow(gx); title('Sobel X');
subplot(2,2,2); imshow(gy); title('Sobel Y');
subplot(2,2,3); imshow(sobel_mag); title('Sobel Magnitude');
subplot(2,2,4); imshow(uint8(double(gray) + double(sobel_mag))); title('Sharpened (Sobel)');

% 5×5 ラプラシアン型フィルタ (中心 -24)
L5 = ones(5); L5(3,3) = -24;
edge_L5 = convolve_gray(gray, L5);
sharpen_L5 = uint8(double(gray) + double(edge_L5));

% 3×3 ラプラシアン (中心 -8)
L3_alt = ones(3); L3_alt(2,2) = -8;
edge_L3a = convolve_gray(gray, L3_alt);
sharpen_L3a = uint8(double(gray) + double(edge_L3a));

figure;
subplot(2,2,1); imshow(edge_L5); title('5×5 Laplacian Edge (-24)');
subplot(2,2,2); imshow(sharpen_L5); title('Sharpened (5×5)');
subplot(2,2,3); imshow(edge_L3a); title('3×3 Laplacian Edge (-8)');
subplot(2,2,4); imshow(sharpen_L3a); title('Sharpened (3×3)');

補助関数:convolve_gray

function out = convolve_gray(img, kernel)
    [h, w] = size(img);
    [kh, kw] = size(kernel);
    pad_h = floor(kh/2);
    pad_w = floor(kw/2);
    
    padded = zeros(h + 2*pad_h, w + 2*pad_w, 'like', img);
    padded(pad_h+1:end-pad_h, pad_w+1:end-pad_w) = img;
    
    out = zeros(h, w, 'like', img);
    for i = 1:h
        for j = 1:w
            region = padded(i:i+kh-1, j:j+kw-1);
            out(i,j) = sum(region(:) .* kernel(:));
        end
    end
    out = int16(out); % 符号付き整数で保持(負値対応)
end

補助関数:abs_matrix(組み込み関数で代替可能)

% 実際には MATLAB の abs() を直接使用可能
% ここでは教育目的で自作関数を示す
function res = abs_matrix(mat)
    res = abs(mat);
end

結果の考察

ラプラシアンフィルタ

3×3ラプラシアンによるエッジ画像は細部が明確に抽出されるが、特にテクスチャ領域で過剰な強調が生じ、元画像の一部情報がマスクされる傾向が確認された。

ソーベルフィルタ

x方向とy方向の勾配画像はそれぞれ垂直・水平エッジを明瞭に検出し、合成後のシャープ化画像は自然なエッジ強調を実現した。ただし、平滑領域に微細なノイズが増幅される現象が観察された。

カーネルサイズの比較

5×5カーネル(中心-24)は広範囲のエッジを強調し、全体的なシャープ感が強いが、ノイズも顕著に増幅された。一方、3×3カーネル(中心-8)はエッジの強調度はやや弱いものの、ノイズが少なく実用性が高い。このことから、カーネルサイズの選択はシャープ化強度とノイズ耐性のバランスに依存することが示された。

タグ: MATLAB 画像処理 ラプラシアンフィルタ ソーベルフィルタ 空間フィルタリング

5月21日 07:35 投稿