图像处理锐化

2018-09-11 23:11:38 helimin12345 阅读数 17829

图像锐化,是使图像边缘更清晰的一种图像处理方法,细节增强(detail enhancement)我理解也包含了图像锐化,常用的做法是提取图像的高频分量,将其叠加到原图上。图像高频分量的提取有两种做法,一种是用高通滤波器,得到高频分量,另一种是通过低通滤波,用原图减低频得以高频。

直接提取高频的方法有sobel算法、laplcian算子,sobel算子是图像的一阶导数,提取的是梯度信息,分水平和垂直两种,常常用来做边缘检测、方向判别,sobel算子在斜坡处不为0,因此会产生较粗的边缘。laplcian算子是图像的二阶导,在图像开始变化和结束变化的地方值不为0,渐变时结果为0,因此laplacian比sobel算子更适合做sharpen。
除了直接提取高频的方法外,我们也可以先提取低频,原图减去低频得到高频。这种方法称为非锐化掩模(unsharpen mask),我们常使用低通滤波器(高斯、双边)对图像进行滤波,这种方法滤波器很好控制(包括大小和强弱),从而可以控制高频分量的强弱。

使用UM方向做sharpen时,常常加入另外三个参数:跟滤波器相关的参数(高斯滤波器的半径和方差)、增强的阀值threshold、strength。

下面给出UM方法的三种实现:matlab、C和opencv。

Matlab:
Matlab提供了库函数imsharpen,该函数使用UM方法进行sharpen,low-pass filter为gaussian kernel。下面是我实现的UM代码。先将rgb转到ycbcr color space,对Y做sharpen,cb/cr不做处理(最好是使用Y的结果做补偿,这样偏色少),最后再进行ycbcr2rgb的转换。

clc;
clear;
close all;
imSrc = imread('D:\simuTest\picSimu\00_kodak_dataset\kodim05.png');
imSrcYcbcr = rgb2ycbcr(imSrc);
imSrcY = imSrcYcbcr(:,:,1);
[hei, wid] = size(imSrc(:,:,1));
size = 3;
sigma = 1;  %gauss standard deviation sigma, default is 1
amount = 1.5;
threshold = 15;
gaussFilter = fspecial('gaussian', [size, size], sigma);
imSrcY_lf = imfilter(imSrcY, gaussFilter, 'symmetric');
imSrcY_hf = imSrcY - imSrcY_lf;
imLabel = (imSrcY_hf > threshold);
imLabel = uint8(imLabel);
imDstY = uint8(imSrcY + amount * imSrcY_hf .* imLabel);
figure, imshow([imSrcY, imSrcY_lf, imSrcY_hf, imDstY]);
imSrcYcbcr(:,:,1) = imDstY;
imDst = ycbcr2rgb(uint8(imSrcYcbcr));
figure, imshow([imSrc, imDst]);

输入输出图像如下所示,左边为sharpen前图像,右边为sharpen后图像。
这里写图片描述

C代码:
C有着matlab无法比拟的速度优势。下面是我用C写的UM代码,Srcp为输入源图像,dstp为输出的锐化后的图像,sharpen_coef为定点化后的增强系数(0-64),threshold为增强的阀值(高频分量大于该阈值,才做增强,典型值为15),低通滤波器模板为{{1,2,1},{2,4,2},{1,2,1}}的高斯核。

