数字图像处理-7-图像的梯度锐化算法

文章目录

  • [1. 门限梯度锐化](#1. 门限梯度锐化)
  • [2. 梯度二值化](#2. 梯度二值化)
  • [3. 固定值梯度锐化](#3. 固定值梯度锐化)

图像梯度是灰度值在空间上的变化速率。平滑区域梯度小(灰度均匀),边缘区域梯度大(灰度急变)。
其实这种方法在前面也说过,计算公式如下: 一阶差分近似

G(x, y) = sqrt( (f(x,y) - f(x-1,y))² + (f(x,y) - f(x,y-1))² )

梯度锐化根据梯度大小采取三种不同的增强策略:

    1. 门限锐化 --- 梯度大则增加固定亮度 +100(可动态调整),边缘变亮但保留纹理
    1. 二值化 --- 根据梯度输出纯黑/白二值图,清晰显示边缘轮廓
    1. 固定锐化 --- 梯度大则强制输出白色,否则保留原灰度值

下面是一阶差分近似梯度的python代码,在下面三种方法中都会用到, 原理简单.就是计算上下,左右 的梯度值, 然后求各个维度差分平方的和.

这里说明下下面代码片段中默认阈值(GRADIENT_THRESHOLD=30)

python 复制代码
def _compute_gradient(img, x, y):
    """
    计算像素 (x, y) 的梯度幅度(使用左邻和上邻的一阶差分)。

    公式: G = sqrt( dx² + dy² )
      dx = f(x, y) - f(x-1, y)
      dy = f(x, y) - f(x, y-1)
    """
    curr = img.get_pixel(x,     y)
    left = img.get_pixel(x - 1, y)
    up   = img.get_pixel(x,     y - 1)
    dx = curr - left
    dy = curr - up
    return math.sqrt(dx * dx + dy * dy)

1. 门限梯度锐化

  • 原理:

    对边缘区域(梯度≥阈值)叠加固定亮度 100(默认),使边缘在视觉上更突出;

    平坦区域保持原值,不破坏背景纹理细节。

  • 处理方法:

    设置阈值threhold, 如果超过了阈值,则在当前灰度值上面叠加指定的灰度值,让图像边缘更突出

    复制代码
    G >= threshold → output = min(G + 100, 255)   [边缘增亮]
    G <  threshold → output = 原始像素值            [平坦区域不变]
  • python代码

python 复制代码
def threshold_enhance(img, threshold=GRADIENT_THRESHOLD):
    result = img.clone()

    for y in range(1, img.height):
        for x in range(1, img.width):
            g = _compute_gradient(img, x, y)
            if g >= threshold:
                result.set_pixel(x, y, min(255, g + 100))
            # g < threshold 时 clone 的原值保持不变

    return result
  • 效果图

2. 梯度二值化

  • 原理:

    对梯度图像进行全局阈值分割,输出纯黑白二值图。结果图像清晰地勾勒出边缘轮廓,常用于后续形态学处理。

  • 处理方法:

    这其实就是二值化的处理过程

    复制代码
    G >  threshold → output = 255  (白色,边缘)
    G <= threshold → output = 0    (黑色,非边缘)
  • python代码

python 复制代码
def binary_threshold(img, threshold=GRADIENT_THRESHOLD):
    result = Image(img.width, img.height)   # 默认全黑

    for y in range(1, img.height):
        for x in range(1, img.width):
            g = _compute_gradient(img, x, y)
            result.set_pixel(x, y, 255 if g > threshold else 0)

    return result
  • 效果图

3. 固定值梯度锐化

  • 原理:
    介于门限增强和二值化之间:
    边缘被强制置为最大亮度(255),突出轮廓;
    非边缘区域保留原始灰度,保持背景信息可读。
  • 处理方法:
    G > threshold → output = 255 边缘高亮为白色
    G <= threshold → output = 原始像素值 非边缘保留原灰度
python 复制代码
def fixed_enhance(img, threshold=GRADIENT_THRESHOLD):
    result = img.clone()

    for y in range(1, img.height):
        for x in range(1, img.width):
            g = _compute_gradient(img, x, y)
            if g > threshold:
                result.set_pixel(x, y, 255)
            # g <= threshold 时保持 clone 的原值

    return result
  • 效果图
相关推荐
梦想的颜色3 小时前
OCR 识别原理与 Python 识图全实战:从文字提取到图像内容理解
python·计算机视觉·ocr·图像识别·python 识图
Evand J8 小时前
【MATLAB例程,图像滤波5】 反谐波均值滑动窗口滤波(CHMF)图像降噪与质量评价,附代码下载链接
图像处理·算法·计算机视觉·matlab·均值算法·滑动窗口滤波·均值滑动
动物园猫9 小时前
道路设施目标检测数据集:4类别、5,000张图像 | 目标检测
人工智能·目标检测·计算机视觉
天远Date Lab10 小时前
零信任架构实战:基于天远车信盟出险构建自动化汽车消费贷合规网关
人工智能·机器学习·计算机视觉·ocr
YOLO视觉与编程13 小时前
YOLO / Labelme目标分割数据集增强扩充软件v1.0.0适用于YOLO全版本
人工智能·深度学习·yolo·计算机视觉
PhotonixBay14 小时前
3D共聚焦显微镜与探针式粗糙度仪:谁更适合亚表面损伤检测?
图像处理·人工智能·测试工具·3d
leoZ23115 小时前
第 4 篇:布局骨架——页面壳、栅格、卡片
前端·javascript·vue.js·opencv·计算机视觉·数据挖掘·语音识别
jay神15 小时前
深度学习如何确定Batch Size的大小?
人工智能·深度学习·计算机视觉·毕业设计·课程设计·batch
JarmanYuo16 小时前
YOLO 涨点研究(六):网络结构改进之小目标增强篇1——无人机视角下的车辆与行人检测
人工智能·pytorch·python·yolo·计算机视觉·无人机
格林威16 小时前
C# 相机图像阴影校正:使用OpenCvSharp实现工业相机阴影平场校正功能
人工智能·数码相机·opencv·计算机视觉·c#·机器视觉·工业相机