2019-02-21 21:45:18 qq_34725005 阅读数 231

在数学中, 微分是对函数的局部变化率的一种线性描述. 微分可以近似地描述当函数自变量的取值作足够小的改变时, 函数的值是怎样改变的. 最简单的各向同性微分算子是拉普拉斯算子. 一个二元图像函数 f(x,y) 的拉普拉斯变换定义为
2f=2fx2+2fy2∇^2f=\frac{∂^2f}{∂x^2}+\frac{∂^2f}{∂y^2}

为了更适合于图像处理, 这一方程必须表现为离散形式. 考虑到有两个变量, 因此, 我们在 x 方向上对二阶偏微分采用下列定义:
2fx2=f(x+1,y)+f(x1,y)2f(x,y)\frac{∂^2f}{∂x^2}=f(x+1,y)+f(x-1,y)-2f(x,y)

类似的, 在 y 方向上为
2fy2=f(x,y+1)+f(x,y1)2f(x,y)\frac{∂^2f}{∂y^2}=f(x,y+1)+f(x,y-1)-2f(x,y)

因此
2f=f(x+1,y)+f(x1,y)+f(x,y+1)+f(x,y1)4f(x,y)∇^2f=f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)-4f(x,y)

因此,执行这一新定义的掩膜如下:
在这里插入图片描述
由于拉普拉斯算子是一种微分算子, 它的应用强调图像中灰度的突变和降低灰度慢变化的区域. 这将产生一幅把图像中的浅灰色边线和突变点叠加到暗背景中的图像. 将原始图像和拉普拉斯图像叠加在一起的简单方法可以保护拉普拉斯锐化后的效果, 同时又能复原背景信息.

常见拉普拉斯算子有
在这里插入图片描述
使用拉普拉斯算子对图像进行增强的基本表示方法如下
在这里插入图片描述
在机理中, 我们首先使用拉普拉斯算子过滤图像, 然后, 从原图像中减去该图像。
g(x,y)=5f(x,y)[f(x+1,y)+f(x1,y)+f(x,y+1)+f(x,y1)]g(x,y)=5f(x,y)-[f(x+1,y)+f(x-1,y)+f(x,y+1)+f(x,y-1)]

import numpy as np
import scipy.signal
import cv2

def convert_2d(r):
    kernel = np.array([
        [0,-1,0],
        [-1,5,-1],
        [0,-1,0]
    ])
    s = scipy.signal.convolve2d(r,kernel,mode='same',boundary='symm')
    for i in range(s.shape[0]):
        for j in range(s.shape[1]):
            s[i][j] = min(max(0,s[i][j]),255)
    s = s.astype(np.uint8)
    return s

def convert_3d(r):
    s_dsplit= []
    for d in range(r.shape[2]):
        rr = r[:,:,d]
        ss = convert_2d(rr)
        s_dsplit.append(ss)
    s = np.dstack(s_dsplit)
    return s

im = cv2.imread('tetet.jpg')
im_convert_mat = convert_3d(im)
cv2.imshow('ruihua',im_convert_mat)
cv2.imwrite('ruihua.jpg',im_convert_mat)
cv2.waitKey()

在这里插入图片描述
在这里插入图片描述

2019-02-13 11:32:14 dzm123lalala 阅读数 580

图像边缘锐化基本方法

锐化处理可以用空间微分来完成。

  • 微分运算
  • 梯度锐化
  • 边缘检测

通常,边缘上的灰度值变化平缓,而边缘两侧灰度值变化较快,图像的边缘一般指在局部不连续的图像特征,一般是局部亮度变化最显著的部分,灰度值的变化,颜色分量的突变,纹理结构的突变都可以构成边缘信息。
常见的边缘类型

用差分定义一元函数f(x)的一阶微分:

fx=f(x+1)f(x) \frac{\partial f}{\partial x} =f(x+1)-f(x)

用差分定义一元函数f(x)的二阶微分:

2fx2=f(x+1)+f(x1)2f(x) \frac{\partial^2 f}{\partial x^2} =f(x+1)+f(x-1)-2f(x)

如果被运算点在边缘内部,差分值为很低的值,若是在边缘,则为很高的值。单向微分运算示例

双向一次微分运算

对灰度图像f在纵方向和横方向两个方向进行违反。改算法同时增强水平和垂直方向的边缘。
计算方法:纵方向求差分,横方向求差分,然后求平方和然后开方双向微分效果图