void imageSharpenUM(uint8_t* srcp, uint8_t* dstp, int src_width, int src_height, int src_pitch, int sharpen_coef, int threshold)
{
    //int gaussianMat[3][3] = {{6, 43, 6}, {43, 317, 43}, {6, 43, 6}};
    int gaussianMat[3][3] = {{1, 2, 1}, {2, 4, 2}, {1, 2, 1}};      // 定义低通滤波器
    int dstBlur;        // 低频图像
    int dstTexture;     // 细节图像
    int dstDetail;      // 细节加权重
    int src11 = 0;      // 11
    int src12 = 0;      // 12
    int src13 = 0;      // 13
    int src21 = 0;      // 21
    int src22 = 0;      // 22
    int src23 = 0;      // 23
    int src31 = 0;      // 31
    int src32 = 0;      // 32
    int src33 = 0;      // 33

    for(int ver = 0; ver < src_height; ++ver){
        for(int hor = 0; hor < src_width; ++hor){
            if(ver==0 || ver==(src_height-1) || hor==0 || hor==(src_width-1)){
                dstp[ver * src_pitch + hor] = srcp[ver * src_pitch + hor];
            } else {
                src11 = (int)srcp[(ver - 1) * src_pitch + hor - 1] * gaussianMat[0][0];
                src12 = (int)srcp[(ver - 1) * src_pitch + hor] * gaussianMat[0][1];
                src13 = (int)srcp[(ver - 1) * src_pitch + hor + 1] * gaussianMat[0][2];

                src21 = (int)srcp[ver * src_pitch + hor - 1] * gaussianMat[1][0];
                src22 = (int)srcp[ver * src_pitch + hor] * gaussianMat[1][1];
                src23 = (int)srcp[ver * src_pitch + hor + 1] * gaussianMat[1][2];

                src31 = (int)srcp[(ver + 1) * src_pitch + hor - 1] * gaussianMat[2][0];
                src32 = (int)srcp[(ver + 1) * src_pitch + hor] * gaussianMat[2][1];
                src33 = (int)srcp[(ver + 1) * src_pitch + hor + 1] * gaussianMat[2][2];

                dstBlur = (src11 + src12 + src13 + src21 + src22 + src23 + src31 + src32 + src33) >> 4;
                dstTexture = clip3(srcp[ver * src_pitch + hor] - dstBlur, 0, 255);
                if(dstTexture > threshold) {
                    dstDetail = (dstTexture * sharpen_coef) >> 4;
                    dstp[ver * src_pitch + hor] = clip3((int)srcp[ver * src_pitch + hor] + dstDetail, 0, 255);
                } else {
                    dstp[ver * src_pitch + hor] = srcp[ver * src_pitch + hor];
                }
            }
        }
    }
}

使用下面函数来调用sharpenUM,输入输出图像如下所示,上图是输入图像,下图是锐化后的输出图像。

imDst = sharpenUM(imSrc, 15, 2);

这里写图片描述
这里写图片描述

硬件实现时往往使用LUT来做,根据不同的strength及threshold、偏好设计好LUT,使用高频图像进行查表,将查表的结果叠加到原图上。

参考:
[1] matlab -imsharpen
[2] 数字图像处理,岗萨雷斯

2019-08-09 13:16:32 baishuiniyaonulia 阅读数 6508

1. 图像锐化

图像锐化与图像平滑是相反的操作,锐化是通过增强高频分量来减少图像中的模糊,增强图像细节边缘和轮廓,增强灰度反差,便于后期对目标的识别和处理。锐化处理在增强图像边缘的同时也增加了图像的噪声。方法通常有微分法高通滤波法

1.1. 图像细节的灰度变化特性

取图像中的某一行作为扫描行,其灰度变化曲线为:
在这里插入图片描述
对该灰度变化曲线进行微分,得到一阶微分曲线和二阶微分曲线:
在这里插入图片描述
由图像的灰度变化曲线及其一阶微分和二阶微分可以总结出三种典型的灰度截面特征

阶跃型 细线型 斜坡渐变型
灰度变化曲线 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
一阶微分 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述
二阶微分 在这里插入图片描述 在这里插入图片描述 在这里插入图片描述

2. 锐化处理方法

2.1. 微分法

2.1.1. 梯度法

梯度的方向是图像中最大变化率的方向,梯度的幅度比例于相邻像素的灰度级差值

对图像F(x,y)F(x,y),在点(x,y)(x,y)处的梯度定义为矢量:F(x,y)=[FxFy]\nabla F(x,y)=\begin{bmatrix} \frac{\partial F}{\partial x} \\ \\ \frac{\partial F}{\partial y} \\ \end{bmatrix}其幅度(模)为: F(x,y) =(Fx)2+(Fy)2|\ \nabla F(x,y)\ |=\sqrt{( \frac{\partial F}{\partial x})^2+( \frac{\partial F}{\partial y})^2}在进行图像处理时所称的梯度通常是指梯度的模

对于离散图像,一般用邻近相差的差分法来代替微分:
在这里插入图片描述
F(x,y)= [F(x,y)F(x+1,y)]2+[F(x,y)F(x,y+1)]2  [F(x,y)F(x+1,y)] + [F(x,y)F(x,y+1)]2 \begin{aligned} \nabla F(x,y) & = \sqrt{|\ [F(x,y)-F(x+1, y)]^2 + [F(x,y)-F(x,y+1)]^2\ |} \\ & \approx |\ [F(x,y)-F(x+1, y)]\ | + |\ [F(x,y)-F(x,y+1)]^2\ | \\ \end{aligned}
有了梯度F(x,y)\nabla F(x,y)之后就可以根据梯度得到锐化结果(输出),这里介绍五种确定锐化输出G(x,y)G(x,y)的方法

