MATLAB - 拉普拉斯滤波器



拉普拉斯滤波器是一种用于图像处理的图像增强滤波器。它通过强调快速强度变化的区域来锐化图像。拉普拉斯滤波器基于拉普拉斯算子,这是一种用于检测图像边缘和精细细节的二阶导数算子。

在后面的部分,我们将了解拉普拉斯滤波器在图像上使用的不同方法。

使用 Matlab 中的 imfilter() 函数对图像进行拉普拉斯滤波

在 MATLAB 中,可以使用 imfilter 函数将拉普拉斯滤波器应用于图像。imfilter 函数将图像与表示拉普拉斯算子的核进行卷积。此核突出显示图像中快速强度变化的区域,使边缘显得更清晰。

语法

output_image = imfilter(input_image, filter_kernel);

输入图像 − 这是要滤波的输入图像。它可以是灰度图像(二维数组)或彩色图像(具有 [高度,宽度,通道] 维度的三维数组)。

滤波器核 − 这是定义如何执行滤波操作的滤波器核或掩码。它通常是一个二维数组(对于二维图像)或三维数组(对于三维图像),表示滤波器的权重。滤波器核的大小决定了应用滤波的邻域大小。常见的滤波器核包括拉普拉斯滤波器、高斯滤波器、Sobel 滤波器等。

输出图像 − 这是应用滤波器后的输出图像。它的大小和数据类型与输入图像相同。

让我们看看 imfilter() 函数中拉普拉斯滤波器的一个示例

示例 1:在 imfilter() 中使用拉普拉斯滤波器

我们的代码如下:

% Read the image
img = imread('peppers.png');

% Display the original image

imshow(img);
title('Original Image');

% Apply the Laplacian filter
laplacian_filter = [0 -1 0; -1 4 -1; 0 -1 0];
filtered_img = imfilter(img, laplacian_filter);

% Display the filtered image
subplot(1, 2, 2);
imshow(filtered_img, []);
title('Laplacian Filtered Image');

在上例中,

  • 代码使用 imread() 函数从当前目录读取名为 'peppers.png' 的图像文件。图像存储在变量 img 中。
  • 代码使用 subplot 函数创建一个包含 1 行 2 列子图的图形,然后选择第一个子图 (1, 2, 1)。imshow() 函数用于在此子图中显示图像 img。title 函数设置子图的标题为“原始图像”。
  • 代码定义了一个 3x3 拉普拉斯滤波器核 laplacian_filter,用于执行图像滤波。使用 imfilter() 函数将拉普拉斯滤波器应用于原始图像,结果存储在变量 filtered_img 中。
  • 与显示原始图像类似,代码使用 subplot 选择第二个子图 (1, 2, 2) 并使用 imshow() 显示滤波后的图像 filtered_img。此子图的标题设置为“拉普拉斯滤波图像”。

我们得到的输出如下:

使用 Matlab 中的 conv2() 函数对图像进行拉普拉斯滤波

conv2() 是 MATLAB 中用于二维卷积的函数,它是图像处理中的一个基本运算。它通常用于将滤波器应用于图像,例如模糊、锐化、边缘检测等。

语法

C = conv2(A, B, 'same');

在语法中

  • A 是输入图像或矩阵。
  • B 是二维滤波器核(例如拉普拉斯滤波器)。
  • 'same' 是一个可选参数,它指定输出矩阵 C 的大小与输入矩阵 A 相同。

让我们来看一个相同的例子

例子

我们的代码如下:

% Read the image as grayscale
img_gray = imread('peppers.jpg');

% Define the Laplacian filter kernel
laplacian_filter = [0 -1 0; -1 4 -1; 0 -1 0];

% Apply the Laplacian filter using conv2
filtered_img = conv2(double(img_gray), laplacian_filter, 'same');

% 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 Filtered Image');

在上例中,

  • 将图像 'peppers.jpg' 作为灰度图像读取并将其存储在变量 img_gray 中。
  • 定义一个 3x3 拉普拉斯滤波器核 laplacian_filter。此核用于边缘检测。
  • 使用 conv2 进行拉普拉斯滤波:使用 double(img_gray) 将灰度图像转换为双精度矩阵。使用 conv2 应用拉普拉斯滤波器到灰度图像,这将执行二维卷积。'same' 选项确保输出图像与输入图像大小相同。
  • 显示原始图像和滤波图像:为此,使用 subplot 创建一个包含两个子图的图形。在第一个子图中显示原始灰度图像。在第二个子图中显示拉普拉斯滤波图像(使用 uint8(filtered_img) 将其转换回 uint8 格式)。

当我们在 matlab 命令窗口中执行代码时,我们得到的输出为:

广告