使用matlab编写函数w = genlaplacian(n),自动产生任一奇数尺寸n的拉普拉斯算子,并利用编写的函数,分别采用5×5,9×9,15×15和25×25大小的拉普拉斯算子对没有加噪的lena图像进行锐化滤波,并图像显示;
时间: 2024-11-27 08:15:26 浏览: 4
在MATLAB中,我们可以编写一个名为`genlaplacian`的函数,用于生成指定尺寸的拉普拉斯算子,然后使用这个函数对 Lena 图像进行锐化滤波。以下是详细的步骤:
首先,我们需要创建`genlaplacian`函数:
```matlab
function w = genlaplacian(n)
% 根据输入的奇数n,生成一个n×n的拉普拉斯算子
assert(mod(n, 2) == 1, 'Input size must be an odd number.');
w = zeros(n, n);
center = floor(n / 2); % 算子中心位置
for i = -center : center
for j = -center : center
if (i == 0 && j == 0) || abs(i) == abs(j) == 1
w(center+i, center+j) = 1;
end
end
end
w = w / (2 * (center + 1)); % 归一化
end
```
这个函数生成了一个二维拉普拉斯算子,中心元素为1,周边元素为-1,其余为0,然后进行了归一化。
接下来,我们将该函数应用到不同尺寸的拉普拉斯算子上,并对 Lena 图像进行锐化:
```matlab
% 加载Lena图像
lena = imread('lena.png');
% 定义不同的拉普拉斯算子尺寸
sizes = [5, 9, 15, 25];
% 对每个大小的图像进行锐化
results = cell(length(sizes), 1);
for i = 1:length(sizes)
n = sizes(i);
W = genlaplacian(n);
filtered_image = imfilter(lena, W, 'replicate');
results{i} = filtered_image;
end
% 显示结果
figure
for i = 1:length(results)
subplot(2, 2, i)
imshow(results{i})
title(sprintf('Laplacian Size: %dx%d', sizes(i), sizes(i)))
end
```
这段代码会生成四个子窗口,每个窗口显示对应尺寸的拉普拉斯算子对 Lena 图像进行锐化的结果。
阅读全文