一阶微分算子锐化图像_【动手学计算机视觉】第三讲:图像预处理之图像分割...

本讲完整代码>>
前言
图像分割是一种把图像分成若干个独立子区域的技术和过程。在图像的研究和应用中,很多时候我们关注的仅是图像中的目标或前景(其他部分称为背景),它们对应图像中特定的、具有独特性质的区域。为了分割目标,需要将这些区域分离提取出来,在此基础上才有可能进一步利用,如进行特征提取、目标识别。因此,图像分割是由图像处理进到图像分析的关键步骤,在图像领域占据着至关重要的地位。
介绍
提到图像分割,主要包含两个方面:
- 非语义分割
- 语义分割
首先,介绍一下非语义分割。
非语义分割在图像分割中所占比重更高,目前算法也非常多,研究时间较长,而且算法也比较成熟,此类图像分割目前的算法主要有以下几种:
- 阈值分割

阈值分割是图像分割中应用最多的一类,该算法思想比较简单,给定输入图像一个特定阈值,如果这个阈值可以是灰度值,也可以是梯度值,如果大于这个阈值,则设定为前景像素值,如果小于这个阈值则设定为背景像素值。
阈值设置为100对图像进行分割:

- 区域分割
区域分割算法中比较有代表性的算法有两种:区域生长和区域分裂合并。
区域生长算法的核心思想是给定子区域一个种子像素,作为生长的起点,然后将种子像素周围邻域中与种子像素有相同或相似性质的像素(可以根据预先设定的规则,比如基于灰度差)合并到种子所在的区域中。
区域分裂合并基本上就是区域生长的逆过程,从整个图像出发,不断分裂得到各个子区域,然后再把前景区域合并,实现目标提取。
- 聚类
聚类是一个应用非常广泛的无监督学习算法,该算法在图像分割领域也有较多的应用。聚类的核心思想就是利用样本的相似性,把相似的像素点聚合成同一个子区域。
- 边缘分割
这是图像分割中较为成熟,而且较为常用的一类算法。边缘分割主要利用图像在边缘处灰度级会发生突变来对图像进行分割。常用的方法是利用差分求图像梯度,而在物体边缘处,梯度幅值会较大,所以可以利用梯度阈值进行分割,得到物体的边缘。对于阶跃状边缘,其位置对应一阶导数的极值点,对应二阶导数的过零点(零交叉点)。因此常用微分算子进行边缘检测。常用的一阶微分算子有Roberts算子、Prewitt算子和Sobel算子,二阶微分算子有Laplace算子和Kirsh算子等。由于边缘和噪声都是灰度不连续点,在频域均为高频分量,直接采用微分运算难以克服噪声的影响。因此用微分算子检测边缘前要对图像进行平滑滤波。LoG算子和Canny算子是具有平滑功能的二阶和一阶微分算子,边缘检测效果较好,因此Canny算子也是应用较多的一种边缘分割算法。

- 直方图
与前面提到的算法不同,直方图图像分割算法利用统计信息对图像进行分割。通过统计图像中的像素,得到图像的灰度直方图,然后在直方图的波峰和波谷是用于定位图像中的簇。
- 水平集
水平集方法最初由Osher和Sethian提出,目的是用于界面追踪。在90年代末期被广泛应用在各种图像领域。这一方法能够在隐式有效的应对曲线/曲面演化问题。基本思想是用一个符号函数表示演化中的轮廓(曲线或曲面),其中符号函数的零水平面对应于实际的轮廓。这样对应于轮廓运动方程,可以容易的导出隐式曲线/曲面的相似曲线流,当应用在零水平面上将会反映轮廓自身的演化。水平集方法具有许多优点:它是隐式的,参数自由的,提供了一种估计演化中的几何性质的直接方法,能够改变拓扑结构并且是本质的。