梯度运算

t=[GxGy]=[fxfy] \bigtriangledown t=\begin{bmatrix} G_x \\ G_y \\ \end{bmatrix}=\begin{bmatrix} \frac{\partial f}{\partial x} \\ \frac{\partial f}{\partial y} \\ \end{bmatrix}
fGx+Gy \bigtriangledown f \approx |G_x|+|G_y|

f=(fx)2+(fy)2 \bigtriangledown f=\sqrt{(\frac{\partial f}{\partial x})^2+(\frac{\partial f}{\partial y})^2}
上面这两个公式近似等效
f()=max{fx,fy} |\bigtriangledown f_(\infty_) |=max \lbrace |\frac{\partial f}{\partial x}|,|\frac{\partial f}{\partial y}| \rbrace

Robert提出的交叉微分算子

Robert提出的交叉微分算子

Sobel算子

Sobel算子

Sobel算子既有平滑作用又有差分作用

Prewitt算子

Prewitt算子
sobel算子和Prewitt算子的区别在于系数,这些求梯度的运算可以利用卷积模板实现。

梯度锐化模板

梯度锐化模板

二阶微分 --拉普拉斯算子

二元图像函数f(x,y)的拉普拉斯变换:
2f=2fx2+2fy2 \bigtriangledown^2 f = \frac{\partial^2 f}{\partial x^2}+\frac{\partial^2 f}{\partial y^2}
x方向:
2fx2=f(x+1)+f(x1)2f(x) \frac{\partial^2 f}{\partial x^2}=f(x+1)+f(x-1)-2f(x)
y方向:
2fy2=f(y+1)+f(y1)2f(y) \frac{\partial^2 f}{\partial y^2}=f(y+1)+f(y-1)-2f(y)
由以上两个分量相加,
2f=[f(x+1,y)+f(x1.y)+f(x,y+1)+f(x,y1)]4f(x,y) \bigtriangledown^2 f=[f(x+1,y)+f(x-1.y)+f(x,y+1)+f(x,y-1)]-4f(x,y) 拉普拉斯算子
拉普拉斯算子特点:

强调突变,弱化慢变,产生一幅把浅灰色边线,突变点叠加到暗背景中的图像。

拉普拉斯效果
卷积核中心为5的原因:将原始图像和拉普拉斯算子的图像叠加到了一起,原图像为1,Laplace为4,加起来就是5

这样做的好处:既能保持瑞华处理的效果,又能复原背景信息。

高斯-拉普拉斯(log)算子

高斯-拉普拉斯算子是效果更好的边缘检测其,把高斯平滑器是效果更好的边缘检测器,把高斯平滑器和拉普拉斯锐化结合起来,先平滑去掉噪声,再进行边缘检测。
[24442408044824844080424442] \begin{bmatrix} -2 & -4 & -4 & -4 & -2 \\ -4 & 0& 8& 0& -4 \\ -4 & 8& 24^*& 8& -4 \\ -4 & 0& 8& 0& -4 \\ -2 & -4 & -4 & -4 & -2 \\ \end{bmatrix}

高频提升滤波器

微分运算可以用来求信号的变化率,具有加强高频分量的作用,微分处理厚度图像非常暗,不适用。

如果纪要i去图像的轮廓清晰,又要求保持目标物体的内部灰度不变,这就是高频提升滤波器的目的。

微分运算会使低频成分损失很多,而高频成分突出,为了使得图像边缘清晰,内容完整保留,采用下式:
g(x,y)=αf(x,y)±f(x,y) g(x,y)=\alpha f(x,y) \pm \bigtriangledown f(x,y)
高斯-拉普拉斯(log)算子就是高频提升滤波器的一种。
线性锐化滤波与高频提升滤波

自适应检测

采用多个边缘检测算子,不同的检测算子采用不同的方向,不同的邻域导数,用求卷积的方法,计算每个模板,求最大值。自适应检测

Kirsch边缘检测算子

kirsch边缘检测算子
Kirsch边缘检测算子检测的结果:
在这里插入图片描述

锐化算子小结

  • 好的检测结果:对边缘检测的错误率要低,在检测真实边缘的同时 ,避免检测出虚假的边缘。
  • 好的边缘定位精度:标记的边缘位置要和图像上真正的边缘位置尽量接近;
  • 对同一边缘要有低的响应次数:有的算子会对一个边缘产生多个相应,本来只有一共边缘点,可是检测出来会出现多个边缘点。要克服噪声的影响。