2.1.1.1. 直接以梯度代替锐化输出

G(x,y)=F(x,y)G(x,y)=\nabla F(x,y)该方法简单,但是在图像均匀的区域由于梯度很小,会导致锐化输出图像整体偏暗

2.1.1.2. 输出阈值判断

G(x,y)={F(x,y),F(x,y)>TF(x,y),otherwiseG(x,y) = \begin{cases} \nabla F(x,y), & \nabla F(x,y)>T \\ F(x,y), & otherwise \end{cases}该方法不会破坏图像背景,同时又可以进行一定程度的图像锐化

2.1.1.3. 为边缘规定一个特定的灰度级

G(x,y)={Lα,F(x,y)>TF(x,y),otherwiseG(x,y) = \begin{cases} L_\alpha, & \nabla F(x,y)>T \\ F(x,y), & otherwise \end{cases}

2.1.1.4. 为背景规定特定的灰度级

G(x,y)={F(x,y),F(x,y)>TLβ,otherwiseG(x,y) = \begin{cases} \nabla F(x,y), & \nabla F(x,y)>T \\ L_\beta, & otherwise \end{cases}

2.1.1.5. 二值化图像

G(x,y)={Lα,F(x,y)>TLβ,otherwiseG(x,y) = \begin{cases} L_\alpha, & \nabla F(x,y)>T \\ L_\beta, & otherwise \end{cases}

2.2. 罗伯特梯度算子法

Roberts梯度算子法算法简单,无方向性,采用对角相差的差分法来代替微分:
在这里插入图片描述
F(x,y)= [F(x,y)F(x+1,y+1)]2+[F(x+1,y)F(x,y+1)]2  [F(x,y)F(x+1,y+1)] + [F(x+1,y)F(x,y+1)]2 \begin{aligned} \nabla F(x,y) & = \sqrt{|\ [F(x,y)-F(x+1, y+1)]^2 + [F(x+1,y)-F(x,y+1)]^2\ |} \\ & \approx |\ [F(x,y)-F(x+1, y+1)]\ | + |\ [F(x+1,y)-F(x,y+1)]^2\ | \\ \end{aligned}

2.3. 拉普拉斯算子法

Laplacian算法是线性二次微分算子,与梯度算子一样具有旋转不变性,从而满足了不同方向的图像边缘锐化要求,其获得的边界比较细,包括较多的细节信息,但边界不清晰

Laplacian算子:2F(x,y)=2F(x,y)x2+2F(x,y)y2\nabla^2 F(x,y)=\frac{\partial^2 F(x,y)}{\partial x^2}+\frac{\partial^2 F(x,y)}{\partial y^2}其离散形式为:2F(x,y)={ [F(x+1,y)F(x,y)][F(x,y)F(x1,y)] }+{ [F(x,y+1)F(x,y)][F(x,y)F(x,y1)] }=F(x+1,y)+F(x1,y)+F(x,y+1)+F(x,y1)4F(x,y)\begin{aligned} \nabla^2 F(x,y) & = \{\ [F(x+1,y)-F(x,y)]-[F(x,y)-F(x-1,y)]\ \}+\{\ [F(x,y+1)-F(x,y)]-[F(x,y)-F(x,y-1)]\ \} \\ & = F(x+1,y)+F(x-1,y)+F(x,y+1)+F(x,y-1)-4F(x,y) \\ \end{aligned}可以看出,Laplacian算子就是其4倍中心元素值与其领域值和之差的绝对值,也可表达为中心元素与其领域内元素和均值负5倍的绝对值2F(x,y)=5{ F(x,y)15[F(x1,y)+F(x,y1)+F(x,y)+F(x,y+1)+F(x+1,y+1)] }\nabla^2 F(x,y)=|-5\{\ F(x,y)-\frac{1}{5}[F(x-1, y)+F(x, y-1)+F(x,y)+F(x,y+1)+F(x+1,y+1)]\ \}|

使用Laplacian算子进行锐化时,其锐化输出G(x,y)G(x,y)为:G(x,y)=F(x,y)2F(x,y)G(x,y)=F(x,y)-\nabla^2F(x,y)

常用的三种Laplacian算子:
[010141010]      [111181111]      [121242121]\begin{bmatrix} 0 & -1 & 0 \\ -1 & 4 & -1 \\ 0 & -1 & 0 \\ \end{bmatrix}\ \ \ \ \ \ \begin{bmatrix} -1 & -1 & -1 \\ -1 & 8 & -1 \\ -1 & -1 & -1 \\ \end{bmatrix}\ \ \ \ \ \ \begin{bmatrix} 1 & -2 & 1 \\ -2 & 4 & -2 \\ 1 & -2 & 1 \\ \end{bmatrix}

在图像处理中,为了改善锐化的效果,也可以脱离微分计算原理,在原有算子的基础之上对模板系数进行改变,得到Laplacian变形算子

2.4. 高通滤波法

图像的边缘与频域中的高频分量相对应,高通滤波器可以抑制低频分量,从而达到图像锐化的目的

建立在离散卷积基础上的空域高通滤波关系式为:g(μ,ν)=xyF(x,y)H(μx+1,νy+1)g(\mu,\nu)=\sum_{x}^{}\sum_{y}^{}F(x,y)H(\mu-x+1,\nu-y+1)其中H(μx+1,νy+1)H(\mu-x+1,\nu-y+1)被称作冲激响应

常用的五种归一化冲激响应阵列:
H1=[010151010]      H2=[111191111]      H3=[121252121]H_1=\begin{bmatrix} 0 & -1 & 0 \\ -1 & 5 & -1 \\ 0 & -1 & 0 \\ \end{bmatrix}\ \ \ \ \ \ H_2=\begin{bmatrix} -1 & -1 & -1 \\ -1 & 9 & -1 \\ -1 & -1 & -1 \\ \end{bmatrix}\ \ \ \ \ \ H_3=\begin{bmatrix} 1 & -2 & 1 \\ -2 & 5 & -2 \\ 1 & -2 & 1 \\ \end{bmatrix}H4=17[0202192020]      H5=12[212161212]H_4=\frac{1}{7}\begin{bmatrix} 0 & -2 & 0 \\ -2 & 19 & -2 \\ 0 & -2 & 0 \\ \end{bmatrix}\ \ \ \ \ \ H_5=\frac{1}{2}\begin{bmatrix} -2 & -1 & -2 \\ -1 & 6 & -1 \\ -2 & -1 & -2 \\ \end{bmatrix}

2.5. 模板匹配法

将具有8个方向、大小为3×3的模板顺序作用于同一图像窗口,并对结果进行排序,将最大的结果值会加权平均值作为窗口中心元素的锐化进行输出。

模板匹配法除了能增强图像边缘外还具有平滑噪声的优点,总体上效果优于梯度法

下面介绍两种模板匹配算子:

2.5.1. Sobel算子

在这里插入图片描述
Sobel算子能够锐化的边缘信息较强,其运算定义为:g(x,y)=Vx+Vyg(x,y)=|V_x|+|V_y|其中:
Vx=[f(x1,y1)+2f(x1,y)+f(x1,y+1)][f(x+1,y1)+2f(x+1,y)+f(x+1,y+1)]V_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)]Vx=[f(x1,y1)+2f(x,y1)+f(x+1,y1)][f(x1,y+1)+2f(x,y+1)+f(x+1,y+1)]V_x=[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)]

2.5.2. Prewitt算子

Prewitt算子有一定的抗干扰性,图像效果比较干净。其有8个方向,分别对应8个模板:
[111121111]      [111121111]      [111121111]      [111121111]\uparrow:\begin{bmatrix} 1 & 1 & 1 \\ 1 & -2 & 1 \\ -1 & -1 & -1 \\ \end{bmatrix}\ \ \ \ \ \ \nearrow:\begin{bmatrix} 1 & 1 & 1 \\ -1 & -2 & 1 \\ -1 & -1 & 1 \\ \end{bmatrix}\ \ \ \ \ \ \rightarrow:\begin{bmatrix} -1 & 1 & 1 \\ -1 & -2 & 1 \\ -1 & 1 & 1 \\ \end{bmatrix}\ \ \ \ \ \ \searrow:\begin{bmatrix} -1 & -1 & 1 \\ -1 & -2 & 1 \\ 1 & 1 & 1 \\ \end{bmatrix}[111121111]      [111121111]      [111121111]      [111121111]\downarrow:\begin{bmatrix} -1 & -1 & -1 \\ 1 & -2 & 1 \\ 1 & 1 & 1 \\ \end{bmatrix}\ \ \ \ \ \ \swarrow:\begin{bmatrix} 1 & -1 & -1 \\ 1 & -2 & -1 \\ 1 & 1 & 1 \\ \end{bmatrix}\ \ \ \ \ \ \leftarrow:\begin{bmatrix} 1 & 1 & -1 \\ 1 & -2 & -1 \\ 1 & 1 & -1 \\ \end{bmatrix}\ \ \ \ \ \ \nwarrow:\begin{bmatrix} 1 & 1 & 1 \\ 1 & -2 & -1 \\ 1 & -1 & -1 \\ \end{bmatrix}

3. 一些边缘检测的经验

  1. 突变型细节,通过一阶微分的极大值点,二阶微分的零点可以检测出来
  2. 细线型细节,通过一阶微分的零点,二阶微分的极小值点可以检测出来
  3. 渐变型细节,一般情况下突变幅度小、定位难,不易检测,但二阶微分的信息比一阶微分多,需进行综合考虑

边缘信息具有方向性,不同的锐化/边缘检测算子也可能具有方向性,因此同一个算子对不同的图像检测的效果可能不同,应对不同图像使用不同的算子进行检测

2019-09-20 00:02:19 weixin_44225182 阅读数 5939

图像锐化

概念:
图像锐化(image sharpening)是补偿图像的轮廓,增强图像的边缘及灰度跳变的部分,使图像变得清晰,分为空间域处理和频域处理两类。图像锐化是为了突出图像上地物的边缘、轮廓,或某些线性目标要素的特征。这种滤波方法提高了地物边缘与周围像元之间的反差,因此也被称为边缘增强。

我的理解:
图像锐化就是通过使得图像的边缘更加突出,可以是原图与原图的高频部分叠加而成。

Sobel算子

 I=imread('a2.jpg'); %读取图像
I1=rgb2gray(I); %将彩色图变成灰色图
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
figure,
imshow(I2),title('边缘提取后的图像');
I2 = I2 + double(I1);
figure,
imshow(uint8(I2)),title('锐化后的图像');

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

Robert算子

 I=imread('a2.jpg'); %读取图像
I1=rgb2gray(I); %将彩色图变成灰色图
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
figure,imshow(I2),title('边缘提取后的图像');
I2 = I2 + double(I1);

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

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

Prewitt算子

 I=imread('a2.jpg'); 
I1=rgb2gray(I); %将彩色图变成灰色图
subplot(1,2,1);
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).*double(model);
      
        I2(i,j)=sum(sum(tem));
          
         end