语义分割和非语义分割的共同之处都是要分割出图像中物体的边缘,但是二者也有本质的区别,用通俗的话介绍就是非语义分割只想提取物体的边缘,但是不关注目标的类别。而语义分割不仅要提取到边缘像素级别,还要知道这个目标是什么。因此,非语义分割是一种图像基础处理技术,而语义分割是一种机器视觉技术,难度也更大一些,目前比较成熟且应用广泛的语义分割算法有以下几种:
- Grab cut
- Mask R-CNN
- U-Net
- FCN
- SegNet
由于篇幅有限,所以在这里就展开介绍语义分割,后期有时间会单独对某几个算法进行详细解析,本文主要介绍非语义分割算法,本文就以2015年UCLA提出的一种新型、高效的图像分割算法--相位拉伸变换为例,详细介绍一下,并从头到尾实现一遍。
相位拉伸变换
相位拉伸变换(Phase Stretch Transform, PST),是UCLA JalaliLab于2015年提出的一种新型图像分割算法[Edge Detection in Digital Images Using Dispersive Phase Stretch Transform],该算法主要有两个显著优点:
- 速度快
- 精度高
- 思想简单
- 实现容易
PST算法中,首先使用定位核对原始图像进行平滑,然后通过非线性频率相关(离散)相位操作,称为相位拉伸变换(PST)。 PST将2D相位函数应用于频域中的图像。施加到图像的相位量取决于频率;也就是说,较高的相位量被应用于图像的较高频率特征。由于图像边缘包含更高频率的特征,因此PST通过将更多相位应用于更高频率的特征来强调图像中的边缘信息。可以通过对PST输出相位图像进行阈值处理来提取图像边缘。在阈值处理之后,通过形态学操作进一步处理二值图像以找到图像边缘。思想主要包含三个步骤:

- 非线性相位离散化
- 阈值化处理
- 形态学运算
下面来详细介绍一下。
相位拉伸变换,核心就是一个公式,
其中
编程实践
PST算法中最核心的就是公式(1),编程实现可以一步一步来实现公式中的每个模块。
首先导入需要的模块,
import
定义全局变量,
L
计算公式中的核心参数,
def
生成变量
x
接下来对公式(1)从右至左依次实现,
对输入图像进行快速傅里叶变换,
orig
实现
expo
对图像进行平滑处理,
orig_filtered
实现相位核,
PST_Kernel_1
将前面实现的部分与相位核做乘积,
temp
对图像进行逆快速傅里叶变换,
temp
进行角运算,得到变换图像的相位,
PHI_features
对图像进行阈值化处理,
features
应用二进制形态学操作来清除转换后的图像,
out
到这里就完成了相位拉伸变换的核心部分,
def
下面完成调用部分的功能,
首先读取函数并把图像转化为灰度图,
Image_orig
调用前面的函数,对图像进行相位拉伸变换,
edge
显示图像,
Overlay
主函数的完整内容为,
def

往期回顾
Jackpop:【动手学计算机视觉】第一讲:图像预处理之图像去噪
Jackpop:【动手学计算机视觉】第二讲:图像预处理之图像增强

感兴趣的可以关注一下,也可以关注公众号"平凡而诗意",我在公众号共享了一些资源和学习资料,关注后回复相应关键字可以获取。
相关文章:

visual studio code 里调试运行 Python代码
最近对微软的visual studio code 挺感兴趣的,微软的跨平台开发工具。轻量简洁。 版本迭代的也挺快的,截止16年8月2日已经1.3.1版本了,功能也愈加完善。(16年12月18日 已经,发到1.10.1版本了,更新非常频繁&a…

GridView单元格取值显示为nbsp;
在通过GridView取一个单元格(cell)的值时,数据库中为NULL,而页面上显示为空格。发现通过gridview.cell[i].text取出来的值为 ,导致获取数据出现问题。 解决方法: 一、利用Server.HtmlDecode(string)进行转换…

什么是比特币?
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 比特币就是所谓的“加密货币”,这是一种完全以数据形式存在的数字资产。你存在银行的钱可能也是一堆数字,但这些数字等效于…

C程序设计-----第1次作业
一、 PTA作业。 在完成PTA作业的时候我没有认真读题。每次都是提交完整代码 6-1(1) 1 #include <stdio.h>2 3 //P等价于(p)还是等价于*(p)?4 5 int main(){6 int *p, a 3;7 p…

python画散点图对散点阴影扩充_Python金融应用之图表制作(三)
NO.602020.04.06工欲善其事,必先利其器//- 前言 - 今天,小咖带大家使用Python制作申万行业PE和ROE的散点图?最终将得到以下效果:

List集合的去除重复性练习
package com.java.b.listdmeo.www; import java.util.ArrayList;import java.util.Iterator; import com.java.Student.www.Student; public class listtest { public static void main(String[] args) { //创建一个集合,该集合为List 集合 ArrayList listnew Arr…

区块链的安全软肋是什么?
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 今天我们来谈谈区块链的安全软肋。 作为比特币中的核心技术,在无法建立信任关系的互联网上,区块链技术依靠密码学和巧妙的分…

web service 项目 和 普通 web项目 的 区别
web service 面向的是开发者(需要再次开发) 普通web 面向的是用户(直接使用)转载于:https://www.cnblogs.com/zno2/p/5612024.html

selenium:学习资源
selenium中文版文档 http://www.selenium.org.cn/1203.html selenium 搜索功能: http://blog.csdn.net/qq_878799579/article/details/73321015 selenium 详细教程: http://www.cnblogs.com/yoyoketang/p/6123938.html 转载于:https://www.cnblogs.com/f…

node.js 验证路径有效性_怎样识别光伏谐波路径?试试这个算法
国网吉林省电力有限公司四平供电公司的研究人员韩绍禹、李新辉,在2019年第5期《电气技术》杂志上撰文指出(论文标题为“基于信息熵和节点导纳矩阵的光伏谐波路径初探”),光伏电站的接入给电网注入一定谐波,同时也增加了电网谐波线损。本文针对…

区块链研发与运营
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 传统行业之所以会存在着每况愈下的情况发生,主要的原因还是在于运营方式的墨守成规,造成消费者缺乏了购买欲望和关注度&am…

mysql longtext可以存储多少文字_MySQL 四万字精华总结 + 面试100 问,和面试官扯皮绰绰有余(收藏系列)
作者:派大新 链接:https://juejin.im/post/5f0d4fadf265da22f3250eaa写在之前:不建议那种上来就是各种面试题罗列,然后背书式的去记忆,对技术的提升帮助很小,对正经面试也没什么帮助,有点东西的…

2018.3.15校内互测总结-点分治-线段树
这是曾来过咱们学校集训的一位大神出的~ T1 题目大意 给出一棵带边权的无根树,求树上前$k$大的路径的长度。 $1 \leq n \leq 200000$ 题解 想了一上午点分治,却发现只会$O(nlog^3n)$的...... 正解是二分第$k$大的权值,用点分治判断࿰…

EntityFramework Core 学习笔记 —— 创建模型
原文地址:https://docs.efproject.net/en/latest/modeling/index.html 前言: EntityFramework 使用一系列的约定来从我们的实体类细节创建模型。我们可以钦定一些额外的映射配置来添加、重写实体类的哪些细节应该被这些约定所发现。 这篇文章讲述了一些无…

使用docker-compose进行多节点部署
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 创建数据目录及多节点目录 mkdir -p ~/workmeta/EduEthereumServerDeploy/deploy_2/{node1,node2} > cd ~/workmeta/EduEthereumServerDeploy/de…
石头剪刀布python代码_我的第一个python程序,石头剪刀布猜拳游戏
从决定学习python到今天,已经过去了好1个月,买的几本书还没一本看完的,惭愧。 忙不是借口,是时候来点计划,来点坚持。写点什么吧,算是学习的记录,也是对自己的鞭策。 今天写一个猜字游戏&#x…

CATransform3DRotate 实现左右,上下翻转效果
CGFloat m34 800; CGFloat value = -40;//(控制翻转角度) CGPoint point CGPointMake(0.5, 0.5);//设定翻转时的中心点,0.5为视图layer的正中 CATransform3D transfrom CATransform3DIdentity; transfro…

[UWP小白日记-10]程序启动屏(ios解锁既视感)
[UWP小白日记-10]程序启动屏(ios解锁既视感) 原文:[UWP小白日记-10]程序启动屏(ios解锁既视感)讲一下 微软爸爸的开发者大会2016又暴了个表达式动画和Windows.UI.Composition的API,好叼的样子。官方示例库GitHub 目前是…

比特币:区块链的最基础实现
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 我并不是说比特币本身注定要失败。我所指的是,我认为区块链纯粹作为货币的实施注定远没有世界认为的那么成功。这包括诸如Litecoin和Das…

python工具使用笔记
1、pip pip是Python官方推荐的包管理工具,在doc界面直接使用pip或者pip3命令即可,例如安装gensim: C:\Users\kayan.sjc>pip3 install --upgrade gensim 2、python2代码转换python3工具2to3.py python3不兼容python2,有时候需要…

stm32 cubemx hal 工程中 微秒延迟 delay_us
参考的正点原子的代码 测试平台 stm32f429i-disco 配了一个gpio 时钟 gpio /* USER CODE BEGIN 0 */ typedef uint8_t u8; typedef uint32_t u32;u8 fac_us;void delay_init(u8 SYSCLK) {#if SYSTEM_SUPPORT_OS //?????? OS.u32 reload;#endifHAL_SYSTICK_CLKSourceConfi…

ps制作20种特效文字_ps技巧:给照片制作特效(刀光剑影)
哈喽大家好,一段时间没有更新了非常抱歉。现在努力日更,给大家提供干货学习。今天我们的ps课程是制作特效。大家会觉得很难,但是并不是这样的。大家跟着小编的教程走,反复练习就很快学会啦。接下来我们就开始进入今天的学习吧&…

如何创建一个最小的区块链
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 这是我在一个外文网站上看到的一篇博文,作者通过50行代码写出了区块链的简化版本.麻雀虽小,但是五脏俱全.我觉得通过实践,这是了解区块链的一个好…

Linux 服务器上快速配置阿里巴巴 OPSX NTP服务
编辑文件 "/etc/ntp.conf",根据情况修改文件内容为: 互联网上的服务器:driftfile /var/lib/ntp/drift pidfile /var/run/ntpd.pid logfile /var/log/ntp.log restrict default kod nomodify notrap nopeer noquery restrict -6 default …

python爬取学校新闻_python-爬取校园新闻首页的新闻
1.作业代码 importrequestsfrom bs4 importBeautifulSoupfrom datetime importdatetime##1.用requests库和BeautifulSoup库,爬取校园新闻首页新闻的标题、链接、正文。# urlhttp://news.gzcc.cn/html/xiaoyuanxinwen/resrequests.get(url) res.encodingutf-8soupBea…

windows环境下,mysql的root密码丢失后重置方法
1、运行窗口输入 services.msc,检查mysql服务是否启动,如果启动手动停止或输入 net stop mysql 停止msyql服务。 2、打开cmd命令行,使用cd命令进入mysql 的bin目录 cd E:\TP\wamp\wamp\bin\mysql\mysql5.7.11\bin(此处是本地mysq…

区块链以及区块链技术总结
链客,专为开发者而生,有问必答! 此文章来自区块链技术社区,未经允许拒绝转载。 摘要:区块链是目前一个比较热门的新概念,蕴含了技术与金融两层概念。从技术角度来看,这是一个牺牲一致性效率且…

UOJ#7. 【NOI2014】购票 | 线段树 凸包优化DP
题目链接 UOJ #7 题解 首先这一定是DP!可以写出:\[f[i] \min_{ancestor\ j} \{f[j] (d[j] - d[i]) * p[i] q[i]\}\] 其中\(d[i]\)表示树上\(i\)的深度。 整理一下式子:\[f[i] \min_{ancestor\ j} \{f[j] - d[j] * p[i]\} d[i] * p[i] q…

python中集合的元素可以是任意数据类型_Python之基本数据类型——集合数据类型...
集合set(可变的数据类型): 数据结构以大括号{}表示,各元素逗号隔开,例:{1,2,3,4}。 集合特征:无序,元素不重复 创建集合: s{1,2,3} pirnt(s) #---------------{1,2,3} sset(hello) print(s) #--…

uv_timer_t的释放问题
项目中的计时器模块是用libuv做的,今天发现了点问题,是释放uv_timer_t引起了,我是在uv_timer_start的回调里释放该结构的,这里是不能释放了,因为回调完后,库还会使用uv_timer_t里的数据,之前没出…