Roberts算子

利用局部差分算子寻找边缘,边缘定位精度较高,但容易丢失一部分边缘,同时由于图像没有经过平滑处理,因此不具备抑制噪声能力。对陡峭边缘且含噪声较少的有效。
Roberts

Sobel算子和Prewitt算子

先做加权平滑处理,再做微分运算。平滑部分的权值有些差异,对噪声又一定的抑制能力。但不能完全排除虚假边缘。虽然两个算子定位效果不错,但检测出的边缘容易出现多像素宽度。
sobel

Laplacian算子

不依赖于边缘方向的二阶微分算子,对阶跃型边缘定位准确,对噪声非常敏感,使噪声加强,噪声能力差,容易丢失一部分边缘方向信息,造成一些不连续的检测边缘。

LOG算子

先用高斯函数平滑滤波,后用Laplacian算子检测边缘,克服了Laplacian算子抗噪声差的缺点,同时页平滑掉比较尖锐的边缘,尖锐边缘无法被检测到。

2018-03-18 15:31:39 qq_27591163 阅读数 2192

锐化处理:锐化处理的主要目的是突出图像中的细节或增强被模糊的细节。锐化处理所讨论的重点是微分性质,恒定灰度区域、突出的开头与结尾,沿着灰度级斜坡处的特性。

一阶微分:

af/ax = f(x+1)-f(x)

二阶微分:

a2f/a2x = f(x+1)+f(x-1)-2f(x)

两种不同方式对于锐化处理的影响:

1、沿着整个斜坡,一阶微分都不为零,而二阶微分后,非零值只出现在斜坡的起点和终点,所以说,一阶微分会产生较粗的边缘,而二阶微分则细很多。

2、二阶微分处理对细节有较强的相应,如细线和孤立点等。

3、二阶微分处理对灰度级阶梯变化会出现双响应,一个是斜坡开始时为正响应,一个为斜坡结束时为负响应。

拉普拉斯算子的由来:

根据以上的二阶微分公式,将点(x,y)带入以上公式中就可以得到一个在90度方向旋转上各向同性的拉普拉斯算子:

0  1    0                                                                                                                   1       1        1

1  -4   1     为了使旋转更加多元可以将四个角上的点也加入进来实现45度旋转同性: 1       -8       1

0   1   0                                                                                                                    1        1       1

拉普拉斯的应用强调图像中的灰度的突变以及降低灰度慢变化的区域。

一阶算子:

由于拉普拉斯为二阶算子,那么一阶算子可以根据一阶微分公式得来,不一样的地方在于,Robert提出了交叉差分的算法。这就是Roberts算子的由来其意思为:

ax = Z1 - Z4  ay = Z2 - Z3

即:

(0   1        (1  0

   -1   0)      0    -1) 

与平滑部分一样,由于偶数个数的算子并不好用,则使用三阶算子这就是Prewitt算子:

(-1     -1      -1           (1      0      -1

   0        0        0             1       0       -1

   1          1        1)        1       0       -1)

由于图像需要突出中心点,增加图像的丰富程度,可以给图像不同的权值,这也就是非常常用的Soble算子:

(-1     -2      -1           (1      0      -1

   0        0        0              2      0       -2

   1        2        1)          1       0       -1)


void ruihuaBianHuan::sobel()
{
	BYTE* p_data = getData();
	int width = getWidth();
	int height = getHeight();
	BYTE* temp1 = new BYTE[width*height];
	memcpy(temp1, p_data, width*height);
	BYTE* temp2 = new BYTE[width*height];
	memcpy(temp2, p_data, width*height);
	int tempMX, tempMY, tempH, tempW;
	float tempC;
	float templat[9];
	tempW = 3; tempH = 3; tempMX = 1; tempMY = 1; tempC = 1.0;//tempC为模板系数其大小主要控制亮度因为在模板运算完后才乘上tempC增大整个模板的值使总体亮度增加
	templat[0] = -1.0; templat[1] = -2.0; templat[2] = -1.0; templat[3] = 0.0; templat[4] = 0.0; templat[5] = 0.0;
	templat[6] = 1.0; templat[7] = 2.0; templat[8] = 1.0;
	this->templat(temp1, width, height, tempH, tempW, tempMX, tempMY, templat, tempC);
	templat[0] = -1.0; templat[1] = 0.0; templat[2] = 1.0; templat[3] = -2.0; templat[4] = 0.0; templat[5] = 2.0;
	templat[6] = -1.0; templat[7] = 0.0; templat[8] = 1.0;
	this->templat(temp2, width, height, tempH, tempW, tempMX, tempMY, templat, tempC);
	for(int j=0;j<height;j++)
		for (int i = 0; i < width; i++)
		{
			if (temp1[j*width + i] < temp2[j*width + i])
				temp1[j*width + i] = temp2[j*width + i];
		}
	memcpy(p_data, temp1, width*height);
	delete temp1;
	delete temp2;
}


