IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 数字图像处理5之图像分割 -> 正文阅读

[人工智能]数字图像处理5之图像分割

1. 概念

把图像划分成若干个特定的、具有独特性质的区域,并提取其中感兴趣目标的基数和过程。它是由图像处理到图像分析的关键步骤。现有的图像分割方法主要分以下几类:基于阈值的分割方法、基于区域的分割方法、基于边缘的分割方法以及基于特定理论的分割方法等。从数学角度来看,图像分割是将数字图像划分成互不相交的区域的过程。图像分割的过程也是一个标记过程,即把属于同一区域的像素赋予相同的编号。

1998年以来,人工神经网络识别技术已经引起了广泛的关注,并且应用于图像分割。基于神经网络的分割方法的基本思想是通过训练多层感知机来得到线性决策函数,然后用决策函数对像素进行分类来达到分割的目的。这种方法需要大量的训练数据。神经网络存在巨量的连接,容易引入空间信息,能较好地解决图像中的噪声和不均匀问题。选择何种网络结构是这种方法要解决的主要问题。

2. 阈值分割

灰度阈值分割法是一种最常用的并行区域技术,它是图像分割中应用数量最多的一类。阈值分割方法实际上是输入图像f到输出图像g的如下变换:
g ( x , y ) = { 1 , f ( x , y ) > T 0 , f ( x , y ) ≤ T g(x,y)= \begin{cases} 1, & \text {$f(x,y)>T$} \\ 0, & \text{$f(x,y)\leq T$} \end{cases} g(x,y)={1,0,?f(x,y)>Tf(x,y)T?
其中,T为阈值,f(x,y)为点(x,y)的像素值,g(x,y)为分割后的图像。

阈值分割算法的关键是确定阈值,如果能确定一个合适的阈值就可准确地将图像分割开来。阈值确定后,将阈值与像素点的灰度值逐个进行比较,而且像素分割可对各像素并行地进行,分割的结果直接给出图像区域。

阈值包括全局阈值、自适应阈值、最佳阈值等等。

2.1 全局阈值

全局阈值是指整幅图像使用同一个阈值做分割处理,适用于背景和前景有明显对比的图像。它是根据整幅图像确定的:T=T(f)。但是这种方法只考虑像素本身的灰度值,一般不考虑空间特征,因而对噪声很敏感。常用的全局阈值选取方法有利用图像灰度直方图的峰谷法、最小误差法、最大类间方差法、最大熵自动阈值法以及其它一些方法。

import cv2
import numpy as np
from matplotlib import pyplot as plt

img = cv2.imread('coin.png',0)
ret,thresh1 = cv2.threshold(img,127,255,cv2.THRESH_BINARY)
ret,thresh2 = cv2.threshold(img,127,255,cv2.THRESH_BINARY_INV)
ret,thresh3 = cv2.threshold(img,127,255,cv2.THRESH_TRUNC)
ret,thresh4 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO)
ret,thresh5 = cv2.threshold(img,127,255,cv2.THRESH_TOZERO_INV)

titles = ['Original Image','BINARY','BINARY_INV','TRUNC','TOZERO','TOZERO_INV']
images = [img, thresh1, thresh2, thresh3, thresh4, thresh5]

for i in xrange(6):
    plt.subplot(2,3,i+1),plt.imshow(images[i],'gray')
    plt.title(titles[i])
    plt.xticks([]),plt.yticks([])

plt.show()

在这里插入图片描述

2.2 自适应阈值

对于光照不均的图像,全局阈值方法显得苍白无力。自适应阈值应运而生,就是根据桐乡不同区域的亮度分布不同,计算其局部的阈值。通过计算某个邻域(局部)的均值、中值、高斯加权平均(高斯滤波)来确定阈值。

import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('sudoku.png',0)
img = cv.medianBlur(img,5)
ret,th1 = cv.threshold(img,127,255,cv.THRESH_BINARY)
th2 = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_MEAN_C,\
            cv.THRESH_BINARY,11,2)
th3 = cv.adaptiveThreshold(img,255,cv.ADAPTIVE_THRESH_GAUSSIAN_C,\
            cv.THRESH_BINARY,11,2)
titles = ['Original Image', 'Global Thresholding (v = 127)',
            'Adaptive Mean Thresholding', 'Adaptive Gaussian Thresholding']
images = [img, th1, th2, th3]
for i in range(4):
    plt.subplot(2,2,i+1),plt.imshow(images[i],'gray')
    plt.title(titles[i])
    plt.xticks([]),plt.yticks([])
plt.show()

在这里插入图片描述
在这里插入图片描述

2.3 最佳阈值(Otsu)

