前言:
百度到:图像锐化(image sharpening)是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空间域处理和频域处理两类。
在我看来,锐化就是将图像的边缘进行增强。
既然锐化是将图像边缘增强,那么我认为往往是图像边缘模糊的时候需要进行锐化。在上一个实验中我们学到了平滑处理滤波器,不难发现滤波器往往会在清除噪声的时候让我们的图像变得模糊,所以我认为在我们处理完噪声以后就可以通过锐化来增强边缘。如下:
虽然锐化后不是很清晰,但至少边缘明显了很多
锐化是增强边缘,那么首先我们就要找到边缘,接下来关键的部分就是怎么找边缘了。
什么是边缘?在图像的一个区域内,出现了灰度的突变,突然变小或突然变大,这里突变的中间区域就是边缘。
怎么找边缘?
在计算机里是一个像素一个像素进行处理,怎么处理?这里就提到了几种算子(在我看来就是一种计算的模板方法):
以4领域的Laplacian算子为例:对于一个像素f(i,j),我们就使用它的上下左右四个像素和它自身进行运算得到g(i,j):
如果4领域的像素值都和中心差不多,那么g(i,j)最后的值就是0,显示是黑色,g(i,j)越大,就越白,最后处理完得到的g,就是边缘图像。
边缘检测函数sharpen_value():
function [Ig] = sharpen_value(S,kind)
% 锐化函数 输入S,锐化算子 kind
if(~exist('kind','var'))
kind = -1; % 如果未出现该变量,则对其进行赋值
end
[m,n] = size(S);
if(kind == -1)%拉普拉斯4
H = [0,-1,0;
-1,4,-1;
0,-1,0];
elseif(kind == 0)%拉普拉斯8
H = [-1,-1,-1;
-1,8,-1;
-1,-1,-1];
elseif(kind == 1)%prewitt 横
H = [1,1,1;
0,0,0;
-1,-1,-1];
elseif(kind == 2)%prewitt 竖
H = [1,0,-1;
1,0,-1;
1,0,-1];
elseif(kind == 3)%Sobel 竖
H= [1,2,1;
0,0,0;
-1,-2,-1];
elseif(kind == 4)%Sobel 竖
H= [1,0,-1;
2,0,-2;
1,0,-1];
elseif(kind == 5)
H= [1,0,0;
0,-1,0;
0,0,0];
end
a=1;
S = im2double(S);
Ig =S;
for i=2:m-1
for j=2:n-1
if(kind == 5)
Ig(i,j) = abs(S(i,j)-S(i+1,j+1))+abs(S(i+1,j)-S(i,j+1));
else
Ig(i,j) = 0;
for a = -1:1
for b = -1:1
Ig(i,j) = Ig(i,j)+H(a+2,b+2)*S(i+a,j+b);
end
end
if(Ig(i,j)<0)
Ig(i,j) = 0;
end
end
Ig(i,j) = uint8(Ig(i,j)*255);
end
end
Ig = uint8(Ig);
end
最后将边缘图和原图相加,就可以实现边缘增强了。
利用Laplacian 锐化算子(α=-1)对256 级灰度的数字图像进行锐化处理,显示处理前、后图像。
在添加了噪声的图像上进行拉普拉斯锐化处理,和未添加噪声图像的处理结果进行比较。
分别利用Roberts、Prewitt 和Sobel 边缘检测算子,对数字图像进行边缘检测,计算图像梯度图。显示图像x和y方向偏导图像和梯度幅值图像。
利用Laplacian 锐化算子(α=-1)对256 级灰度的数字图像进行锐化处理,显示处理前、后图像。
figure('NumberTitle','off','Name','任务1');
I = imread('stone.jpg');
I2 = sharpen_value(I,-1);
I2 = I2+I;
subplot(1,2,1);imshow(I);title('原图');
subplot(1,2,2);imshow(I2);title('增强后');
在添加了噪声的图像上进行拉普拉斯锐化处理,和未添加噪声图像的处理结果进行比较。
figure('NumberTitle','off','Name','任务2');
Ib = imnoise(I,'salt',0.02);%添加椒盐噪声
I3 = sharpen_value(Ib,-1);
I3 = I3+Ib;
subplot(1,2,1);imshow(I2);title('原图增强图');
subplot(1,2,2);imshow(I3);title('噪声增强图');
分别利用Roberts、Prewitt 和Sobel 边缘检测算子,对数字图像进行边缘检测,计算图像梯度图。显示图像x和y方向偏导图像和梯度幅值图像。
figure('NumberTitle','off','Name','任务3');
I = rgb2gray(I);
H1 = sharpen_value(I,5);
H2 = sharpen_value(I,2);
H3 = sharpen_value(I,3);
subplot(2,2,1.5);imshow(H1);title('Roberts图像梯度图');
subplot(2,2,3);imshow(H2);title('Prewitt x方向偏导');
subplot(2,2,4);imshow(H3);title('Sobel y方向偏导');
利用Laplacian 锐化算子(α=-1)对256 级灰度的数字图像进行锐化处理,显示处理前、后图像。
在添加了噪声的图像上进行拉普拉斯锐化处理,和未添加噪声图像的处理结果进行比较。
可以明显看出噪声对锐化的影响很大。
椒盐噪声:
高斯噪声:
分别利用Roberts、Prewitt 和Sobel 边缘检测算子,对数字图像进行边缘检测,计算图像梯度图。显示图像x和y方向偏导图像和梯度幅值图像。
对Laplacian锐化算子的处理结果中,对小于0的部分,采用不同的方法标准化到[0,255]时,图像的显示效果有什么不同?为什么?
在我看来有两种方法来标准化:1,取绝对值。2,取0。
改了改函数,让我们看看效果:
取绝对值:负值转正值,会增加对比度,但可能导致某些细节过度增强,看起来更加锐利。会引入图像中的一些噪声或产生不自然的效果。
取0:负值保持为零,因此对比度不会显著增加。这种方法可以保留一些图像细节,但可能不会产生像绝对值标准化那样强烈的锐化效果。