学习笔记(空间滤波器——锐化)

本文介绍了图像锐化的原理,重点讨论了图像灰度微分的一阶和二阶导数,强调了灰度二阶导数在确定图像边缘中的作用。拉普拉斯算子作为常用的锐化方法,通过减去图像灰度值的二阶导数来增强边缘。文章还提及了拉普拉斯算子的实现,并提供了C#程序示例。

空间滤波器——锐化

1 锐化原理

1.1 图像灰度微分的定义

为了描述图像的锐化,定义图像灰度的一阶微分图像灰度的二阶微分
图像灰度在坐标 xxx 的一阶微分:表示坐标 x 处相邻像素的灰度变化速度,其数学表达式为
∂f∂x=f(x+1)−f(x) \frac{\partial f }{\partial x} = f(x+1)-f(x) xf=f(x+1)f(x)
图像灰度在坐标 xxx 的二阶微分:表示坐标 x 处相邻像素的灰度变化加速度,其数学表达式为
∂2f∂x2=f(x+1)+f(x−1)−2f(x) \frac{\partial ^2 f}{\partial x^2} = f(x+1)+f(x-1)-2f(x) x22f=f(x+1)+f(x1)2f(x)
其中,xxx 表示坐标,f(x)f(x)f(x) 表示坐标 xxx 处的灰度值。

1.2 图像灰度的一阶微分和二阶微分

在图上取一条线段,假设线段包含10个点(坐标从x0x_0x0x9x_9x9),其对应灰度值如下图所示。
在这里插入图片描述

以 坐标 x4x_4x4 为例,坐标 x4x_4x4 的图像灰度一阶导数表示的是坐标 x4x_4x4 处相邻像素的灰度变化速度,即
从坐标 x4x_4x4 到下一个坐标 x5x_5x5 的灰度变化值

在这里插入图片描述

数学表达式为
∂f∂x∣x=x4=f(x5)−f(x4) \frac{\partial f }{\partial x} \bigg| _{x=x_4}= f(x_5)-f(x_4) xfx=x4=f(x5)f(x4)
依此关系计算所有点的一阶导数。需要说明的是,由于一阶导数是由当前点的灰度和当前点的下一个紧邻点的灰度计算产生的,最有一个点 x9x_9x9 没有一阶导数,因为它没有下一个紧邻点。
在这里插入图片描述

以 坐标 x4x_4x4 为例,坐标 x4x_4x4 的图像灰度二阶导数表示的是坐标 x4x_4x4 处相邻像素的灰度变化加速度,即图从坐标 x3x_3x3 到下一个坐标 x4x_4x4 的灰度一阶导数的变化值
在这里插入图片描述

数学表达式为
∂2f∂x2∣x=x4=∂f∂x∣x=x4−∂f∂x∣x=x3=[f(x5)−f(x4)]−[f(x4)−f(x3)]=f(x5)+f(x3)−2f(x4) \begin{aligned} \frac{\partial ^2f }{\partial x^2} \bigg| _{x=x_4}&=\frac{\partial f }{\partial x} \bigg| _{x=x_4}-\frac{\partial f }{\partial x} \bigg| _{x=x_3}\\ &=[f(x_5)-f(x_4)]-[f(x_4)-f(x_3)]\\ &= f(x_5)+f(x_3)-2 f(x_4) \end{aligned} x22fx=x4=xfx=x4xfx=x3=[f(x5)f(x4)][f(x4)f(x3)]=f(x5)+f(x3)2f(x4)

依此关系计算所有点的二阶导数。需要说明的是,由于二阶导数是由当前点的灰度、当前点的前一个紧邻点的灰度和当前点的下一个紧邻点的灰度计算产生的,第一个点 x0x_0x0 最后一个点 x9x_9x9 都没有二阶导数,因为第一个点 x0x_0x0 没有当前点的前一个紧邻点, 最后一个点 x9x_9x9 没有下一个紧邻点。

在这里插入图片描述

1.3 图像灰度微分的意义

观察一阶微分和二阶微分的图像可以得出以下结论:

  1. 图像灰度变化时,一阶导数不为零;
  2. 图像灰度匀速变化的起点和终点,二阶导数不为零;
  3. 当灰度值开始下降的时候,二阶导数为负数,当灰度值停止下降时,二阶导数为正数。(同理:当灰度值开始上升的时候,二阶导数为正数,当灰度值停止上升时,二阶导数为负数。)
  4. 如果存在灰度值的平稳-上升-平稳或者平稳-下降-平稳的过程,二阶导数就一定在 xxx 轴上下两侧都存在点。
    故常用灰度二阶微分确定图像边缘。

1.4 锐化

锐化的目的就是突出灰度的过度部分,即图像边缘。
为了突出图像边缘,图像边缘灰度值大的部分应该增大灰度值,令其更大,灰度值小的部分应该减小灰度值,令其更小。
应用拉普拉斯算子(二阶微分)进行图像锐化是比较常用的方法。该算法的依据是 1.3 节第 2 点和第 3 点,算法令图像所有位置的灰度值减去该位置灰度值的二阶导数。在边缘的起点和终点,小的灰度值会变得更小,大的灰度值会变得更大。在其他位置,灰度值的二阶导数为零,减法操作不会影响图像的灰度值。

1.5 拉普拉斯算子(二阶微分)