end

figure,
imshow(uint8(I2)),title('边缘提取后的图像');

效果图
在这里插入图片描述
laplacian算子

 I=imread('C:\Users\LiCongliang\Desktop\数字图像处理\数字图像处理第五次作业\tea.png'); 
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); %将彩色图变成灰色图
imshow(I2),title('原图');
figure,
imshow(newGrayPic);
title('Laplacian算子的处理结果')

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

更多

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

2018-09-14 10:10:52 weixin_41225068 阅读数 15080

本文内容构成:

       1、图像锐化和边缘检测的基本概念,微分梯度已经差分的定义

       2、锐化和边缘检测的像素处理方式(3种)

       3、单方向一阶微分锐化,包括:

             水平方向

             垂直方向

             Kirsch算子

        4、无方向微分锐化,包括:

             Roberts算子

             Sobel算子

             Prewitt算子

             Laplacian算子(二阶微分)

             LOG算子(二阶微分

        5、二阶微分

        6、实验结果对比

 

        在图像增强过程中,通常利用各类图像平滑算法消除噪声,图像的常见噪声主要有加性噪声、乘性噪声和量化噪声等。一般来说,图像的能量主要集中在其低频部分,噪声所在的频段主要在高频段,同时图像边缘信息也主要集中在其高频部分。这将导致原始图像在平滑处理之后,图像边缘和图像轮廓模糊的情况出现(平滑可以认为是去除噪声,这样也就模糊了图像的边缘信息)。为了减少这类不利效果的影响,就需要利用图像锐化技术,使图像的边缘变得清晰。图像锐化处理的目的是为了使图像的边缘、轮廓线以及图像的细节变得清晰,经过平滑的图像变得模糊的根本原因是因为图像受到了平均或积分运算,因此可以对其进行逆运算(如微分运算)就可以使图像变得清晰。微分运算是求信号的变化率,由傅立叶变换的微分性质可知,微分运算具有较强高频分量作用。从频率域来考虑,图像模糊的实质是因为其高频分量被衰减,因此可以用高通滤波器来使图像清晰。但要注意能够进行锐化处理的图像必须有较高的性噪比,否则锐化后图像性噪比反而更低,从而使得噪声增加的比信号还要多,因此一般是先去除或减轻噪声后再进行锐化处理

       针对平均或积分运算使图像模糊,可逆行其道而采取微分运算:使用高通滤波器优化高频分量,抑制低频分量,提高图像边界清晰度等。

       图像锐化的方法分为高通滤波和空域微分法。图像的边缘或线条的细节(边缘)部分 与图像频谱的高频分量相对应,因此采用高通滤波让高频分量顺利通过,并适当抑制中低频分量,是图像的细节变得清楚,实现图像的锐化,由于高通滤波我们在前面频域滤波已经讲过,所以这里主要讲空域的方法——微分法。

       边缘是指图象中灰度发生急剧变化的区域。图象灰度的变化情况可以用灰度分布的梯度来反映,给定连续图象f(x,y),其方向导数在边缘法线方向上取得局部最大值。图象中一点的边缘被定义为一个矢量,模为当前点最人的方向导数,方向为该角度代表的方向。通常我们只考虑其模,而不关心方向。

 

       一阶微分运算一阶微分主要指梯度模运算,图像的梯度模值包含了边界及细节信息。梯度模算子用于计算梯度模值,通常认为它是边界提取算子,具有极值性、位移不变性和旋转不变性。

图像在点处的梯度 定义为一个二维列矢量:

梯度大的幅值即模值,为:

 

 

梯度的方向在 最大变化率方向上,方向角可表示为:

        对于离散函数 也有相应的概念和公式,只是用差分代替微分。差分可取为后向差分,前向差分。

在x,y方向上的一阶向后差分分别定义为:

 梯度定义为:

 其模和方向分别为:


 

        在实际应用中,梯度的模还有很多近似式,如使用x,y方向上差分绝对值替代模来度量

梯度的模(幅值)就是 最大变化率方向的单位距离所增加的量。由梯度的计算可知,在图像灰度变化较大的边沿区域其梯度值大,在灰度变化平缓的区域梯度值较小,而在灰度均匀的区域其梯度值为零。我们根据得到的梯度值来返回像素的值,如将梯度值大的像素设置成白色,梯度值小的设置为黑色,这样就可以将边缘提取出来了,或者是加强梯度值大的像素灰度值就可以突出细节了达到了锐化的目的。    

 

 

       根据梯度值,进而对像素的处理一般有三种方式:锐化是要突出细节(边界),所以要对边缘的像素加强(比如直接用梯度值作为像素的灰度或者RGB的分量),而边缘检测只要根据设置的阀值,超过阀值的像素灰度设为0,否则设为255。          

 1)辅以阀值判断    设T为阀值,像素的梯度值大于T,则像素的灰度(或者RGB的分量)加上某一个值(如100),加上某一个值(如100)像素的灰度值(或RGB的分量值)后若大于255,取255

   

 

 2)设以某一特定值     设t为阀值,像素的梯度值大于T,则像素的灰度(或者RGB的分量)设置为某一定值La    

                                                             

 3)二值化图像     设T为阀值,像素的梯度值大于T,则像素的灰度(或者RGB的分量)设置为255,否则设置为0     


                                                                 

 

       根据图像边界(细节,边缘)的拓扑结构,一阶微分锐化具体又分为单方向的一阶微分锐化和无方向的微分锐化          

