2019-07-02 22:08:48 qq_37486501 阅读数 188
  • 深度学习图像处理之垃圾分类

    图像分类是图像处理领域的基本任务,同时也是深度学习领域的“Hello Word”,掌握好相关的基础知识,才能更好地开展识别、分割、去噪等更加复杂的任务。本课程将以当下最火热的垃圾分类作为主题,手把手地带领大家实现图像分类任务的完整过程。课程可以分为三个板块: (1)深度学习在图像处理领域的发展过程; (2)解析经典的卷积神经网络; (3)垃圾分类实战。本课程将使用Pytorch深度学习框架进行实战,并在ubuntu系统上进行演示,包括:不同标注文件下的数据集读取、编写卷积神经网络、训练垃圾分类数据集、测试训练网络模型、网络可视化、性能评估等。

    586 人正在学习 去看看 郭冰洋

数字图像处理中的图像分割

  1. 图像分割: 将图像分割成若干个互不相交的区域
  2. 基于灰度的不连续性
    (1): 边缘检测
    [
    基于一阶微分的各种梯度算子:
    基于二阶微分的拉普拉斯算子
    高斯-拉普拉斯算子(LOG算子): 用高斯平滑去噪, 用拉普拉斯进行边缘检测
    ]
    (2):轮廓提取与跟踪
    轮廓提取: 掏空内部点, 背景白前景黑, 从左上角扫描为“黑”=0, 且8邻域也都为黑, 则说明该像素点是目标物体内部点, 置”白“=1
    轮廓跟踪: 顺序地找出目标区域边界上的像素点, 以跟踪目标边界, 并且同时记录边界信息(边界链码)
    (3):Hough变换
  3. 基于灰度的相似性
    (1):灰度阈值分割:
    用一个或者几个灰度阈值T 将图像的灰度级范围分成几个部分, 将每个像素的灰度值和阈值相比较, 根据比较结果将像素归类——前景目标与背景区分开
    (2): 基于区域的分割
    [
    区域生长: 灰度相似则扩展
    区域的分裂与合并 : 按某种一致性准则, 不断分裂, 合并区域
    ]
2018-12-21 18:06:31 HHH_ANS 阅读数 3414
  • 深度学习图像处理之垃圾分类

    图像分类是图像处理领域的基本任务,同时也是深度学习领域的“Hello Word”,掌握好相关的基础知识,才能更好地开展识别、分割、去噪等更加复杂的任务。本课程将以当下最火热的垃圾分类作为主题,手把手地带领大家实现图像分类任务的完整过程。课程可以分为三个板块: (1)深度学习在图像处理领域的发展过程; (2)解析经典的卷积神经网络; (3)垃圾分类实战。本课程将使用Pytorch深度学习框架进行实战,并在ubuntu系统上进行演示,包括:不同标注文件下的数据集读取、编写卷积神经网络、训练垃圾分类数据集、测试训练网络模型、网络可视化、性能评估等。

    586 人正在学习 去看看 郭冰洋

1 - 引言

在图像识别中,如果可以将图像感兴趣的物体或区别分割出来,无疑可以增加我们图像识别的准确率,传统的数字图像处理中的分割方法多数基于灰度值的两个基本性质

  • 不连续性
    以灰度突变为基础分割一副图像,比如图像的边缘
  • 相似性
    根据一组预定义的准则将一副图像分割为相似的区域。阈值处理、区域生长、区域分裂和区域聚合都是这类方法的例子。
    边缘检测算法中我们学习了如何利用不连续性来分割图像。
    本文将从相似性这个角度,学习使用阈值处理、基于区域、和基于形态学的分水岭分割图像

2 - 阈值处理

由于阈值处理直观、实现简单且计算速度快,因此图像阈值处理在图像分割应用中处于核心地位

2.1 - 基础知识

