当前位置: 首页 > news >正文

图像像素梯度

梯度

在高数中,梯度是一个向量,是有方向有大小。假设一二元函数f(x,y),在某点的梯度有:
在这里插入图片描述
结果为:
在这里插入图片描述
即方向导数。梯度的方向是函数变化最快的方向,沿着梯度的方向容易找到最大值。

图像梯度

在一幅模糊图像中的物体的轮廓不明显,轮廓边缘灰度变化不强烈,从而导致层次感不强,而在清晰图片中的物体轮廓边缘灰度变化明显,层次感强。那么这种灰度变化明显不明显怎么去定义呢?

可以使用导数(梯度),衡量图像灰度的变化率,因为图像就是函数。正因如此,我们引入的图像梯度可以把图像看成二维离散函数,图像梯度其实就是这个二维离散函数的求导。
在这里插入图片描述
如果一副图像的相邻灰度值有变化,那么梯度就存在,如果图像相邻的像素没有变化,那么梯度就是0,把梯度值和相应的像素相加,那么灰度值没有变化的,像素就没有变化,灰度值变了,像素值也就变了。
相加后的新图像,原图像像素点100与90亮度只相差10,现在是110与90,亮度相差20了,对比度显然增强了,尤其是图像中物体的轮廓和边缘,与背景大大加强了区别,这就是用梯度来增强图像的原理。将图像函数f(x,y)梯度表达式表示出来:
在这里插入图片描述
幅度:
在这里插入图片描述
方向角:
在这里插入图片描述
对于数字图像来说,相当于是二维离散函数求梯度,使用差分来近似导数:
在这里插入图片描述
因此,像素点(x,y)处的梯度值和梯度方向分别是:
在这里插入图片描述
平方+开方的,计算量太大,于是一般用绝对值来近似平方和平方根的操作,来降低计算量:
在这里插入图片描述
梯度的方向是函数变化最快的方向,所以当函数中存在边缘时,一定有较大的梯度值,相反,当图像中有比较平滑的部分时,灰度值变化较小,则相应的梯度也较小,图像处理中把梯度的模简称为梯度,由图像梯度构成的图像成为梯度图像。

一些经典的图像梯度算法是考虑图像的每个像素的某个邻域内的灰度变化,利用边缘临近的一阶或二阶导数变化规律,对原始图像中像素某个邻域设置梯度算子,通常我们用小区域模板进行卷积来计算,有Sobel算子、Robinson算子、Laplace算子等。

经典算子

对图像大矩阵和滤波小矩阵对应位置元素相乘再求和的操作就叫卷积(Convolution)或协相关(Correlation).

协相关(Correlation)和卷积(Convolution)很类似,两者唯一的差别就是卷积在计算前需要翻转卷积核,而协相关则不需要翻转.

sobel算子

主要用作边缘检测,是离散差分算子,用来运算图像梯度函数的灰度近似值。在图像的任何一点使用此算子,将会产生对应的梯度矢量或者法矢量。

书上的sobel模板不是卷积模板,而是协相关模板,卷积的话要先将模板旋转180度以后再与图像做相关操作。

Gx方向的相关模板:
在这里插入图片描述

Gy方向的相关模板:
在这里插入图片描述

Sobel的卷积模板Gx:
在这里插入图片描述

sobel卷积模板Gy:
在这里插入图片描述

具体计算为,每个像素(灰度值)与模板对应位置元素相乘求和(类似于CNN中的卷积,其实是协相关运算),来计算该点灰度的大小:
在这里插入图片描述
为了提高效率使用不开平方的近似值:
在这里插入图片描述
用以下公式计算梯度方向:
在这里插入图片描述
Sobel算子用来计算图像灰度函数的近似梯度。Sobel算子根据像素点上下、左右邻点灰度加权差,在边缘处达到极值这一现象检测边缘。对噪声具有平滑作用,提供较为精确的边缘方向信息,边缘定位精度不够高。当对精度要求不是很高时,是一种较为常用的边缘检测方法。

部分算子介绍

http://www.lryc.cn/news/125862.html

相关文章:

  • [论文笔记]Batch Normalization
  • SpringCloud教程(中)
  • 蓝帽杯2022
  • vue + el-table 表格数据导出为excel表格
  • ClickHouse(二十):Clickhouse SQL DDL操作-2-分区表DDL操作
  • Springboot 在 redis 中使用 Guava 布隆过滤器机制
  • Docker本地镜像发布到阿里云
  • Postgresql源码(112)plpgsql执行sql时变量何时替换为值
  • OhemCrossEntropyLoss
  • prometheusalert区分告警到不同钉钉群
  • AUTOSAR规范与ECU软件开发(实践篇)3.2 ETAS AUTOSAR系统解决方案介绍(上)
  • 【leetcode】第三章 哈希表part02
  • 【C语言】memset()函数
  • C++中重载(overload)、重写(override,也叫做“覆盖”)和重定义(redefine,也叫作“隐藏”)的区别?
  • 将非受信数据作为参数传入,可能引起xml 注入,引起数据覆盖,这个问题咋解决
  • 设计模式-简单工厂模式
  • Maven框架SpringBootWeb简单入门
  • 关于2023年8月19日PMP认证考试准考信下载通知
  • html实现iphone同款开关
  • 使用Vue和jsmind如何实现思维导图的历史版本控制和撤销/重做功能?
  • 【Vue-Router】路由元信息
  • vue 控件的四个角设置 父视图position:relative
  • VM中linux虚拟机配置桥接模式(虚拟机与宿主机网络互通)
  • 7.Eclipse中改变编码方式及解决部分乱码问题
  • grafana 的 ws websocket 连接不上的解决方式
  • 多环境_部署项目
  • go web框架 gin-gonic源码解读02————router
  • 【Java后端封装数据】常见后端封装数据的格式,用于返回给前端使用(109)
  • 无脑入门pytorch系列(三)—— nn.Linear
  • SQL Server用sql语句添加列,添加列注释