单方向的一阶锐化是指对某个特定方向上的边缘(细节)信息的进行加强。最简单的单方向一阶锐化就是水平方向与垂直方向上的锐化。        

水平方向的锐化非常简单,通过一个可以检测出水平方向上的像素值的变化模板来实现。


                                                              
 垂直方向只需要将方向改变下就可以得到:
                                                                           

Kirsch算子

        Kirsch算子采用8个模板对图像上的每一个像素点进行卷积求导数,这8个模板代表8个方向,对图像上的8个特定边缘方向作出最大响应,运算(与3*3像素加权之和,就是对应位置相乘后求和)中取最大值作为图像的边缘输出。下面是8个模板:

                                                                                               

 

       问题:单方向锐化的计算结果中出现了小于零的像素值?

       方法1:整体加一个正整数,以保证所有的像素值均为正。比如+128,还有<0的则视为0,若有>255视为255处理,这样做的结果是:可以获得类似浮雕的效果。

       方法2:将所有的像素值取绝对值。这样做的结果是,可以获得对边缘的有方向提取。

 

无方向一阶锐化问题的提出                  

       前面的锐化处理结果对于人工设计制造的具有矩形特征物体(例如:楼房、汉字等)的边缘的提取很有效。但是,对于不规则形状(如:人物)的边缘提取,则存在信息的缺损。