下图灰度直方图对应图像f(x,y),然后f(x,y)>T的任何点(x,y)称为一个对象点;否则将该点称为背景点。分割后的图像g(x,y):
g(x,y)={1f(x,y)>T0f(x,y)Tg(x,y)=\begin{cases} 1 & f(x,y)>T \\ 0& f(x,y)\leq T \end{cases}

当T时一个适用于整个图像的常数时,该公式给出的处理称为全局阈值处理。

在这里插入图片描述

但是要求两个以上阈值的分割问题很难解决(通常是不可能的),而较好的结果通常可以用其他方法得到。

我们可以很自然的得出灰度阈值的成功与否直接关系到可区分的直方图模式的谷的宽度和深度,而影响波谷特性的关键因素是:

  1. 波峰间的间隔(波峰离的越远,分离这些模式的机会越好)
  2. 图像中的噪声内容(模式随噪声的增加而展宽)
  3. 物体和背景的相对尺寸
  4. 光源的均匀性
  5. 图像反射特性的均匀性

2.2 - 基本的全局阈值处理

在大多数应用中,通常图像之间有较大的变化,即使全局阈是一种合适的方法,对每一幅图像有能力自动估计阈值的算法也是需要的。下面的迭代算法可以用于这一目的:

  1. 为全局阈值T选择一个初始估计值
  2. 利用T分割图像。这将产生两组像素:G1G_1由灰度值大于T的所有像素组成,G2G_2由所有小于等于T的像素组成。
  3. G1G_1G2G_2的像素分别计算平均灰度值(均值)m1m_1m2m_2
  4. 计算一个新的阈值:T=12(m1+m2)T = \frac{1}{2}(m_1+m_2)
  5. 重复步骤2到步骤4,直到连续迭代中的T值间的差小于一个预定义的参数ΔT\Delta T为止
    在这里插入图片描述

2.3 - 用Otsu方法的最佳全局阈值处理

阈值处理可视为一种统计决策理论问题,其目的是在把像素分配给两个或多组(也称分类)的过程中引入的平均误差最小。Otsu方法(Otsu[1979])是另一种有吸引力的方案。

Otsu方法有一个重要的特性,即它完全以在一幅图像的直方图上执行计算为基础。

一幅图像有MxN个像素,L个不同的灰度级,nin_i表示灰度级为i的像素个数。那么图像中像素总数MN为MN=n0+n1++nL1MN=n_0+n_1+\dots+n_{L-1}

归一化的直方图pi=ni/MNp_i=n_i/MN,由此有
i=0L1pi=1,pi0\sum_{i=0}^{L-1}p_i=1, p_i \geq 0

现在,我们假设选择一个阈值T(k)=k,0<k<L1T(k)=k, 0< k < L-1,并使用它把输入图像阈值化处理为两类C1C_1C2C_2,其中,C1C_1由图像中灰度值在范围[0,k]内的所有像素组成,C2C_2由灰度值在范围[k+1,L-1]内的所有像素组成。用该阈值,像素被分到类C1C_1中的概率P1(k)P_1(k)由如下的积累和给出:
P1(k)=i=0kpiP_1(k)=\sum_{i=0}^k p_i

因此分配到C1C_1的像素的平均灰度值为:
m1(k)=i=0kiP(i/C1)m_1(k)=\sum_{i=0}^kiP(i/C_1)
=i=0kiP(C1/i)P(i)/P(C1)=\sum_{i=0}^kiP(C_1/i)P(i)/P(C_1)
=1P1(k)i=0kiP(i)=\frac{1}{P_1(k)}\sum_{i=0}^kiP(i)

第二行来自贝叶斯公式:
P(A/B)=P(B/A)P(A)/P(B)P(A/B)=P(B/A)P(A)/P(B)

类似的我们也可以得到C2C_2的像素平均灰度值

然后我们可以得到整个图像的平均灰度值
mG=i=0L1iP(i)m_G=\sum_{i=0}^{L-1}iP(i)

为了评价阈值K的“质量”,我们使用归一化的无量纲矩阵

η=σB2σG2\eta =\frac{\sigma^2_B}{\sigma^2_G}

其中,σG2\sigma_G^2是全局方差[即图像中所有像素的灰度方差]
σG2=i=0L1(imG)2pi\sigma_G^2=\sum_{i=0}^{L-1}(i-mG)^2p_i

σB2\sigma_B^2为类间方差,它定义为
σB2=P1(m1mG)2+P2(m2mG)2\sigma_B^2=P_1(m_1-m_G)^2+P_2(m_2-m_G)^2
该表达式还可写为
σB2=P1P2(m1m2)2\sigma_B^2=P_1P_2(m_1-m_2)^2
=(mGP1m)2P1(1P1)=\frac{(m_GP_1-m)^2}{P_1(1-P_1)}

从上面公式可以看出,两个均值m1m_1m2m_2彼此隔得越远,σB2\sigma_B^2越大,这表明类间方差是类之间的可分性度量。因为σG2\sigma_G^2是一个常数,由此得出η\eta也是一个可分性度量,且最大化这一度量等价于最大化σB2\sigma_B^2

一旦得到可以使σB2(k)\sigma_B^2(k^*)最大的kk^*,便可以得到分割图像:
g(x,y)={1f(x,y)>k0f(x,y)kg(x,y)=\begin{cases} 1 & f(x,y)>k^* \\ 0& f(x,y)\leq k^* \end{cases}

Otsu算法小结如下:

  1. 计算输入图像的归一化直方图。使用pi,i=0,1,2,,L1p_i,i=0,1,2,\dots,L-1表示该直方图的各个分量
  2. 计算累积和Pi(k)P_i(k)
  3. 计算累积均值m(k)m(k)
  4. 计算全局灰度均值mGm_G
  5. 计算类间方差σB2(k)\sigma_B^2(k)
  6. 得到Otsu阈值kk^*,如果最大值不唯一,则使用平均值
  7. 计算可分性度量η\eta^*
    在这里插入图片描述

OpenCV同样将这一经典算法封装成了函数

#coding:utf-8
import cv2
import numpy as np
from matplotlib import pyplot as plt

image = cv2.imread("images/gamma.jpg")
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

plt.subplot(131), plt.imshow(image, "gray")
plt.title("source image"), plt.xticks([]), plt.yticks([])
plt.subplot(132), plt.hist(image.ravel(), 256)
plt.title("Histogram"), plt.xticks([]), plt.yticks([])
ret1, th1 = cv2.threshold(gray, 0, 255, cv2.THRESH_OTSU)  #方法选择为THRESH_OTSU
plt.subplot(133), plt.imshow(th1, "gray")
plt.title("OTSU,threshold is " + str(ret1)), plt.xticks([]), plt.yticks([])
plt.show()

在这里插入图片描述

2.4 - 用图像平滑改善全局阈值处理

噪声会将简单的阈值处理问题变为不可解决的问题。当噪声不能在源头减少,并且阈值处理又是所选择的分割方法时,通常能增强性能的一种技术是,在阈值处理之前平滑图像。
经平滑和分割后的图像,由于对边界的模糊,会造成物体和背景间的边界稍微有点失真。对一幅图像平滑越多,分割后的结果中的边界误差就越大。

2.5 - 利用边缘改进全局阈值处理

f(x,y) 表示输入图像,利用边缘改进全局阈值处理算法如下:

  1. 采用特征检测中讨论的任何一种方法来计算一幅边缘图像,无论是 f(x,y) 梯度的幅度还是拉普拉斯的绝对值均可。
  2. 指定一个阈值 T。
  3. 用步骤2中的阈值对步骤1中的图像进行阈值处理,产生一幅二值图像 gT(x,y)g_T(x,y)
    ​在从 f(x,y) 中选取对应于“强”边缘像素的下一步中,该图像用做一幅模板图像。
  4. 仅用 f(x,y) 中对应于 gT(x,y)g_T(x,y)中像素值为1的位置的像素计算直方图。

在这里插入图片描述

3 - 基于区域的分割

3.1 - 区域生长

区域生长的基本方法是从一组“种子”点开始,将于种子预先定义的性质相似的那些领域像素添加到每个种子上来形成这些生长区域(如特定范围的灰度或颜色)

令f(x,y)表示一个输入图像阵列;S(x,y)表示一个种子陈列,陈列中种子点位置处为1,其他位置处为0;Q表示在每个位置(x,y)所用的属性。假设陈列f和s的尺寸相同。基于8连接的一个基本区域生长算法可以说明如下:

  1. 在S(x,y)中寻找所有连通分量,并把每个连通分量腐蚀为一个像素;把找到的所有这种像素标记为1,把S中的所有其他像素标记为0
  2. 在坐标对(x,y)处形成图像fQf_Q:如果输入图像在该坐标处满足给定的属性Q,则令fQ(x,y)=1f_Q(x,y)=1,否则令fQ(x,y)=0f_Q(x,y)=0
  3. 令g是这样形成的图像:把fQf_Q中未8连通种子的所有1值点,添加到S中的每个种子店
  4. 用不同的区域标记标记处g中的每个连通分量。区域生长得到的分割图像
import numpy as np
import cv2

class Point(object):
    def __init__(self,x,y):
        self.x = x
        self.y = y

    def getX(self):
        return self.x
    def getY(self):
        return self.y

def getGrayDiff(img,currentPoint,tmpPoint):
    return abs(int(img[currentPoint.x,currentPoint.y]) - int(img[tmpPoint.x,tmpPoint.y]))

def selectConnects(p):
    if p != 0:
        connects = [Point(-1, -1), Point(0, -1), Point(1, -1), Point(1, 0), Point(1, 1), \
                    Point(0, 1), Point(-1, 1), Point(-1, 0)]
    else:
        connects = [ Point(0, -1),  Point(1, 0),Point(0, 1), Point(-1, 0)]
    return connects

def regionGrow(img,seeds,thresh,p = 1):
    height, weight = img.shape
    seedMark = np.zeros(img.shape)
    seedList = []
    for seed in seeds:
        seedList.append(seed)
    label = 1
    connects = selectConnects(p)
    while(len(seedList)>0):
        currentPoint = seedList.pop(0)

        seedMark[currentPoint.x,currentPoint.y] = label
        for i in range(8):
            tmpX = currentPoint.x + connects[i].x
            tmpY = currentPoint.y + connects[i].y
            if tmpX < 0 or tmpY < 0 or tmpX >= height or tmpY >= weight:
                continue
            grayDiff = getGrayDiff(img,currentPoint,Point(tmpX,tmpY))
            if grayDiff < thresh and seedMark[tmpX,tmpY] == 0:
                seedMark[tmpX,tmpY] = label
                seedList.append(Point(tmpX,tmpY))
    return seedMark


img = cv2.imread('images/gamma.jpg',0)
seeds = [Point(10,10),Point(82,150),Point(20,300)]
binaryImg = regionGrow(img,seeds,10)
cv2.imshow('img',img)
cv2.imshow(' ',binaryImg)
cv2.waitKey(0)

在这里插入图片描述

3.2 - 区域分裂与聚合

这种方法是将一幅图像细分为一组任意不相交区域,然后聚合和/或分裂这些区域。

在这里插入图片描述

可总结为:

  1. 对满足Q(R_i)=FALSE的任何区域RiR_i分裂为4个不相交的象限区域
  2. 当不可能进一步分裂时,对满足条件Q(RjRk)=TRUEQ(R_j\cup R_k)=TRUE的任意两个邻接区域RjR_jRkR_k进行聚合
  3. 当无法进一步聚合时,停止操作

习惯上要规定一个不能再进一步执行分裂的最小四象限的尺寸
在这里插入图片描述

4 - 基于形态学分水岭的分割

4.1 - 背景知识

形态学分水岭分割将前面讨论的分割方法中的许多概念进行了具体化,因此通常会产生更稳定的分割结果,包括连接的分割边界。
分水岭的概念是以三维方式来形象化一幅图像为基础的:两个空间坐标作为灰度的函数,如图2所示。在这种“地形学”解释中,我们考虑三种类型的点:

  1. 属于一个区域最小值的点;
  2. 把一点视为一个水滴,如果把这些点放在任意位置上,水滴一定会下落到某个最小值点;
  3. 处在该点的水会等概率地流向不止一个这样的最小值点。
    对于一个特定的区域最小值,满足条件(b)的最小值点的集合称为该最小值的汇水盆地或分水岭。满足条件(3)的点形成地面的峰线,它称为分割线或分水线。

在这里插入图片描述

4.2 - 分水岭分割算法

M1,M2,,MRM_1,M_2,\dots,M_R是地图图像g(x,y)g(x,y)中区域最小值点的坐标集。令C(Mi)C(M_i)是与区域最小值MiM_i相关的汇水盆地中的点的坐标集,符号minminmaxmax表示g(x,y)g(x,y)的最小值和最大值,最后令T[n]T[n]表示满足g(s,t)&lt;ng(s,t)&lt;n的坐标(s,t)的集合,即:
KaTeX parse error: Expected 'EOF', got '\right' at position 6: T[n]=\̲r̲i̲g̲h̲t̲\{(s,t)|g(s,t)<…
Cn(Mi)C_n(M_i)表示汇水盆地中与淹没阶段n的最小值MiM_i相关联的点的坐标集,即:
Cn(Mi)=C(Mi)T[n]C_n(M_i)=C(M_i)\bigcap T[n]
接下来,令C[n]C[n]表示阶段n中已被水淹没的汇水盆地的并集:
C[n]=i=1RCn(Mi)C[n]=\bigcup_{i=1}^RC_n(M_i)
然后,令C[max+1]C[max+1]表示所有汇水盆地的并集:
C[max+1]=i=1RC(Mi)C[max+1]=\bigcup_{i=1}^RC(M_i)
寻找分水先的算法使用C[min+1]=T[min+1]C[min+1]=T[min+1]来初始化,然后,该算法进行递归处理,由C[n1]C[n-1]计算C[n1]C[n-1]计算C[n]C[n]
C[n1]C[n-1]求得C[n]C[n]过程如下:令Q表示T[n]T[n]中的连通分量的集合,然后对于每个连通分量qQ[n]q\in Q[n],有如下三种可能性:

  1. qC[n1]q\bigcap C[n-1]为空集
  2. qC[n1]q\bigcap C[n-1]包含C[n1]C[n-1]的一个连通分量
  3. qC[n1]q\bigcap C[n-1]包含C[n1]C[n-1]的一个以上的连通分量

C[n1]C[n−1]构建$ C[n]1取决于这三个条件中的哪个条件成立。 遇到一个新的最小值时,条件1发生,这种情况下,连通分量 q $并入 C[n1]C[n−1]中形成$ C[n]q2q。 当 q 位于某些局部最小值的汇水盆地内时,条件2发生,这种情况下,q 并入 C[n−1]$中形成 $C[n] $。
当遇到全部或部分分隔两个或多个汇水盆地的山脊线时,条件3发生。进一步淹没会导致这些汇水盆地中的水位聚合。因此,必须在 q 内构筑一个水坝(如果涉及两个以上的汇水盆地,就要构筑多个水坝)以阻止汇水盆地间的水溢出。

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

img = cv2.imread('images/1.jpg')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray,0,255,cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)


# noise removal
kernel = np.ones((3,3),np.uint8)
opening = cv2.morphologyEx(thresh,cv2.MORPH_OPEN,kernel, iterations = 2) # 形态开运算

# sure background area
sure_bg = cv2.dilate(opening,kernel,iterations=3)

# Finding sure foreground area
dist_transform = cv2.distanceTransform(opening,cv2.DIST_L2,5)
ret, sure_fg = cv2.threshold(dist_transform,0.7*dist_transform.max(),255,0)

# Finding unknown region
sure_fg = np.uint8(sure_fg)
unknown = cv2.subtract(sure_bg,sure_fg)


# Marker labelling
ret, markers = cv2.connectedComponents(sure_fg)

# Add one to all labels so that sure background is not 0, but 1
markers = markers+1

# Now, mark the region of unknown with zero
markers[unknown==255] = 0

markers = cv2.watershed(img,markers)
img[markers == -1] = [255,0,0]


cv2.imshow('img',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

在这里插入图片描述

2017-01-05 10:07:28 sinat_36164665 阅读数 5374
  • 深度学习图像处理之垃圾分类

    图像分类是图像处理领域的基本任务,同时也是深度学习领域的“Hello Word”,掌握好相关的基础知识,才能更好地开展识别、分割、去噪等更加复杂的任务。本课程将以当下最火热的垃圾分类作为主题,手把手地带领大家实现图像分类任务的完整过程。课程可以分为三个板块: (1)深度学习在图像处理领域的发展过程; (2)解析经典的卷积神经网络; (3)垃圾分类实战。本课程将使用Pytorch深度学习框架进行实战,并在ubuntu系统上进行演示,包括:不同标注文件下的数据集读取、编写卷积神经网络、训练垃圾分类数据集、测试训练网络模型、网络可视化、性能评估等。

    586 人正在学习 去看看 郭冰洋

图像分割

图像分割,广义来说,是根据图像的某些特征或特征集合例如灰度、颜色、纹理等的相似性准则对图像像素进行分组聚类,把图像平面划分成若干个具有某些一致性的不重叠区域。这使得同一区域中的像素特征是类似的,即具有一致性而不同区域间像素的特征存在突变,即具有非一致性。

条件(1)指出在对一幅图像的分割结果中全部子区域的总和并集应能包括图像中所有像素就是原图像,或者说分割应将图像中的每个像素都分进某个子区域中。

条件(2)指出在分割结果中各个子区域是互不重叠的,或者说在分割结果中一个像素不能同时属于两个区域。

条件(3)指出在分割结果中每个子区域都有独特的特性,或者说属于同一个区域中的像素应该具有某些相同特性。

条件(4)指出在分割结果中,不同的一子区域具有不同的特性,没有公共元素,或者说属于不同区域的像素应该具有一些不同的特性。

条件(5)要求分割结果中同一个子区域内的像素应该是连通的,即同一个子区域内的任意两个像素在该子区域内互相连通,或者说分割得到的区域是一个连通组元。最后需要指出的是,实际应用中图像分割不仅要把一幅图像分成满足上面五个条件的各具特性的区域而且需要把其中感兴趣的目标区域提取出来,只有这样才算真正完成了图像分割的任务。

图像分割方法主要分为:基于边缘检测的图像分割方法,基于区域的图像分割方法和基于特定理论的图像分割方法。

一、基于边缘检测的图像分割方法

边缘是指其周围像素灰度有阶跃变化的像素的集合,边缘检测技术可以按照处理的顺序分为并行边缘检测和串行边缘检测。

1.1图像分割算法评价

偏差法和优度法

偏差法一般需要提供一个理想分割图像作为比较标准,依此来计算实际分割结果与理想分割图像的差别,这种差别可以是基于错误分割像素点的位置,也可以是基于错误分割的像素数等。 

优度法一般是建立在人的视觉基础上,以某些图像特征为依据来评价分割效果。优度法在没有正确分割的先验知识的情况下,仅仅根据分割图像计算某种优度量值来评价分割算法的好坏。

目前常用的有区域一致性、区域对比度、区域形状参数等

(1)区域一致性

  

 

(4)综合评价函数

由于图像信息是复杂的,有时用一种测量参数无法准确衡量分割图像的质量,将几种测量参数综合考虑,根据图像分割的目的对不同测量参数赋予不同的权值,以得到准确的评价结果。在这里采用下面的综合评价函数                
2019-05-22 11:05:52 moqisaonianqiong 阅读数 110
  • 深度学习图像处理之垃圾分类

    图像分类是图像处理领域的基本任务,同时也是深度学习领域的“Hello Word”,掌握好相关的基础知识,才能更好地开展识别、分割、去噪等更加复杂的任务。本课程将以当下最火热的垃圾分类作为主题,手把手地带领大家实现图像分类任务的完整过程。课程可以分为三个板块: (1)深度学习在图像处理领域的发展过程; (2)解析经典的卷积神经网络; (3)垃圾分类实战。本课程将使用Pytorch深度学习框架进行实战,并在ubuntu系统上进行演示,包括:不同标注文件下的数据集读取、编写卷积神经网络、训练垃圾分类数据集、测试训练网络模型、网络可视化、性能评估等。

    586 人正在学习 去看看 郭冰洋

中值滤波

利用中值滤波的方法对图像进行平滑处理,函数如下

fig_med = medfilt2(fig,[m,n]) % 对矩阵[m,n]进行中值滤波

类间方差阈值算法

利用类间方差阈值算法对滤波处理后图像进行分割处理,获取分割图像;
子函数如下所示:

function[threshold]=Ostu(fig)
s=256^2;
N=zeros(256,1);  %-----------各个灰度值出现次数
T=zeros(256,1);

for k=0:255      %-----------各个灰度值出现次数计数
    num=size(find(fig==k),1);
    N(k+1,1)=num;
end

for t=1:256
    w0=0; w1=0; u0=0; u1=0;
    
    for m=1:t
        w0=w0+N(m,1)/s;
        u0=u0+(m-1)*N(m,1)/s;
    end
    for m =t:256
        w1=w1+N(m,1)/s;
        u1=u1+(m-1)*N(m,1)/s;
    end
    u0=u0/w0;
    u1=u1/w1;
    T(t,1)=w0*w1*(u1-u0)^2;
end

threshold=find(T==max(max(T)))-1;
end

图像分割

m=3;
n=3;
fig = imread('dock.png');
fig = rgb2gray(fig);
subplot(1,3,1);
imshow(fig);
title('原图');

fig_med = medfilt2(fig,[m,n]);   %-------------中值滤波器

threshold=Ostu(fig_med);

fig_segment=fig_med;
fig_segment(fig_segment<threshold)=0;
fig_segment(fig_segment>=threshold)=255;

subplot(1,3,2);
imshow(fig_med);
title('中值滤波');

subplot(1,3,3);
imshow(fig_segment);
title('图像分割');

展示效果

笔者做了一个GUI界面,可以输入任意m,n值来改变中值滤波的效果。

原图:
Alt

效果如下:
在这里插入图片描述

2018-11-26 17:01:05 qq_40980917 阅读数 1974
  • 深度学习图像处理之垃圾分类

    图像分类是图像处理领域的基本任务,同时也是深度学习领域的“Hello Word”,掌握好相关的基础知识,才能更好地开展识别、分割、去噪等更加复杂的任务。本课程将以当下最火热的垃圾分类作为主题,手把手地带领大家实现图像分类任务的完整过程。课程可以分为三个板块: (1)深度学习在图像处理领域的发展过程; (2)解析经典的卷积神经网络; (3)垃圾分类实战。本课程将使用Pytorch深度学习框架进行实战,并在ubuntu系统上进行演示,包括:不同标注文件下的数据集读取、编写卷积神经网络、训练垃圾分类数据集、测试训练网络模型、网络可视化、性能评估等。

    586 人正在学习 去看看 郭冰洋

电子科技大学 格拉斯哥学院 2017级谭茗珊
1.背景:
医学图像分割技术的发展是一个从人工分割到半自动分割和自动分割的逐步发展过程。早期的图像分割完全是靠人工完成的。完全的人工分割方法是在原始图像上直接画出期望的边界。这种方法费时费力,分割结果完全依赖于分割者的解剖知识和经验,而且分割结果难以再现;半自动的分割方法大大减少了人为因素的影响,而且分割速度快,分割精度高,但操作者的知识和经验仍然是图像分割过程的一个重要组成部分。近年来,由于大量的新兴技术如模糊技术和人工智能技术在图像分割中的应用,图像分割领域中也涌现出一些自动的分割技术。自动分割方法能完全脱离人为干预,由计算机实现医学图像分割的全过程。由于自动分割方法的运算量较大,目前大部分的自动分割方法都是在工作站上实现的。
2.摘要:
医学图像处理中图像分割是最具挑战性和最富有挑战性的课题,结构分析,运动分析,三维可视化等一系列操作均是以准确的图像分割为基础。由于医学影像设备成像技术的特点,使得图像存在噪声,导致图像中目标物体部分边缘不清晰,给图像分割造成一定难度。通过运用ITK-SNAP软件对图像进行预处理,使用python并搭建tensorflow环境,对图像加以训练和测试,不断改进算法改进现有MRI脑肿瘤图像分割算法,利用模糊C均值算法、区域增长算法、以及结合模糊相似度理论和区域结构识别技术的分割算法实现脑肿瘤MRI图像的分割,使其能够对图像进行准确识别,定性,定量分析,结果的准确性依据分割评价体系得以判断。

3.图像分割处理
3.1非线性平滑处理
由于磁共振图像在采集过程中,有脉冲干扰,因此图像具有较强的噪声,为了消除噪声,选用非线性平滑中值滤波预处理图片;
中值滤波是一种去除噪声的非线性处理方法。其基本思想是把数字图像中一点的值在该点的一个领域中各值的中值替代。
3.2全局阈值分割
一般图像分割是基于图像二值化的基础上进行的,其目的是可减少图像的灰度分布范围,简化运算,从而大大提高分割速度。
但如遇到特殊情况,例如脑部的头骨,高密度,灰度值高,处于亮区域,而我们感兴趣的区域(肿瘤)的灰度是软组织,灰度值低,处于暗区域。而肿瘤周围的软组织也是灰度值低的暗区域,与肿瘤的区别很小。此时,原始方法已不再能分辨。所以在程序中,必须舍弃。现有的二值化自动分割函数,改为手动的全局阈值分割。通过观察,设置特定的阈值点,从而进行有效手动分割,将处于亮区域的头骨和其他组织分割开,又保留了其他组织的原有特性。将其作为预处理图像

3.3肿瘤分割
经过手动的全局阈值分割后的图片,虽然消除了头骨的部分,但由于我们感兴趣的部分(肿瘤)并没有从周围组织里面分割出来,因此还需要进一步的处理。由于肿瘤和周围的组织灰度值比较接近,我们分别选用最大方差阈值法和形态学两种方法来处理。
3.3.1最大方差阈值法分割
最大方差阈值也叫大津阈值,他是在差别域最小二乘法原理的基础上推导出来的,不管是图像的直方图有无明显的双峰,此方法都能取得很好的效果。其原理是把直方图在某一阈值处分割成为两组,当被分成的两组间的方差为最大时,决定阈值。
3.3.2形态学分割
区域生长的基本思想是将具有相似性质的像素结合起来构成区域,具体是先对每个需要分割的区域找一个种子像素作为生长起点,然后将种子像素周围区域中与种子像素有相同或相似性质的像素种子合并到种子像素所在区域中,将这些新像素当作种子像素继续进行上面的过程,直到再也没有满足条件的像素可以被包括进来,这样,一个区域就生成了。经实验显示,采用形态学进行分割之后,脑部的肿瘤可以清晰地显示出来,但与此同时一些血管同时也显示出来了。
具体的算法步骤为:
求出图像的梯度;
采用圆形结构元素执行形态学开操作运算;
进行腐蚀运算;
采用圆形结构元素执行形态学闭运算操作;
进行膨胀运算;
经过开闭运算后,图像进行重建;
将重建的图像叠加在原有图像上。

4.结论:
由于医学图像的复杂多样性和分割问题的困难性,通常针对某项任务选用合适的算法,目前没有一个分割方法能适用于不同的任务,医学图像的分割方法有很多,最常用的方法是阈值分割法和形态学分割法。但通常,直接采用普通的阈值分割和形态学分割法,很难提取到满意的目标图像。本文分别对这两种方法稍作改进,采用图像阈值法时,先进行手动的阈值分割,然后再使用最大方差阈值法,效果更好;采用形态学分割时,圆形结构元素作为种子,也得到了目标图像。因此尽管医学图像分割比较复杂,只要灵活采用图像分割方法,可以得到比较满意的分割图像。

5.参考文献
[1]李彦东.卷积神经网络研究综述
[2]田捷.医学图像与医学分析[M].
[3]陈灵娜.一种新的肝肿瘤CT图像分割方法[J]
[4]马子睿.基于数字形态学的医学图像分割研究方法[J]
[5]俞海平.MRI脑肿瘤图像分割与矩特征研究[J]

图像分割

阅读数 1121

图像分割技术

阅读数 315

博文 来自: qq_19924321
没有更多推荐了,返回首页