赞
踩
锐化滤波的主要目的是突出灰度的过渡部分,比如图像中物体的边缘。
一阶微分:
(1)在恒定灰度值得区域一阶微分值为零;
(2)在灰度变化的台阶以及斜坡处一阶微分值非零;
(3)沿着斜坡的一阶微分值非零。
对一维函数,公式定义如下:
∂
f
∂
x
=
f
(
x
+
1
)
−
f
(
x
)
,
(
1
)
\frac{\partial{f}}{\partial{x}}=f(x+1)-f(x),(1)
∂x∂f=f(x+1)−f(x),(1)
二阶微分:
(1)在恒定灰度值得区域二阶微分值为零;
(2)在灰度变化的台阶以及斜坡处起点的二阶微分值非零;
(3)沿着斜坡的二阶微分值为零。
公式定义如下:
∂
2
f
∂
x
2
=
f
(
x
+
1
)
+
f
(
x
−
1
)
−
2
f
(
x
)
,
(
2
)
\frac{\partial^2{f}}{\partial{x^2}}=f(x+1)+f(x-1)-2f(x),(2)
∂x2∂2f=f(x+1)+f(x−1)−2f(x),(2)
具体如下图
图来自《数字图像处理》
图像中将一阶微分用梯度幅值定义,在坐标(x,y)处点的梯度定义为一个二维列向量:
∇
f
≡
g
r
a
d
(
f
)
≡
[
g
x
g
y
]
≡
[
∂
f
∂
x
∂
f
∂
y
]
,
(
3
)
\nabla{f}\equiv grad(f) \equiv \left[ gxgy
然后定义图像对应的梯度图像M(x,y),M(x,y)中的值为
∇
f
\nabla{f}
∇f的幅度值(长度):
M
(
x
,
y
)
=
m
a
g
(
∇
f
)
=
g
x
2
+
g
y
2
,
(
4
)
M(x,y)=mag(\nabla{f})=\sqrt{g_x^2+g_y^2},(4)
M(x,y)=mag(∇f)=gx2+gy2
,(4)
或者
M
(
x
,
y
)
=
m
a
g
(
∇
f
)
=
∣
g
x
∣
+
∣
g
y
∣
,
(
5
)
M(x,y)=mag(\nabla{f})=|g_x|+|g_y|,(5)
M(x,y)=mag(∇f)=∣gx∣+∣gy∣,(5)
由第一节的一阶微分定义:
当处于灰度值不变的区域中时,
g
x
g_x
gx和
g
y
g_y
gy都是0,则梯度图像对应位置的灰度值大小也为0;
当处于沿x变化的过渡点时,
g
x
g_x
gx非零,
g
y
g_y
gy为零,则梯度图像在对应位置的大小为
∣
g
x
∣
|g_x|
∣gx∣;
同理可推其他情况。
sobel算子如下:
分别为
g
x
g_x
gx和
g
y
g_y
gy的计算窗口
注: 教材中的坐标轴规定如下
以图像左上角为原点,x轴向下,y轴向右。
以3×3模板为例:
f
(
x
−
1
,
y
−
1
)
f
(
x
−
1
,
y
)
f
(
x
−
1
,
y
+
1
)
f
(
x
,
y
−
1
)
f
(
x
,
y
)
f
(
x
,
y
+
1
)
f
(
x
+
1
,
y
−
1
)
f
(
x
+
1
,
y
)
f
(
x
+
1
,
y
+
1
)
f(x−1,y−1)f(x−1,y)f(x−1,y+1)f(x,y−1)f(x,y)f(x,y+1)f(x+1,y−1)f(x+1,y)f(x+1,y+1)
g
x
g_x
gx和
g
y
g_y
gy的计算公式分别为为:
g
x
=
∂
f
∂
x
=
[
f
(
x
+
1
,
y
−
1
)
+
2
f
(
x
+
1
,
y
)
+
f
(
x
+
1
,
y
+
1
)
]
−
[
f
(
x
−
1
,
y
−
1
)
+
2
f
(
x
−
1
,
y
)
+
f
(
x
−
1
,
y
+
1
)
]
g_x=\frac{\partial{f}}{\partial{x}}=[f(x+1,y-1)+2f(x+1,y)+f(x+1,y+1)]-[f(x-1,y-1)+2f(x-1,y)+f(x-1,y+1)]
gx=∂x∂f=[f(x+1,y−1)+2f(x+1,y)+f(x+1,y+1)]−[f(x−1,y−1)+2f(x−1,y)+f(x−1,y+1)]
g
y
=
∂
f
∂
y
=
[
f
(
x
−
1
,
y
+
1
)
+
2
f
(
x
,
y
+
1
)
+
f
(
x
+
1
,
y
+
1
)
]
−
[
f
(
x
−
1
,
y
−
1
)
+
2
f
(
x
,
y
−
1
)
+
f
(
x
+
1
,
y
−
1
)
]
g_y=\frac{\partial{f}}{\partial{y}}=[f(x-1,y+1)+2f(x,y+1)+f(x+1,y+1)]-[f(x-1,y-1)+2f(x,y-1)+f(x+1,y-1)]
gy=∂y∂f=[f(x−1,y+1)+2f(x,y+1)+f(x+1,y+1)]−[f(x−1,y−1)+2f(x,y−1)+f(x+1,y−1)]
则M(x,y)=|
g
x
g_x
gx|+|
g
y
g_y
gy|=…
MATLAB代码如下
clc;clear;close all im1=imread('1.jpg'); %读取图像:彩色图 figure imshow(im1) im2=rgb2gray(im1); %获得灰度图 figure imshow(im2) f = padarray(im2,[1,1],'symmetric','both'); %此处是对原图矩阵扩充,因为处理窗口为3×3, %要使图像最外层像素得到处理,则需要四边都向外面扩充一排,此处使用镜面扩充 [m,n]=size(f);%获取矩阵大小 M=zeros(size(f));%提前定义梯度图像M,有利于提高运算速度 for x=2:m-1 for y=2:n-1 gx=(f(x+1,y-1)+2*f(x+1,y)+f(x+1,y+1)) - (f(x-1,y-1)+2*f(x-1,y)+f(x-1,y+1)); gy=(f(x-1,y+1)+2*f(x,y+1)+f(x+1,y+1)) - (f(x-1,y-1)+2*f(x,y-1)+f(x+1,y-1)); %使用上面的公式计算gx,gy。其他算子类似。 M(x,y)=abs(gx)+abs(gy); end end M=M(2:m-1,2:n-1);%去掉扩充的行列 figure imshow(M)
与一阶微分相似,拉普拉斯对应的计算公式如下图:
图片来自数字图像处理
拉普拉斯算子模板如下:
以上图最左边模板为例:
clc;clear;close all im1=imread('1.jpg'); %读取图像:彩色图 figure imshow(im1) im2=rgb2gray(im1); %获得灰度图 figure imshow(im2) f = padarray(im2,[1,1],'symmetric','both'); %此处是对原图矩阵扩充,因为处理窗口为3×3, %要使图像最外层像素得到处理,则需要四边都向外面扩充一排,此处使用镜面扩充 [m,n]=size(f);%获取矩阵大小 M=zeros(size(f));%提前定义梯度图像M,有利于提高运算速度 for x=2:m-1 for y=2:n-1 M(x,y)=f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)-4*f(x,y); %以3.6-6的公式计算,其他算子模板类似 end end M=M(2:m-1,2:n-1);%去掉扩充的行列 figure imshow(M)
非锐化掩蔽:从原图减去一个非锐化(平滑过的)图像。
步骤如下:
(1)模糊原图像(比如平滑滤波);
(2)原图减去模糊图像,得到的差值图像成为模板;
(3)将模板加到原图像上得到锐化图像。
公式如下:
g
m
a
s
k
(
x
,
y
)
=
f
(
x
,
y
)
−
f
′
(
x
,
y
)
g_{mask}(x,y)=f(x,y)-f'(x,y)
gmask(x,y)=f(x,y)−f′(x,y)
其中f(x,y)为原图,f’(x,y)为模糊图像,
g
m
a
s
k
(
x
,
y
)
g_{mask}(x,y)
gmask(x,y)为模板
则锐化图像g(x,y):
g
(
x
,
y
)
=
f
(
x
,
y
)
+
k
∗
g
m
a
s
k
(
x
,
y
)
g(x,y)=f(x,y)+k*g_{mask}(x,y)
g(x,y)=f(x,y)+k∗gmask(x,y)
其中k为权重(>0),当k>1时成为高提升滤波,当k<1时则不强调模板的贡献
模糊方法以高斯模糊为例
clc;clear;close all im1=imread('1.jpg'); %读取图像:彩色图 figure imshow(im1) im2=rgb2gray(im1); %获得灰度图 figure imshow(im2) w=fspecial('gaussian',[5 5],5); im3=imfilter(im2,w); %高斯模糊,也可以使用其他平滑算法 figure imshow(im3); g=im2-im3; %模板 im4=im2+g; %锐化图像 figure imshow(im4)
MATLAB代码经MATLAB R2019a实现。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。