为了解决上面的问题,就希望提出对任何方向上的边缘信息均敏感的锐化算法。因为这类锐化方法要求对边缘的方向没有选择,所有称为无方向的锐化算法。

双方向一次微分运算,直接以梯度值代替

       理论基础:对灰度图像f在纵方向和横方向两个方向进行微分。该算法是同时增强水平和垂直方向的边缘。利用双方向一次微分运算,算出梯度后让梯度值赋给该点的灰度值。

数学表达式为:

G(i,j)=sqrt{[f(i,j)-f(i,j-1)]*[f(i,j)-f(i,j-1)]+[f(i,j)-f(i-1,j)]*[f(i,j)-f(i-1,j)]}

或G(i,j)=|f(i,j)-f(i,j-1)|+|f(i,j)-f(i-1,j)|

 

边缘检测

       

       边缘检测算子检查每个像素的领域并对灰度变化率进行量化,通常也包括方向的确定。大多数是基于方向当属模板求卷积的方法。

将所有的边缘模板逐一作用于图像中的每一个像素,产生最大输出值的边缘模板方向表示该点边缘的方向,如果所有方向上的边缘模板接近于零,该点处没有边缘;如果所有方向上的边缘模板输出值都近似相等,没有可靠边缘方向   

                                                                            

卷积
                                                                        