2019-07-02 21:51:32 qq_37486501 阅读数 751

数字图像处理中的图像锐化

  1. 图像锐化的作用: 突出增强边缘轮廓细节
  2. 空间域锐化处理方法: (空间锐化滤波)
  • 梯度算法:(一阶差分)——景物边缘轮廓提取,
    (1): 正交梯度算法——水平垂直差分
    (2): Roberts梯度算法——交叉差分
    (3): Prewitt梯度算法——两侧做差
    (4): Sobel梯度算法——突出离他最近的

  • 拉普拉斯算法: (二阶差分)——细节上增强对比度,突出细节部分

2019-12-12 22:40:32 weixin_44225182 阅读数 206

一、实验名称

图像锐化

二、实验目的

1.熟悉MATLAB软件的使用。
2.掌握图像锐化的原理及数学运算。
3.于MATLAB环境下编程实现对图片锐化。

三、实验内容

    利用图像基于单方向梯度算子,Robert算子,Sobel算 子,Pritt算 子, Laplacian算子,多方向模板,LoG算子编写matlab增强程序;最后,显示边缘图像和锐化增强图像,并对这些仿真结果所呈现的边缘提取和增强效果进行对比分析。

四、实验仪器与设备

Win10 64位电脑
MATLAB2017a

五、实验原理

    1.Sobel算子是像素图像边缘检测中最重要的算子之一。在技术上,它是一个离散的一阶差分算子,用来计算图像亮度函数的一阶梯度之近似值。在图像的任何一点使用此算子,将会产生该点对应的梯度矢量或是其法矢量。
    2.Roberts边缘检测算子是一种利用局部差分算子寻找边缘的算子,Robert算子图像处理后结果边缘不是很平滑。经分析,由于Robert算子通常会在图像边缘附近的区域内 产生较宽的响应,故采用上述算子检测的边缘图像常需做细化处理,边缘定位的精度不是很高。
    3.Prewitt算子是一种一阶微分算子的边缘检测,利用像素点上下、左右邻点的灰度差,在边缘处达到极值检测边缘,去掉部分伪边缘,对噪声具有平滑作用 。其原理是在图像空间利用两个方向模板与图像进行邻域卷积来完成的,这两个方向模板一个检测水平边缘,一个检测垂直边缘。
    4. Laplacian算子是n维欧几里得空间中的一个二阶微分算子,定义为梯度grad()的散度div()。因此如果f是二阶 可微的实函数,则f的laplacian算子定义为:
        (1) f的拉普拉斯算子也是笛卡尔坐标系xi中的所有非混合二阶偏导数求和:
        (2) 作为一个二阶 微分算子,拉普拉斯算子把C函数映射到C函数,对于k ≥ 2。

六、实验过程及代码

Sobel算子

 I=imread('a3.jpg'); %读取图像
I1=rgb2gray(I); %将彩色图变成灰色图
subplot(131),imshow(I1),title('原图');

model=[-1,0,1;
       -2,0,2;
       -1,0,1];
[m,n]=size(I1);
I2=double(I1);

for i=2:m-1
    for j=2:n-1
        I2(i,j)=I1(i+1,j+1)+2*I1(i+1,j)+I1(i+1,j-1)-I1(i-1,j+1)-2*I1(i-1,j)-I1(i-1,j-1);
    end
end
subplot(132),
imshow(I2),title('边缘提取后的图像');
I2 = I2 + double(I1);
subplot(133),
imshow(uint8(I2)),title('锐化后的图像');

Robert算子

 I=imread('a3.jpg'); %读取图像
I1=rgb2gray(I); %将彩色图变成灰色图
subplot(131),imshow(I1),title('原图');
model=[0,-1;1,0];
[m,n]=size(I1);
I2=double(I1);
for i=2:m-1
    for j=2:n-1
        I2(i,j)=I1(i+1,j)-I1(i,j+1);
    end