由于图像锐化所考虑的是 xxxyyy 两个方向。
yyy 方向位置固定不变,考虑 xxx 方向图像灰度的二阶导数,表达式为
∂2f∂x2=f(x+1,y)+f(x−1,y)−2f(x,y) \frac{\partial ^2 f}{\partial x^2} = f(x+1, y)+f(x-1,y)-2f(x,y) x22f=f(x+1,y)+f(x1,y)2f(x,y)
xxx 方向位置固定不变,考虑 yyy 方向图像灰度的二阶导数,表达式为
∂2f∂y2=f(x,y+1)+f(x,y−1)−2f(x,y) \frac{\partial ^2 f}{\partial y^2} = f(x, y+1)+f(x,y-1)-2f(x,y) y22f=f(x,y+1)+f(x,y1)2f(x,y)
同时考虑 xxxyyy 两个方向,图像灰度的二阶导数(也成为图像的拉普拉斯算子)表示为
∇2f=∂2f∂x2+∂2f∂y2=f(x+1,y)+f(x−1,y)−2f(x,y)+f(x,y+1)+f(x,y−1)−2f(x,y)=f(x+1,y)+f(x−1,y)+f(x,y+1)+f(x,y−1)−4f(x,y) \begin{aligned} \nabla ^2f&= \frac{\partial ^2 f}{\partial x^2} + \frac{\partial ^2 f}{\partial y^2}\\ &= f(x+1,y)+f(x-1,y)-2f(x,y)+ f(x,y+1)+f(x, y-1)-2f(x,y)\\ &= f(x+1,y)+f(x-1,y)+ f(x,y+1)+f(x, y-1)-4f(x,y) \end{aligned} 2f=x22f+y22f=f(x+1,y)+f(x1,y)2f(x,y)+f(x,y+1)+f(x,y1)2f(x,y)=f(x+1,y)+f(x1,y)+f(x,y+1)+f(x,y1)4f(x,y)
图像灰度变化除了在 xxxyyy 两个方向发生,在角线上也会发生,故完整的各向同性的拉普拉斯算子表示为

∇2f=f(x+1,y)+f(x−1,y)−2f(x,y)+f(x,y+1)+f(x,y−1)−2f(x,y)+f(x+1,y+1)+f(x−1,y−1)−2f(x,y)+f(x−,y+1)+f(x+1,y−1)−2f(x,y)=f(x+1,y)+f(x−1,y)+f(x,y+1)+f(x,y−1)+f(x+1,y+1)+f(x−1,y−1)+f(x−,y+1)+f(x+1,y−1)−8f(x,y) \begin{aligned} \nabla ^2f &= f(x+1,y)+f(x-1,y)-2f(x,y)\\ &+ f(x,y+1)+f(x, y-1)-2f(x,y)\\ &+ f(x+1,y+1)+f(x-1,y-1)-2f(x,y)\\ &+ f(x-,y+1)+f(x+1, y-1)-2f(x,y)\\ &= f(x+1,y)+f(x-1,y)+ f(x,y+1)+f(x, y-1)\\ &+ f(x+1,y+1)+f(x-1,y-1)+ f(x-,y+1)+f(x+1, y-1)-8f(x,y) \end{aligned} 2f=f(x+1,y)+f(x1,y)2f(x,y)+f(x,y+1)+f(x,y1)2f(x,y)+f(x+1,y+1)+f(x1,y1)2f(x,y+f(x,y+1)+f(x+1,y1)2f(x,y)=f(x+1,y)+f(x1,y)+f(x,y+1)+f(x,y1)+f(x+1,y+1)+f(x1,y1)+f(x,y+1)+f(x+1,y1)8f(x,y)

2 锐化实现

由各向同性的拉普拉斯算子容易获得,各向同性的拉普拉斯滤波器
在这里插入图片描述

2.1 程序(C#)

private byte[] Sharpen(byte[] dat, int width, int height)
        {
            int[] laplaceFilter = new int[dat.Length];
            byte[] result = new byte[dat.Length];

            for (int row = 1; row < height - 1; row++)
            {
                for (int column = 1; column < width - 1; column++)
                {
                    laplaceFilter[row * width + column] = (-8 * dat[row * width + column]                                                                    
                                                                    + dat[(row + 1) * width + column]
                                                                    + dat[(row - 1) * width + column]
                                                                    + dat[row * width + (column + 1)]
                                                                    + dat[row * width + (column - 1)]
                                                                    + dat[(row - 1) * width + (column - 1)]
                                                                    + dat[(row + 1) * width + (column + 1)]
                                                                    + dat[(row - 1) * width + (column + 1)]
                                                                    + dat[(row + 1) * width + (column - 1)]);
                    
                }                
            }

            for (int i = 0; i < laplaceFilter.Length; i++)
            {
                laplaceFilter[i] = (int)(dat[i] - laplaceFilter[i]);
                if (laplaceFilter[i] > 255)
                {
                    laplaceFilter[i] = 255;
                }
                else if (laplaceFilter[i] < 0)
                {
                    laplaceFilter[i] = 0;
                }
                result[i] = (byte)laplaceFilter[i];
            }

            return result;
        }

2.2 效果

图片来自影像园

参考文献

[1]: Rafael C. Gonzalez 数字图像处理(第三版) 电子工业出版社

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sleevefisher

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值