卷积可以简单的看成加权求和的过程。

下面分别对Roberts算子,Sobel算子,Prewitt算子,Laplacian算子介绍:

 

(1)无方向一阶锐化——交叉微分

交叉微分算子(Robert算子)计算公式如下:

                                                                                

特点:算法简单

 

(2)无方向一阶锐化——Sobel锐化

Sobel锐化计算公式如下:

                                                                                                 

Sobel边缘算子的卷积和如上图所示,图像中的每个像素都用这两个核做卷积。Sobel算子认为邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同。一般来说,距离越大,产生的影响越小。这两个核分别对垂直边缘和水平边缘响应最大,两个卷积的最大值作为该点的输出位。运算结果是一幅边缘幅度图像。

 特点:锐化的边缘信息较强

 

(3)无方向一阶锐化——Priwitt锐化                                                                             

Priwitt锐化计算公式如下:

Prewitt算子在一个方向求微分,而在另一个方向求平均,因而对噪声相对不敏感,有抑制噪声作用。但是像素平均相当于对图像的低通滤波,所以Prewitt算子对边缘的定位不如Roberts算子。

特点:与Sobel相比,有一定的抗干扰性,图像效果比较干净。

 

几种方法的效果比较

       Sobel算法与Priwitt算法的思路相同,属于同一类型,因此处理效果基本相同。

       Roberts算法的模板为2*2,提取信息较弱。

       单方向锐化经过处理之后,也可以对边界进行增强。

 

二阶微分锐化——问题的提出

                                                                                       

       1)对应突变形的细节,通过一阶微分的极值点,二阶微分的过0点均可以检测处理

       2)对应细线行的细节,通过一阶微分的过0点,二阶微分的极小值点均可以检测处理。

       3)对应渐变的细节,一边情况很难检测,但二阶微分的信息比一阶微分的信息略多。

二阶微分锐化——算法推导


                                                                                
 
                                             

 

将上面推导的公式写成模板系数形式,即为Laplacian算子:     

       Laplacian算子利用二阶导数信息,具有各向同性,即与坐标轴方向无关,坐标轴旋转后梯度结果不变。使得图像经过二阶微分后,在边缘处产生一个陡峭的零交叉点,根据这个对零交叉点判断边缘。                                                                    

Laplacian变形算子

                                                                  