最佳阈值方法,称之为Otsu算法,即最大类间方差法。下面给出求类间方差原理:
约定如下

  • L个不同灰度级{0,1,2,…,L-1}
  • 数字图像M*N像素
  • n i n_{i} ni?是灰度级为i的像素数; M N = n 0 + n 1 + . . . + n L ? 1 MN=n_{0}+n_{1}+...+n_{L-1} MN=n0?+n1?+...+nL?1?
  • 灰度级i出现的概率 p i = n i / M N p_{i}=n_{i}/MN pi?=ni?/MN

假设图像中的像素按照灰度级用阈值t划分为两类:背景类 C 0 C_{0} C0?和目标类 C 1 C_{1} C1?;背景类 C 0 C_{0} C0?的灰度级为0~t;
目标类 C 1 C_{1} C1?的灰度级为t+1~L-1。

两类出现的概率,分别为:
P 0 ( t ) = ∑ i = 0 t p i P 1 ( t ) = ∑ i = t + 1 L ? 1 p i P_{0}(t)=\sum_{i=0}^t p_{i} \\ P_{1}(t)=\sum_{i=t+1}^{L-1} p_{i} P0?(t)=i=0t?pi?P1?(t)=i=t+1L?1?pi?

两类的平均灰度值分别为(推导参见下方):
m 0 ( t ) = 1 P 0 ( t ) ∑ i = 0 t i p i m 1 ( t ) = 1 P 1 ( t ) ∑ i = t + 1 L ? 1 i p i m_{0}(t) =\frac{1}{P_{0}(t)}\sum_{i=0}^{t} ip_{i} \\ m_{1}(t) =\frac{1}{P_{1}(t)}\sum_{i=t+1}^{L-1} ip_{i} m0?(t)=P0?(t)1?i=0t?ipi?m1?(t)=P1?(t)1?i=t+1L?1?ipi?

图像的总平均灰度值为:
m = ∑ i = 0 L ? 1 i p i m = \sum_{i=0}^{L-1} ip_{i} m=i=0L?1?ipi?

图像中两类的类间方差为:
δ 2 ( t ) = P 0 ( m ? m 0 ) 2 + P 1 ( m ? m 1 ) 2 \delta^2(t) = P_{0}(m-m_{0})^2 + P_{1}(m-m_{1})^2 δ2(t)=P0?(m?m0?)2+P1?(m?m1?)2
定义域 t ∈ [ 0 , L ? 1 ] t\in[0,L-1] t[0,L?1] δ 2 ( t ) \delta^2(t) δ2(t)最大值时的t值,就是要求的最优阈值。

备注:
两类平均灰度值的推导

m 0 ( t ) = ∑ i = 0 t i P ( i ∣ C 0 ) = ∑ i = 0 t i P ( C 0 ∣ i ) P ( i ) P ( C 0 ) = ∑ i = 0 t i p ( i ) P 0 ( t ) m_{0}(t) = \sum_{i=0}^{t} iP(i|C_{0}) \\ = \sum_{i=0}^{t} i \frac{P(C_{0}|i)P(i)}{P(C_{0})} \\ = \sum_{i=0}^{t} i \frac{p(i)}{P_{0}(t)} \\ m0?(t)=i=0t?iP(iC0?)=i=0t?iP(C0?)P(C0?i)P(i)?=i=0t?iP0?(t)p(i)?
其中: P ( C 0 ∣ i ) = 1 P(C_{0}|i) = 1 P(C0?i)=1 P ( C 0 ) P(C_{0}) P(C0?)正是 C 0 C_{0} C0?出现的概率 P 0 ( t ) P_{0}(t) P0?(t)

3. 区域分割

3.1 区域生长法

  • 介绍

区域生长法,是基于区域的图像分割方法。该算法从“种子”开始,即选取一个或一组像素点作为算法的起点,从种子出发判断邻近点是否满足算法定义的相似性准则。若满足则将邻近点归入同一区域,并将其作为新的种子重新“生长”,直至不再有新的点归入区域,算法分割结束。算法定义的相似性准则需要根据具体的情况而定,通常是根据图像的灰度值、矩、纹理等。

  • 应用场景

没有先验知识可以利用时,可以取得最佳的性能,可以用来分割比较复杂的图像。

  • 缺点

空间和时间开销都比较大;通常会造成过度分割。

3.2 分水岭分割

分水岭分割,其思想是,将一幅图像看成一个地形图,灰度值对应地形的高度,高灰度值对应于山峰,低灰度值对应于山谷。水朝地势低的地方流动,直到局部低洼处,即盆地。最终所有的水都处于不同的盆地,盆地之间的山脊成为分水岭

  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2021-09-20 15:47:40  更:2021-09-20 15:48:02 
 
开发: 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 14:30:46-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码