| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 游戏开发 -> 图像二值化(Image Binarization):平均值法、双峰法、大津算法(OTSU) -> 正文阅读 |
|
[游戏开发]图像二值化(Image Binarization):平均值法、双峰法、大津算法(OTSU) |
图像二值化(Image Binarization):平均值法、双峰法、大津算法(OTSU)编程实现图像的二值化,分析不同的阈值对二值化图像的影响。 问题描述传统的机器视觉通常包括两个步骤:预处理和物体检测。而沟通二者的桥梁则是图像分割(Image Segmentation)。图像分割通过简化或改变图像的表示形式,使得图像更易于分析。最简单的图像分割方法是二值化(Binarization)。 图像二值化(Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。二值图像每个像素只有两种取值:要么纯黑,要么纯白。 由于二值图像数据足够简单,许多视觉算法都依赖二值图像。通过二值图像,能更好地分析物体的形状和轮廓。二值图像也常常用作原始图像的掩模(又称遮罩、蒙版,Mask):它就像一张部分镂空的纸,把我们不感兴趣的区域遮掉。进行二值化有多种方式,其中最常用的就是采用阈值法(Thresholding)进行二值化。其将大于某个临界灰度值的像素灰度设为灰度极大值,小于这个值的为灰度极小值,从而实现二值化。 阈值法又分为全局阈值(Global Method)和局部阈值(Local Method),又称自适应阈值(Adaptive Thresholding)。本次实验主要实现全局阈值,阈值的选取基于以下三种方法:
平均值法为了应对每张图片的灰度值大不相同,阈值取为图像本身的平均值.
双峰法如果物体与背景的灰度值对比明显,直方图就会包含双峰(bimodal histogram),它们分别为图像的前景和背景。而它们之间的谷底即为边缘附近相对较少数目的像素点,一般来讲,这个最小值就为最优二值化的分界点,通过这个点可以把前景和背景很好地分开。
上述直方图两峰值没有间距,故未能较好体现双峰法的作用. OTSU法不难发现,上述双峰法具有明显的缺陷,因为直方图是不连续的,有非常多尖峰和抖动,要找到准确的极值点十分困难。日本工程师大津展之为这个波谷找到了一个合适的数学表达,并于1979年发表。这个二值化方法称为大津算法(Otsu’s method)。 从大津法的原理上来讲,该方法又称作最大类间方差法,因为按照大津法求得的阈值进行图像二值化分割后,前景与背景图像的类间方差最大。它被认为是图像分割中阈值选取的最佳算法,计算简单,不受图像亮度和对比度的影响,因此在数字图像处理上得到了广泛的应用。它是按图像的灰度特性,将图像分成背景和前景两部分。因方差是灰度分布均匀性的一种度量,背景和前景之间的类间方差越大,说明构成图像的两部分的差别越大,当部分前景错分为背景或部分背景错分为前景都会导致类间差别变小。因此,使类间方差最大的分割意味着错分概率最小。 优化目标k ? = arg ? max ? k ∈ L σ 2 k^* = \mathop { \arg \max } \limits _{k\in L} \sigma ^2 k?=k∈Largmax?σ2 σ 2 = ( M G ? p 1 ? m ) 2 p 1 ( 1 ? p 1 ) \sigma ^2 = \frac{(MG*p1-m)^2}{p1(1-p1)} σ2=p1(1?p1)(MG?p1?m)2? 推导由所选定的阈值 k k k 将所有像素分为两类 C1( 小于等于 k k k ) 和 C2(大于 k k k ),两类像素的均值分别为 m 1 m1 m1、 m 2 m2 m2,全局均值为 M G MG MG.属于 C1、C2 的概率分别为 p 1 p1 p1、 p 2 p2 p2. L 是图像的像素级(0~255) 根据方差定义,得到 σ 2 = p 1 ( m 1 ? M G ) 2 + p 2 ( m 2 ? M G ) 2 \sigma ^2 = p1(m1-MG)^2 + p2(m2-MG)^2 σ2=p1(m1?MG)2+p2(m2?MG)2 又 p 1 ? m 1 + p 2 ? m 2 = M G p1*m1+p2*m2=MG p1?m1+p2?m2=MG p 1 + p 2 = 1 p1+p2=1 p1+p2=1 其中, p 1 = ∑ i = 0 k p i p1=\sum _{i=0} ^k p_i p1=i=0∑k?pi? m 1 = ∑ i = 0 k i p i p 1 m1 = \frac{\sum _{i=0} ^k ip_i}{p1} m1=p1∑i=0k?ipi?? m 2 = ∑ i = k + 1 L i p i p 2 m2 = \frac{\sum _{i=k+1} ^L ip_i}{p2} m2=p2∑i=k+1L?ipi?? p i p_i pi? 是灰度值为 i 的像素点出现的频率(或概率) 则 σ 2 = p 1 p 2 ( m 1 ? m 2 ) 2 \sigma ^2 = p1p2(m1-m2)^2 σ2=p1p2(m1?m2)2. 进一步化简上式, M G = ∑ i = 0 L i p i MG=\sum _{i=0} ^{L} ip_i MG=i=0∑L?ipi? m = ∑ i = 0 k i p i m=\sum _{i=0} ^{k} ip_i m=i=0∑k?ipi? 其中, m m m 是灰度阈值 k k k 的累加均值(相对整张图片而言的均值,而 m1 是 C1 类的类内均值), M G MG MG 是全局均值,和前文所述一致,则 m 1 = m p 1 m1=\frac{m}{p1} m1=p1m? m 2 = M G ? m p 2 m2=\frac{MG-m}{p2} m2=p2MG?m? 由此可的最终的类间方差公式: σ 2 = ( M G ? p 1 ? m ) 2 p 1 ( 1 ? p 1 ) \sigma ^2 = \frac{(MG*p1-m)^2}{p1(1-p1)} σ2=p1(1?p1)(MG?p1?m)2?
结果分析OTSU算法得到的阈值产生了比上述两者都好的分割效果,其按图像的灰度特性,将Lena分成背景和前景两部分,接着遍历阈值,找到使得前景、背景二类间方差最大的阈值,作为二值化的阈值.
参考文献 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/27 7:02:53- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |