文章目录

  • 1 图像边缘
  • 2 图像梯度
  • 3 边缘检测算法
    • 3.1 Robert算子
    • 3.2 Prewitt算法
    • 3.3 Soble算子
    • 3.4 Scharr算子
    • 3.5 Laplacian算子
    • 3.6 canny算子

1 图像边缘

  什么是图像边缘:
  图像中存在大量边缘线,边缘线的产生是因为图像中存在不同的区域,当整个图像的区域发生灰度值变换的过程中产生边缘。两个区域的交界处所形成的边缘上的点,所组成的线就是边缘线
  边缘是一个矢量,不仅有位置还有朝向;穿过边缘的灰度级是不连续的;
  边缘产生的原因:
  (1)不同颜色的变化;亮度变化;纹理变化、材质变化…
  (2)曲面不同的法向量:两个相邻平面的法向量不一致,形成不平整平面产生边缘
  (3)不同光照


  边缘的分类:
  (1)step edge:一阶导数有急剧的峰值

  (2)Ramp edge:二阶导数在两个变化区域产生抖动变化(峰值)

  (3)Peak edge:一阶导数的变化变会产生两个峰值

2 图像梯度

  图像梯度: 用于表达边缘的属性,用梯度表现边缘是什么类型的边缘
  图像梯度计算: 对二维图像求二维一阶导数(或更高阶导数)得到一些峰值,当峰值超过一个特定的阈值的时候,则认为该峰值为边缘。
  数字图像f(x,y)的梯度被定义为一个向量,对x方向和y方向分别求梯度,整个图像的梯度为两个方向梯度的表达式:

  图像的梯度为矢量,包含值和方向,梯度的值为:

  梯度的方向为:

  对图像求偏导,其实就是求变化率

3 边缘检测算法

3.1 Robert算子

  x方向的梯度、y方向的梯度计算方式为:

3.2 Prewitt算法

  x方向的梯度、y方向的梯度计算方式为:

3.3 Soble算子

  x方向的梯度、y方向的梯度计算方式为:

  Sobel算子原理:
  (1)假设要处理的图像为I,要在水平方向和垂直方向分别求一阶导数

  (2)在图像的每一个点,结合以上两个结果求出:

  (3)统计G中极大值所在的位置,就是图像的边缘
  Sobel边缘检测流程:
  (1)API: Sobel_x_or_y=cv2.Sobel(src,ddepth,dx,dy,dst=None, ksize=None, scale=None, delta=None, borderType=None)
  参数:
    src:传入图像
    ddepth:图像深度
    dx和dy:代表是否在这个方向上求导,0代表不求导,1代表求导
    ksize:是Sobel算子的大小,既卷积核的大小,必须为奇数。如果ksize=-1,就演变成为3×3的Scharr算子。
    scale:缩放导数的比例常数,默认情况为没有伸缩系数
    BorderType:图像边界的模式。默认值为cv2.BORDER_DEFAULT
  (2) Sobel函数在某方向上求导,求导后可能会有负值,还可能会有大于255的值。而原图像是uint8,既8位无符号数,所以Sobel建立的图像位数不够,会有阶段。因此要使用16位有符号的数据类型,既cv2.CV_16S,处理完图像后,再利用CV2.convertScaleAbs()函数将其转换为uint8格式,否者图像无法显示。
  (3) Sobel算子是在两个方向上计算的,最后还需要用cv2.addWeighted()函数将其组合起来。

import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像,灰度形式
img=cv2.imread('suanzi.png',1)#灰度值的方式读取图像#2.计算x方向和y方向的梯度
x=cv2.Sobel(img,cv2.CV_16S,1,0)
y=cv2.Sobel(img,cv2.CV_16S,0,1)#3.格式转换
abax=cv2.convertScaleAbs(x)
abay=cv2.convertScaleAbs(y)#4.xy方向加权
res=cv2.addWeighted(abax,0.5,abay,0.5,0)cv2.imshow('origin',img)
cv2.imshow('sobel',res)
cv2.waitKey(0)


  Sobel算子缺点:
  当内核大小为3时,Sobel算子内核可能产生比较明显的误差。为解决这一个问题,使用Scharr函数

3.4 Scharr算子

  特点:
  Scharr函数仅作用于大小为3的内核,该函数的运算与Sobel函数一样快,但是结果却更加准确
  Scharr算子原理:
  (1)假设要处理的图像为I,要在水平方向和垂直方向分别求一阶导数

  (2)在图像的每一个点,结合以上两个结果求出:

  (3)统计G中极大值所在的位置,就是图像的边缘。

import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像,灰度形式
img=cv2.imread('suanzi.png',1)#灰度值的方式读取图像#2.计算x方向和y方向的梯度(scharr算子)
x=cv2.Sobel(img,cv2.CV_16S,1,0,ksize=-1)
y=cv2.Sobel(img,cv2.CV_16S,0,1,ksize=-1)#3.格式转换格式
abax=cv2.convertScaleAbs(x)#转换为uint
abay=cv2.convertScaleAbs(y)#4.xy方向加权
res=cv2.addWeighted(abax,0.5,abay,0.5,0)cv2.imshow('origin',img)
cv2.imshow('scharr',res)
cv2.waitKey(0)

3.5 Laplacian算子

  原理:
  利用二阶导数来检测边缘,因为图像是2维,我们需要在两个方向上进行求导:

  不连续函数(图像)的二阶导数:f’’(x)=f(x+1)-f(x)=f(x+1)-f(x)-f(x)+f(x-1)=f(x+1)=f(x-1)-2f(x)
  使用的卷积核为:

  API: cv2.Laplacian(src,ddepth,ksize)
  参数:
    src:需要处理的图像
    Ddepth:图像的深度,-1表示采用的是原图像相同的深度,目标图像的深度必须大于等于源图像的深度
    ksize:算子的大小,即卷积核的大小,必须为奇数。

import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像,灰度形式
img=cv2.imread('suanzi.png',1)#灰度值的方式读取图像#2.laplacian边缘检测(算子)
res=cv2.Laplacian(img,cv2.CV_16S)#3.格式转换格式
res=cv2.convertScaleAbs(res)#转换为uint8cv2.imshow('origin',img)
cv2.imshow('laplacian',res)
cv2.waitKey(0)

3.6 canny算子

  被认为是最优的边缘检测算法
  边缘检测流程:
  (1)噪声去除——高斯滤波
  由于边缘检测很容易受到噪声的影响,所以首先使用5×5的高斯滤波去除噪声。
  (2)计算图像梯度
  2.1 平滑后的图像使用Sobel算子计算水平和垂直方向的一阶导数(Gx和Gy)
  2.2 根据梯度图计算边界的梯度值和梯度方向,公式如下:

  如果某个像素点是边缘,则其梯度方向总是垂直于边缘。梯度方向被归为4类:垂直、水平和两个对角线方向。
  (3)非极大值抑制
  在获得梯度的方向和大小后,对整幅图像进行扫描,去除那些非边界的点。对每一个像素进行检查,看该点梯度值是不是周围具有相同梯度方向的点中是最大的,如果是最大的则保留该点,否则该点被抑制。扫描完整个图像后,结果为具有‘细边’的二进制图像。

  (4)滞后阈值
  确定真正的边界,设定两个阈值:minVal和maxVal。当图像的灰度梯度高于maxVal时被认为是真正的边界,低于minVal的边界被抛弃;如果灰度梯度值介于两者之间,就要看这个点是否与某个被确定为真正的边界点的点相连,如果是就认为该点是边界点,保留该点,否者抛弃该点。

  边缘检测流程:
  (1)API
  canny=cv2.Canny(image,threshold1,threshold2)
  (2)参数:
    image:灰度图
    threshold1:minVal,较小的阈值,将间断的边缘连接起来
    threshold2:maxVal较大的阈值检测图像中明显的边缘。

import cv2
import matplotlib.pyplot as plt
import numpy as np
#1. 读取图像,灰度形式
img=cv2.imread('suanzi.png',1)#灰度值的方式读取图像#2.canny边缘检测
canny=cv2.Canny(img,0,100)cv2.imshow('origin',img)
cv2.imshow('laplacian',canny)
cv2.waitKey(0)


  
  
  
  
  
  
  
  
  
  
  
  
  

【医学图像处理】3 图像梯度及边缘提取相关推荐

  1. OpenCV图像处理(十一)---图像梯度

    安培定则:也叫右手螺旋定则,是表示电流和电流激发磁场的磁感线方向间关系的定则.通电直导线中的安培定则(安培定则一):用右手握住通电直导线,让大拇指指向电流的方向,那么四指指向就是磁感线的环绕方向:通电 ...

  2. 图像处理-基于图像梯度L0范数最小化(L0smooth)的保护边缘平滑滤波

    算法程序备注: (1)下面是对一幅自然图像进行处理的结果: 可以看到图像有非常明显的变化,图像分成了一块一块,这是图像平滑后的结果,因为保护了边界,因此明显的边界仍然存在,但是不可避免的细节部分被磨平 ...

  3. OpenCV-图像梯度与边缘提取

    文章目录 图像梯度与边缘提取 Sobel和Scharr算子 cv2.Sobel cv2.convertScaleAbs cv2.Scharr 示例 Laplacian算子 cv2.Laplacian ...

  4. 图像形态学概要-腐蚀、膨胀、开运算、闭运算、形态学梯度(形态学边缘提取)、顶帽操作、黑帽操作

    图像处理开发需求.图像处理接私活挣零花钱,请加微信/QQ 2487872782 图像处理开发资料.图像处理技术交流请加QQ群,群号 271891601 图像形态学中两种最基本的操作就是对图形的腐蚀和膨 ...

  5. 数字图像处理:(1)图像梯度以及算子应用

    1.数学意义上的梯度 在理解图像梯度是什么的时候,我们首先要回忆一下以前学习过得梯度是什么? 见链接: https://blog.csdn.net/m0_37957160/article/detail ...

  6. 图像像素点赋值_医学图像处理教程(五)——医学图像边缘检测算法

    今天将给大家分享医学图像常见两种图像边缘检测算法. 1.Sobel算子操作 Sobel算子的思想,邻域的像素对当前像素产生的影响不是等价的,所以距离不同的像素具有不同的权值,对算子结果产生的影响也不同 ...

  7. DICOM医学图像处理:DICOM存储操作之“多幅BMP图像数据存入DCM文件”

    背景: 本专栏"DICOM医学图像处理"受众较窄,起初只想作为自己学习积累和工作经验的简单整理.前几天无聊浏览了一下,发现阅读量两极化严重,主要集中在"关于BMP(JPG ...

  8. 【转】DICOM医学图像处理:开源库mDCM与DCMTK的比較分析(一),JPEG无损压缩DCM图像

    转自:https://www.cnblogs.com/mfrbuaa/p/4004114.html 有修订 背景介绍: 近期项目需求,需要使用C#进行最新的UI和相关DICOM3.0医学图像模块的开发 ...

  9. DICOM医学图像处理:DICOM存储操作之 “多幅JPG图像数据存入DCM文件”

    背景: 续上篇,继续介绍如何将多幅JPG图像数据存入DCM文件.即将有损压缩数据直接写入DCM文件,存储为Multi-frame形式. 多幅JPG图像数据存入DCM文件: 为了避免引起歧义,这里着重说 ...

最新文章

  1. Java 8 - 01 优雅编程 lambda 以及 @FunctionalInterface注解一点通
  2. Effective C# 原则50:了解ECMA标准(译)
  3. Java基本语法(9)--逻辑运算符(逻辑短路)与或非
  4. 图像处理:给验证码图片做降噪处理及数据清洗
  5. php中configuration,php configuration
  6. Android开发笔记(二十九)使用SharedPreferences存取数据
  7. 苹果收购英特尔手机芯片业务;西门子将在华建立 5G 研发中心;React Native 0.60.4 发布 | 极客头条...
  8. android Gallery实现异步加载网络图片
  9. 身份证校验规则Js代码
  10. STM32以DMA方式实现printf函数
  11. 人工神经网络概念及组成,人工神经网络基本概念
  12. 研究论文:Uniswap V3中的无常损失
  13. pat计算机程序考试考试时间,pat报名条件
  14. 招行汇钱到华美银行(1)
  15. BZOJ - 3687
  16. asset计算机语言,资产管理软件的各种语言翻译
  17. 求生之路无限子弹服务器,求生之路2怎么调无限子弹(在单机中)
  18. U3D里Humanoid动画系统问题与解决
  19. PIP生存记 | 10%强制淘汰率? Amazon好进,不好混。
  20. 会计用计算机很快是,中级会计考试用的计算器是什么样的?

热门文章

  1. ArcGIS求坡度、坡向、坡长、地形起伏度
  2. JS控制GIF图片的停止与显示(掷骰子实现)
  3. java web开发实战经典 源码_李兴华 java_web开发实战经典 源码 完整版收集共享
  4. 数组的常用方法-(部分带有重构函数)
  5. 鲁大师5月新机性能/流畅榜:中兴Axon 40 Ultra性能夺冠,特供版新机扎堆了!
  6. C#_文件读写常用类介绍
  7. python画circos图_​用Python把图做的好看点:用Matplotlib画个Circos和弦图
  8. 前端基础_配置IIS服务器
  9. 拼多多,是真相还是谣言,原来是戏言
  10. 交换机忘记密码 华为S5700交换机修改恢复密码