end
subplot(132),imshow(I2),title('边缘提取后的图像');
I2 = I2 + double(I1);

subplot(133),
imshow(uint8(I2)),title('锐化后的图像');

Prewitt算子

 I=imread('a3.jpg');
I1=rgb2gray(I); %将彩色图变成灰色图
subplot(131);
imshow(I1),title('原图');
model=[-1,0,1;
-1,0,1;
-1,0,1];
[m,n]=size(I1);
I2=I1;
for i=2:m-1
for j=2:n-1
tem=I1(i-1:i+1,j-1:j+1);
tem=double(tem).*model;

I2(i,j)=sum(sum(tem));
end
end
subplot(132),
imshow(uint8(I2)),title('边缘提取后的图像');
I2=I2+I1;
subplot(133),
imshow(I2),title('图像锐化')

laplacian算子

I=imread('a3.jpg'); 
I1=mat2gray(I);%实现图像矩阵的归一化操作
[m,n]=size(I1);
newGrayPic=I1;%为保留图像的边缘一个像素
LaplacianNum=0;%经Laplacian算子计算得到的每个像素的值
LaplacianThreshold=0.2;%设定阈值
for j=2:m-1 %进行边界提取
    for k=2:n-1
        LaplacianNum=abs(4*I1(j,k)-I1(j-1,k)-I1(j+1,k)-I1(j,k+1)-I1(j,k-1));
        if(LaplacianNum > LaplacianThreshold)
            newGrayPic(j,k)=255;
        else
            newGrayPic(j,k)=0;
        end
    end
end
I2=rgb2gray(I); %将彩色图变成灰色图
subplot(131),imshow(I2),title('原图');
subplot(132),
imshow(newGrayPic);
title('Laplacian算子的处理结果')
t=I1+newGrayPic;
subplot(133),imshow(t),title('图像锐化后')

Log算子

 t=imread('a3.jpg');
t=rgb2gray(t);
[m,n]=size(t);
subplot(1,3,1),imshow(t),title('原图')
tt=t;
model=[0,0,1,0,0; 
 0,1,2,1,0;
1,2,-16,2,1;
0,0,1,0,0;
0,1,2,1,0;]


for i=3:m-2
for j=3:n-2
    tem=double(t(i-2:i+2,j-2:j+2)).*model;
    x=sum(sum(tem));
   tt(i,j)=x;
end
end

subplot(1,3,2),imshow(tt),title('log提取边缘后')
t_1=double(tt)+double(t);
subplot(1,3,3),imshow(uint8(t_1)),title('log锐化后')

七、实验结果与分析

Sobel算子
在这里插入图片描述
在这里插入图片描述
Robert算子

在这里插入图片描述
在这里插入图片描述

Prewitt算子

在这里插入图片描述
在这里插入图片描述

laplacian算子

在这里插入图片描述
在这里插入图片描述

Log算子
在这里插入图片描述
在这里插入图片描述
总结
    图像锐化(image sharpening)是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空间域处理和频域处理两类。图像锐化是为了突出图像上地物的边缘、轮廓,或某些线性目标要素的特征。这种滤波方法提高了地物边缘与周围像元之间的反差,因此也被称为边缘增强。我的理解:图像锐化就是通过使得图像的边缘更加突出,可以是原图与原图的高频部分叠加而成。
    Sobel算法与Priwitt算法的思路相同,属于同一类型,因此处理效果基本相同。Roberts算法的模板为2*2,提取信息较弱。单方向锐化经过处理之后,也可以对边界进行增强。Laplacian算子对噪声比较敏感,Laplacian算子有一个缺点是它对图像中的某些边缘产生双重响应。所以图像一般先经过平滑处理,通常把Laplacian算子和平滑算子结合起来生成一个新的模板-Log算子。

八、实验总结及心得体会

    通过此次实验,自己学习了图像锐化的几种算子。开始的时候,不懂每个算子的来源,后面看了老师的推导过程后,发现其实锐化就是先对图像进行差分(类似求导),再叠加到原图上。这里主要的问题就是对算子的差分原理的验证,然后在MATLAB上机过程中,没有注意到数据类型的限制,导致数据上溢。

更多

获取更多资料、代码,微信公众号:海轰Pro
回复 海轰 即可

图像处理——锐化

阅读数 1005

没有更多推荐了,返回首页