边缘检测与阈值分割
Canny
[1] Canny Edge Detection. https://docs.opencv.org/3.4/da/d22/tutorial_py_canny.html
[2] OpenCV Edge Detection ( cv2.Canny ). https://pyimagesearch.com/2021/05/12/opencv-edge-detection-cv2-canny/
由John F. Canny提出
1、由于边缘检测容易受噪声影响,采用Gaussian空间滤波器去噪
2、采用Sobel核求图像水平与垂直方向的导数Gx,GyG_x, G_yGx,Gy
x:[−101−202−101],y:[−1−2−1000121]x: \begin{bmatrix} -1&0&1 \\ -2&0&2 \\ -1&0&1 \end{bmatrix}, y: \begin{bmatrix} -1&-2&-1 \\ 0&0&0 \\ 1&2&1 \end{bmatrix}x:−1−2−1000121,y:−101−202−101
3、计算边缘的梯度(G,θ)(G,\theta)(G,θ)
幅值 G=Gx2+Gy2G = \sqrt{G_x^2 + G_y^2}G=Gx2+Gy2
方向 θ=tan−1(Gy/Gx)\theta =tan^{-1}(G_y/G_x)θ=tan−1(Gy/Gx)
注:梯度是一个向量,包含导数值以及求导方向;二维函数上的一点有多个求导方向,求出的导数值也各不相同,梯度的幅值即最大的导数值(方向导数)。
4、非局部极大值抑制
图像上每一点都一个梯度值与梯度方向
通过插值,求解该点梯度方向上的前后两点的梯度值
对比该点的梯度值与求出的前后两点梯度值,如果该点是极大值,则保留,否则置0
遍历所有点,便求出图像边缘上的所有点
5、滞后阈值法
高于大阈值的为边缘上的点
小于小阈值的不是边缘上的点
位于两个阈值中间的,判断其与已确定的边缘是否连通,如果是,则其也是边缘上的点,否则,不是边缘上的点
注:认为梯度方向与边缘垂直
反锐化掩膜与锐化掩膜
[1] 【图像锐化】非锐化掩模 USM(Unsharpen Mask)与锐化掩模 SM(Sharpen Mask. http://t.csdn.cn/54TvN.
提取图像高频信息,将其与图像叠加进行边缘增强
H: high pass filter
L: low pass filter
锐化掩膜 I1=I0+w∗H(I0)I_1 = I_0 + w*H(I_0)I1=I0+w∗H(I0)
反锐化掩膜 I1=I0+(I0−w∗L(I0))/(1−w)I_1 = I_0 + (I_0 - w*L(I_0))/(1-w)I1=I0+(I0−w∗L(I0))/(1−w)
注:∗*∗表示卷积
LoG,DoG
[1] 图像特征之LoG算子与DoG算子. https://senitco.github.io/2017/06/20/image-feature-LoG-DoG/.
将Laplace算子作用于图像:∇2I=Ixx+Iyy\nabla^2 I = I_{xx} + I_{yy}∇2I=Ixx+Iyy
作用:突出图像点,线和边缘,抑制均匀和平滑变化的区域
由于微分运算对噪声敏感,先将图像进行高斯平滑滤波,再应用Laplace算子
LoG:∇2(G∗I)=(∇2G)∗I\nabla^2 (G*I) = (\nabla^2 G) * I∇2(G∗I)=(∇2G)∗I
由于Gxx+Gyy=kGσG_{xx} + G_{yy} = k G_\sigmaGxx+Gyy=kGσ,因此可以用DoG代替LoG
DoG:G(σ1)∗I−G(σ2)∗I=(G(σ1)−G(σ2))∗IG(\sigma_1)*I - G(\sigma_2)*I = (G(\sigma_1) - G(\sigma_2))*IG(σ1)∗I−G(σ2)∗I=(G(σ1)−G(σ2))∗I
OSTU算法
[1] Ostu(大津法)二值化图像算法/最佳全局阈值. http://t.csdn.cn/pVHqD.
[2] 吴 熙, 钱盛友. 基于LoG 算子的图像边缘增强算法的改进.
灰度图像IijI_{ij}Iij的均值与方差
均值 μ=1MNΣiIij\mu = \frac{1}{MN} \Sigma_i I_{ij}μ=MN1ΣiIij
方差 σ2=1MNΣiΣj(Iij−μ)2\sigma^2 = \frac{1}{MN} \Sigma_i \Sigma_j (I_{ij} - \mu)^2σ2=MN1ΣiΣj(Iij−μ)2
注:图像的均值就是期望
灰度图像由像素值TTT可分为前景与背景 I=I1+I2I = I_1 + I_2I=I1+I2
类间方差 σB2=c1σ2(I1)+c2σ2(I2)\sigma^2_B = c_1 \sigma^2(I_1) + c_2 \sigma^2(I_2)σB2=c1σ2(I1)+c2σ2(I2)
类内方差 σW2=c1(μ(I1)−μ(I))2+c2(μ(I2)−μ(I))2\sigma^2_W = c_1 (\mu(I_1) - \mu(I))^2 + c_2 (\mu(I_2) - \mu(I))^2σW2=c1(μ(I1)−μ(I))2+c2(μ(I2)−μ(I))2
其中,c1=N(I1)/N(I),c2=N(I2)/N(I)c_1 = N(I_1)/N(I), c_2 = N(I_2)/N(I)c1=N(I1)/N(I),c2=N(I2)/N(I),NNN为像素计数函数
σ2=σB2+σW2\sigma^2 = \sigma^2_B + \sigma^2_Wσ2=σB2+σW2
OSTU算法
遍历图像灰度直方图的所有像素作为TTT,取使得类间方差最大与类内方差最小的TTT作为最终划分图像的像素值
T=argmax(σB2(T))T = argmax(\sigma^2_B(T))T=argmax(σB2(T))
T=argmin(σW2(T))T = argmin(\sigma^2_W(T))T=argmin(σW2(T))
文献[2]采用的是:
T=argmax(σB2(T)/σW2(T))T = argmax(\sigma^2_B(T)/\sigma^2_W(T))T=argmax(σB2(T)/σW2(T))
相关文章:
边缘检测与阈值分割
Canny [1] Canny Edge Detection. https://docs.opencv.org/3.4/da/d22/tutorial_py_canny.html [2] OpenCV Edge Detection ( cv2.Canny ). https://pyimagesearch.com/2021/05/12/opencv-edge-detection-cv2-canny/ 由John F. Canny提出 1、由于边缘检测容易受噪声影响&…...
QQ空间无敌装逼,复制下面的任一代码粘贴即可出现意想不到的图案。
复制下面的任一代码粘贴即可出现意想不到的图案。 打赏代码: [em]e10033[/em]{uin:123,nick: 打赏了你一个冰淇淋,who:1} [em]e10033[/em] 打赏了100000000000.00元红包 [em]e10011[/em] 赞代码:{uin:0000,nick: xx、xx、xx、xx、xx、xx、xx、xx、xx、xx、xx、x…...
必看!总结5种JavaScript异步解决方案
1.回调 回调简单地理解为一个函数作为参数传递给另一个函数,回调是早期最常用的异步解决方案之一。 回调不一定是异步的,也不直接相关。 举个简单的例子: function f1(cb) {setTimeout(() > {cb && cb();}, 2000); }f1(() >…...
JUC并发编程高级篇第四章之ThreadLocal(人手一份,天下安)
文章目录1、ThreadLocal的简介1.1、常见的面试题(也是本次的讲解的内容)1.2、什么是ThreadLocal1.3、ThreadLocal的所用1.4、没有出现ThreadLocal前后的变化1.5、ThreadLocal代码示例1.6、阿里巴巴对ThreadLocal的使用要求1.7、ThreadLocal的源码分析2、ThreadLocal…...
dump 定位分析
在缺少pdb的时候如何分析dump? windbgidaWindbg定位崩溃位置 通过windbg打开dump,并且分析dump !analyze -v 分析: 分析dump: !analyze -v错误原因:读取空指针错误线程:00001e04,可通过命令…...
(十二)排序算法-插入排序
1 基本介绍 1.1 概述 插入排序属于内部排序法,是对于欲排序的元素以插入的方式找寻该元素的适当位置,以达到排序的目的。 插入排序的工作方式非常像人们排序一手扑克牌一样。开始时,我们的左手为空并且桌子上的牌面朝下。然后,…...
elasticsearch 认知
1.大数据领域需要解决以下三个问题 如何存储数据 传统的关系数据库(MySQL、Oracle、和Access等)主导了20世纪的数据存储模式,但当数据量达到太字节级,甚至拍字节级时,关系型数据库表现出了难以解决的瓶颈问题。为了解决…...
《人体地图》笔记
《人体地图》 坂井建雄 著 孙浩 译 腹部通向大腿的隧道 腹部与大腿的分界点是大腿根部,即是腹股沟。 腹壁肌肉连结在腹股沟韧带上,腹壁肌肉包括三层,分别为腹外斜肌、腹内斜肌和腹横肌,每块肌肉都有一个张开的小孔,…...
java基础集合面试题
什么是集合 集合就是一个放数据的容器,准确的说是放数据对象引用的容器 集合类存放的都是对象的引用,而不是对象的本身 集合类型主要有3种:set(集)、list(列表)和map(映射)。 集合的特点 集合的特点主要有如下两点&…...
Vue学习-Vue入门
Vue学习 一、Vue入门 1、 引入Vue Vue (读音 /vjuː/,类似于 view) 是一套用于构建用户界面的渐进式框架。与其它大型框架不同的是,Vue 被设计为可以自底向上逐层应用。Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库…...
【项目】bxg基于SaaS的餐掌柜项目实战(2023)
基于SaaS的餐掌柜项目实战 餐掌柜是一款基于SaaS思想打造的餐饮系统,采用分布式系统架构进行多服务研发,共包含4个子系统,分别为平台运营端、管家端(门店)、收银端、小程序端,为餐饮商家打造一站式餐饮服务…...
灌区流量监测设备-中小灌区节水改造
系统概述 灌区信息化管理系统主要对对灌区的水情、雨情、土壤墒情、气象等信息进行监测,对重点区域进行视频监控,同时对泵站、闸门进行远程控制,实现了信息的测量、统计、分析、控制、调度等功能。为灌区管理部门科学决策提供了依据…...
SpringBoot2核心功能 --- 指标监控
一、SpringBoot Actuator 1.1、简介 未来每一个微服务在云上部署以后,我们都需要对其进行监控、追踪、审计、控制等。SpringBoot就抽取了Actuator场景,使得我们每个微服务快速引用即可获得生产级别的应用监控、审计等功能。 <dependency><gro…...
python实战应用讲解-【numpy数组篇】常用函数(三)(附python示例代码)
目录 Python numpy.repeat() Python numpy.tile() Python numpy.asarray_chkfinite() Python numpy.asfarray() Python numpy.asfortranarray() Python numpy.repeat() Python numpy.repeat()函数重复数组中的元素 – arr. 语法 : numpy.repeat(arr, repetitions, axis …...
DIN论文翻译
摘要 在电子商务行业,利用丰富的历史行为数据更好地提取用户兴趣对于构建在线广告系统的点击率(CTR)预测模型至关重要。关于用户行为数据有两个关键观察结果:i) 多样性(diversity)。用户在访问电子商务网站时对不同种类的商品感兴趣。ii) 局部激活(local…...
python列表,元组和字典
1、python列表 1.1.列表的定义 list是一种有序的集合、基于 链表实现,name[ ] ,全局定义:list2list([ ])。 1.2下标索引 python不仅有负索引也有正索引。正索引从0开始,负索引从-1开始。这两个可以混用,但指向还是那个位置 a[0]a[-9]//length为10的数组a1.3列表的切片 列表可…...
300元左右的蓝牙耳机哪个好?300左右音质最好的蓝牙耳机
无线耳机是人们日常生活中必不可少的设备,无论是听音乐化石看电影都能获得身临其境的感觉,由于科技真在发展中,不断地的发生变化,百元价位就可以感受到不错的音色,下面小编整理了几款300左右音质表现不错的蓝牙耳机。 …...
【消息队列】聊一下生产者消息发送流程
消息发送流程 1.生产者main线程调用send发送消息,先走拦截器,然后会将消息进行序列化,然后选择对应的分区器,将消息发送到RecordAccumulator中,默认是32m 2.Sender线程会异步读取,要不数据达到batch的大小 …...
特斯拉和OpenAI的加持,马斯克简直人生赢家
赢家已定 商人行事,最重要的因素之一是利益驱动。这里,最服“马斯克”。 以马斯克为首的特斯拉公司周日宣布,将在上海新建一家超级工厂,专门生产该公司的储能产品Megapack。签约的特斯拉储能超级工厂项目也是该公司在美国本土以…...
优维低代码:第三方接口接入
优维低代码技术专栏,是一个全新的、技术为主的专栏,由优维技术委员会成员执笔,基于优维7年低代码技术研发及运维成果,主要介绍低代码相关的技术原理及架构逻辑,目的是给广大运维人提供一个技术交流与学习的平台。 连载…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
【Java学习笔记】Arrays类
Arrays 类 1. 导入包:import java.util.Arrays 2. 常用方法一览表 方法描述Arrays.toString()返回数组的字符串形式Arrays.sort()排序(自然排序和定制排序)Arrays.binarySearch()通过二分搜索法进行查找(前提:数组是…...
IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)
文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...
selenium学习实战【Python爬虫】
selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...
AI病理诊断七剑下天山,医疗未来触手可及
一、病理诊断困局:刀尖上的医学艺术 1.1 金标准背后的隐痛 病理诊断被誉为"诊断的诊断",医生需通过显微镜观察组织切片,在细胞迷宫中捕捉癌变信号。某省病理质控报告显示,基层医院误诊率达12%-15%,专家会诊…...
网站指纹识别
网站指纹识别 网站的最基本组成:服务器(操作系统)、中间件(web容器)、脚本语言、数据厍 为什么要了解这些?举个例子:发现了一个文件读取漏洞,我们需要读/etc/passwd,如…...
实战设计模式之模板方法模式
概述 模板方法模式定义了一个操作中的算法骨架,并将某些步骤延迟到子类中实现。模板方法使得子类可以在不改变算法结构的前提下,重新定义算法中的某些步骤。简单来说,就是在一个方法中定义了要执行的步骤顺序或算法框架,但允许子类…...
针对药品仓库的效期管理问题,如何利用WMS系统“破局”
案例: 某医药分销企业,主要经营各类药品的批发与零售。由于药品的特殊性,效期管理至关重要,但该企业一直面临效期问题的困扰。在未使用WMS系统之前,其药品入库、存储、出库等环节的效期管理主要依赖人工记录与检查。库…...
