📜  在 MATLAB 中使用拉普拉斯滤波器和高升压滤波器进行图像锐化

📅  最后修改于: 2022-05-13 01:55:48.614000             🧑  作者: Mango

在 MATLAB 中使用拉普拉斯滤波器和高升压滤波器进行图像锐化

图像锐化是一种应用于数字图像的效果,使它们的外观更清晰。锐化增强了图像边缘的定义。暗淡的图像是边缘较差的图像。背景和边缘没有太大区别。相反,锐化的图像是观看者可以清楚地区分边缘的图像。我们知道边缘的强度和对比度会发生变化。如果这种变化显着,则图像被称为清晰。观看者可以清楚地看到背景和前景部分。

使用平滑技术进行图像锐化

拉普拉斯滤波器

  • 它是一个二阶导数运算符/filter/mask。
  • 它共同检测图像以及水平和垂直方向。
  • 无需单独应用它来检测沿水平和垂直方向的边缘。
  • 此过滤器的值之和为 0。

例子:

Matlab
% MatLab program for edge sharpening.
% Read the image in variable 'a'
a=imread("cameraman.jpg");
  
% Defined the laplacian filter.
Lap=[0 1 0; 1 -4 1; 0 1 0];
  
% Convolve the image read
% in 'a' with Laplacian mask.
a1=conv2(a,Lap,'same');
  
% After convolution the intensity 
% Values go beyond the range.
% Normalise the range of intensity.
a2=uint8(a1);
  
% Display the sharpened image.
imtool(abs(a-a2),[])
  
% Define strong laplacian filter
lap=[-1 -1 -1; -1 8 -1; -1 -1 -1];
  
% Apply filter on original image
a3=conv2(a,lap,'same');
  
% Normalise the resultant image.
a4=uint8(a3);
  
% Display the sharpened image.
imtool(abs(a+a4),[])


Matlab
% MatLab code for High Boost Filtering
% read the image in variable 'a'
a=imread("cameraman.jpg");
  
% Define the High Boost Filter 
% with central value=4 and A=1.
HBF=[0 -1 0; -1 5 -1; 0 -1 0];
  
% Convolve the image 'a' with HBF.
a1=conv2(a, HBF, 'same');
  
% Normalise the intensity values.
a2=uint8(a1);
  
%Display the sharpened image.
imtool(a2,[]);
  
% Define the HBF with Central value=8 and A=1.
SHBF=[-1 -1 -1; -1 9 -1; -1 -1 -1];
  
% Convolve the image 'a' with HBF.
a3=conv2(a,SHBF, 'same');
  
% Normalise the intensity values.
a4=uint8(a3);
  
% Display the sharpened image.
imtool(a4,[]);


输出:

代码说明:

  • 边缘锐化的 MatLab 程序说明。 a=imread(“cameraman.jpg”);此行读取变量 a 中的图像。
  • 圈=[0 1 0; 1 -4 1; 0 1 0];该行定义了拉帕拉克滤波器。
  • a1=conv2(a Lap,'相同');这条线用拉普拉斯滤波器对图像进行卷积。
  • 卷积后,一些像素的值超出范围[0 255]。因此使用下一行。
  • a2=uint8(a1);这条线标准化了像素范围。
  • 锐化图像 = 原始图像 - 如果拉普拉斯滤波器的中心像素为负值,则边缘检测到的图像。
  • imtool(abs(a-a2),[]) 此行显示锐化的图像。
  • 圈=[-1 -1 -1; -1 8 -1; -1 -1 -1];这条线定义了强拉普拉斯滤波器,具有正中心像素值。
  • a3=conv2(一圈,'相同');这条线用这个过滤器对原始图像进行卷积。
  • a4=uint8(a3);这条线标准化了像素值的范围。
  • imtool(abs(a+a4),[]) 此行显示锐化的图像。

使用锐化蒙版:High Boost Filtering

高升压滤波

它是一种强调表示图像细节的高频分量而不消除低频分量的锐化技术。

Formula: 
HPF = Original image - Low frequency components 
LPF = Original image - High frequency components 
HBF = A * Original image - Low frequency components 
        = (A - 1) * Original image + [Original image - Low frequency components]
        = (A - 1) * Original image + HPF 

这里,

  • HPF = 高通滤波,这意味着高频分量被允许通过,而低频分量被从原始图像中丢弃。
  • LPF = 低通滤波,这意味着低频分量被允许通过,而高频分量被从原始图像中丢弃。

HPF 相对于拉普拉斯滤波器的优势:

使用拉普拉斯滤波器时,如果使用的拉普拉斯滤波器的中心像素值为负,我们需要从原始图像中减去边缘检测图像,否则,我们将边缘检测图像添加到原始图像中。因此在选择拉普拉斯滤波器时使用了两个操作。

在高升压滤波中,我们只需要使用一次卷积操作。它会给我们一个锐化的图像。

例子:

MATLAB

% MatLab code for High Boost Filtering
% read the image in variable 'a'
a=imread("cameraman.jpg");
  
% Define the High Boost Filter 
% with central value=4 and A=1.
HBF=[0 -1 0; -1 5 -1; 0 -1 0];
  
% Convolve the image 'a' with HBF.
a1=conv2(a, HBF, 'same');
  
% Normalise the intensity values.
a2=uint8(a1);
  
%Display the sharpened image.
imtool(a2,[]);
  
% Define the HBF with Central value=8 and A=1.
SHBF=[-1 -1 -1; -1 9 -1; -1 -1 -1];
  
% Convolve the image 'a' with HBF.
a3=conv2(a,SHBF, 'same');
  
% Normalise the intensity values.
a4=uint8(a3);
  
% Display the sharpened image.
imtool(a4,[]);

输出:

代码说明:

  • 边缘锐化的 MatLab 程序说明。 a=imread(“cameraman.jpg”);此行读取变量 a 中的摄影师图像。
  • HBF=[0 -1 0; -1 5 -1; 0 -1 0];该行定义了拉帕拉克滤波器。
  • a1=conv2(a,HBF,'相同');这条线将图像与 HBF 进行卷积。
  • 卷积后,一些像素的值超出范围[0 255]。因此使用下一行。
  • a2=uint8(a1);这条线标准化了像素范围。
  • imtool(a2),[]) 此行显示锐化的图像。
  • SHBF=[-1 -1 -1; -1 8 -1; -1 -1 -1];这条线定义了强 HBF,A=1 和 Central=8
  • a3=conv2(aSHBF,'相同');这条线用这个过滤器对原始图像进行卷积。
  • a4=uint8(a3);这条线标准化了像素值的范围。
  • imtool(a4,[]) 此行显示锐化的图像。