MATLAB - 高斯-拉普拉斯滤波器



高斯滤波器是一种用于图像处理的线性滤波器,用于模糊或平滑图像。它以高斯函数命名,该函数用于定义滤波器的形状。高斯滤波器通常用于减少图像中的噪声和细节,使其更适合进一步处理或分析。

高斯-拉普拉斯 (LoG) 滤波器是一种流行的图像增强和边缘检测滤波器,用于图像处理。它是两种滤波器的组合:高斯滤波器和拉普拉斯滤波器。高斯滤波器用于平滑图像并减少噪声,而拉普拉斯滤波器用于检测边缘。

高斯-拉普拉斯滤波器可用于检测图像中不同尺度的边缘。通过改变高斯滤波器的标准差,可以控制检测边缘的尺度。较小的标准差检测更精细的细节,而较大的标准差检测更宽泛的特征。

让我们看看几个高斯-拉普拉斯滤波器的示例。

示例 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);

我们使用 fspecial 函数创建高斯-拉普拉斯滤波器,其中“log”作为滤波器类型。此滤波器表示高斯滤波器的拉普拉斯算子,用于边缘检测。

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 滤波器进行图像滤波

此示例显示了将两种不同的滤波器(拉普拉斯滤波器和高斯-拉普拉斯 (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);

这里,使用 fspecial 函数创建拉普拉斯滤波器,其中“laplacian”作为滤波器类型。然后使用 imfilter 函数将此滤波器应用于输入图像 x,从而产生滤波后的图像 filtered_image。

figure;
imshow(filtered_image);
title('Output of Laplacian Filter');

此代码显示从拉普拉斯滤波器获得的滤波后的图像。title 函数在图像图形中添加标题。

h = fspecial('log');
filtered_image = imfilter(x, h);

与拉普拉斯滤波器类似,使用 fspecial 函数创建 LoG 滤波器,其中“log”作为滤波器类型。然后使用 imfilter 函数将此滤波器应用于输入图像 x,从而产生滤波后的图像 filtered_image。

imshow(filtered_image);
title('Laplacian of Gaussian Filter');

此代码显示从 LoG 滤波器获得的滤波后的图像。title 函数在图像图形中添加标题。

执行代码后,我们得到如下输出:

广告