为了改善锐化效果,可以脱离微分的计算原理,在原有的算子基础上,对模板系数进行改变,获得Laplacian变形算子:

其中H2是在H1的基础上在考虑45°和135°方向的结果

                                                            

Laplacian算子对噪声比较敏感,Laplacian算子有一个缺点是它对图像中的某些边缘产生双重响应。所以图像一般先经过平滑处理,通常把Laplacian算子和平滑算子结合起来生成一个新的模板。

Log边缘算子

现在介绍一种利用图像强度二阶导数的零交叉点来求边缘点的算法对噪声十分敏感,所以在边缘增强前滤除噪声。为此,马尔(Marr)和希尔得勒斯(Hildreth)根据人类视觉特性提出了一种边缘检测的方法,该方法将高斯滤波和拉普拉斯检测算子结合在一起进行边缘检测的方法,故称为Log(Laplacian of Gassian )算法。也称之为拉普拉斯高斯算法。该算法的主要思路和步骤如下:

(1)滤波:首先对图像f(x,y)进行平滑滤波,其滤波函数根据人类视觉特性选为高斯函数,即:

 

其中,G(x,y)是一个圆对称函数,其平滑的作用是可通过  来控制的。将图像 G(x,y)与f(x,y) 进行卷积,可以得到一个平滑的图像,即:

(2)增强:对平滑图像g(x,y) 进行拉普拉斯运算,即:

                                                                   

(3)检测:边缘检测判据是二阶导数的零交叉点(即h(x,y)=0  的点)并对应一阶导数的较大峰值。

 这种方法的特点是图像首先与高斯滤波器进行卷积,这样既平滑了图像又降低了噪声,孤立的噪声点和较小的结构组织将被滤除。但是由于平滑会造成图像边缘的延伸,因此边缘检测器只考虑那些具有局部梯度最大值的点为边缘点。这一点可以用二阶导数的零交叉点来实现。拉普拉斯函数用二维二阶导数的近似,是因为它是一种无方向算子。在实际应用中为了避免检测出非显著边缘,应选择一阶导数大于某一阈值的零交叉点作为边缘点。由于对平滑图像g(x,y) 进行拉普拉斯运算可等效为G(x,y) 的拉普拉斯运算与f(x,y) 的卷积,故上式变为:

                                                               

式中  称为LOG滤波器,其为:

                                                     
这样就有两种方法求图像边缘:

①先求图像与高斯滤波器的卷积,再求卷积的拉普拉斯的变换,然后再进行过零判断。

②求高斯滤波器的拉普拉斯的变换,再求与图像的卷积,然后再进行过零判断。

这两种方法在数学上是等价的。上式就是马尔和希尔得勒斯提出的边缘检测算子(简称M-H算子),由于LOG滤波器在(x,y) 空间中的图形与墨西哥草帽形状相似,所以又称为墨西哥草帽算子。

拉普拉斯算子对图像中的嗓声相当敏感。而且它常产生双像素宽的边缘,也不能提供边缘方向的信息。高斯-拉普拉斯算子是效果较好的边沿检测器,常用的5×5模板的高斯--拉普拉斯算子如图2.7所示:

                                                                                    

                                                                                            高斯—拉普拉斯算子

高斯--拉普拉斯算子把高斯平滑滤波器和拉普拉斯锐化滤波器结合起来,先平化掉噪声,再进行边缘检测,所以效果更好。

程序的主要思想就是将每个像素的灰度值或RGB的分量与算子矩阵求卷积(用加权求和代替),只是锐化是要突出细节(边界),所以要对边缘的像素加强(比如直接用梯度值作为像素的灰度或者RGB的分量),而边缘检测只要根据设置的阀值,超过阀值的像素灰度设为0,否则设为255。

查看实验效果:


 

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

图像边缘锐化基本方法

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

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

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

用差分定义一元函数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 &amp; -4 &amp; -4 &amp; -4 &amp; -2 \\ -4 &amp; 0&amp; 8&amp; 0&amp; -4 \\ -4 &amp; 8&amp; 24^*&amp; 8&amp; -4 \\ -4 &amp; 0&amp; 8&amp; 0&amp; -4 \\ -2 &amp; -4 &amp; -4 &amp; -4 &amp; -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算子抗噪声差的缺点,同时页平滑掉比较尖锐的边缘,尖锐边缘无法被检测到。

图像处理——锐化

阅读数 1086