遗传算法在图像阈值上的应用

举报
AAAI 发表于 2020/12/28 00:35:53 2020/12/28
【摘要】 基于阈值的应用: 阈值:在图像处理时,受外界光线的干扰一般比较大,假如在阈值分割时采用固定阈值,那么在环境改变时分割效果受影响极大,那么为了避免此影响就必须采用动态阈值,自动求出合适的阈值进行分割。 图像分割是图像处理与计算机视觉领域低层次视觉中最为基础和重要的领域之一,它是对图像进行视觉分析和模式识别的基本前提.阈值法是一种传统的图像分割方法,因其实现简单、计算量小、性...

基于阈值的应用:

阈值:在图像处理时,受外界光线的干扰一般比较大,假如在阈值分割时采用固定阈值,那么在环境改变时分割效果受影响极大,那么为了避免此影响就必须采用动态阈值,自动求出合适的阈值进行分割。

图像分割是图像处理与计算机视觉领域低层次视觉中最为基础和重要的领域之一,它是对图像进行视觉分析和模式识别的基本前提.阈值法是一种传统的图像分割方法,因其实现简单、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术.已被应用于很多的领域。

图像分割简单的讲,就是在一幅图像中,把目标从背景中分离出来,以便于进一步处理。

图像阈值化分割是一种最常用,同时也是最简单的图像分割方法,它特别适用于目标和背景占据不同灰度级范围的图像。图像阈值化的目的是要按照灰度级,对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域布局有这种一致属性。这样的划分可以通过从灰度级出发选取一个或多个阈值来实现。

 

阈值分割方法分为以下3类:
1) 全局阈值:T=T[p(x,y)〕,即仅根据f(x,y)来选取阈值,阈值仅与各个图像像素的本身性质有关。
2) 局部阈值:T=T[f(x,y),p(x,y)],阈值与图像像素的本身性质和局部区域性质相关。
3) 动态阈值:T=T[x,y,f(x,y),p(x,y)],阈值与像素坐标,图像像素的本身性质和局部区域性质相关。

 

把白色与黑色之间按对数关系分成若干级,称为“灰度等级”。范围一般从0到255,白色为255,黑色为0,故黑白图片也称灰度图像,在医学、图像识别领域有很广泛的用途。

灰度图像是一种具有从黑到白256级灰度色阶或等级的单色图像。该图像中的每个像素用8位数据表示,因此像素点值介于黑白间的256种灰度中的一种。该图像只有灰度等级,而没有颜色的变化。

 

那么什么叫图片的灰度化呢?其实很简单,就是让像素点矩阵中的每一个像素点都满足下面的关系:R=G=B(就是红色变量的值,绿色变量的值,和蓝色变量的值,这三个值相等,“=”的意思不是程序语言中的赋值,是数学中的相等),此时的这个值叫做灰度值。

 

灰度处理的方法:

       一般灰度处理经常使用两种方法来进行处理。

   方法1:

          灰度化后的R=(处理前的R + 处理前的G +处理前的B)/ 3

          灰度化后的G=(处理前的R + 处理前的G +处理前的B)/ 3

          灰度化后的B=(处理前的R + 处理前的G +处理前的B)/ 3

方法2:

灰度化后的R =  处理前的R * 0.3+ 处理前的G * 0.59 +处理前的B * 0.11

灰度化后的G =  处理前的R * 0.3+ 处理前的G * 0.59 +处理前的B * 0.11

灰度化后的B =  处理前的R * 0.3+ 处理前的G * 0.59 +处理前的B * 0.11

设置一个阈值,然后计算类间方差大小,判断是不是最佳阈值。

 

 

阈值分割法可以说是图像分割中的经典方法,它利用图像中要提取的目标与背景在灰度上的差异,通过设置阈值来把像素级分成若干类,从而实现目标与背景的分离。

    一般流程:通过判断图像中每一个像素点的特征属性是否满足阈值的要求,来确定图像中的该像素点是属于目标区域还是背景区域,从而将一幅灰度图像转换成二值图像。

                                                    

直方图:

直方图显示图像数据时会以左暗又亮的分布曲线形式呈现出来,而不是显示原图像数据,并且可以通过算法来对图像进行按比例缩小,且具有图像平移、旋转、缩放不变性等众多优点。直方图在进行图像计算处理时代价较小,所以经常用于图像处理!

利用直方图进行分析,并根据直方图的波峰和波谷之间的关系,选择出一个较好的阈值。这样方法,准确性较高,但是只对于存在一个目标和一个背景的,且两者对比明显的图像,且直方图是双峰的那种最有价值。

 

 

 

最大类间方差法(Otsu):

OTSU是一种使用最大类间方差的自动确定阈值的方法。它是按图像的灰度特性,将图像分成背景和目标两部分,或者说,是寻找一个阈值为K,将图像的颜色分为1,2.....K和K+1.....256两部分。

如何确定这个阈值K?算法分类的原理是让背景和目标之间的类间方差最大,因为背景和目标之间的类间方差越大,说明构成图像的2部分的差别越大,错分的可能性越小。下面进行公式推导:

首先是符号说明:对于图像I(x,y),前景(即目标)和背景的分割阈值记作T,属于前景的像素点数占整幅图像的比例记为ω0,其平均灰度μ0;背景像素点数占整幅图像的比例为ω1,其平均灰度为μ1。图像的总平均灰度记为μ,类间方差记为g。假设图像的背景较暗,并且图像的大小为M×N,图像中像素的灰度值小于阈值T的像素个数记作N0,像素灰度大于阈值T的像素个数记作N1。

                                              

当方差g最大时,可以认为此时前景和背景差异最大,此时的灰度T是最佳阈值。类间方差法对噪声以及目标大小十分敏感,它仅对类间方差为单峰的图像产生较好的分割效果。

 

基于OTSU算法和基本粒子群优化算法的双阈值图像分割:

以阈值作为粒子,即两维,函数以最大类间方差大小计算(ThresholdOTSU)为基准函数,在计算大小时先获得灰度图像的总平均灰度值,再计算。

输入图片I,将输入转换为无符号8位整型,设置灰度级为256级,

  counts = imhist(I,num_bins);

  %imhist(I,n)其中,I为灰度的输入图像,n为指定的灰度级数目,缺省值为256;

  %imhist(X,map)就算和显示索引色图像X的直方图,map为调色板。

  %[counts,x]=imhist()

  %用stem(x,counts)同样可以显示直方图。counts和x分别为返回直方图数据向量和相应的彩色向量。

 %counts:每一个灰度级下的像素点的个数

Matlab:imread 读取图片 返回图片某像素点的b,g,r值

p = counts / sum(counts);%每一个灰度级下的像素点的个数除以总的像素点得到该灰度级发生的概率

omega = cumsum(p);%求累加和。按行累加,即概率分布

mu = cumsum(p .* (1:num_bins)');%灰度级的累加和

本文摘自网络,如果有侵权可以联系删除。

 

文章来源: blog.csdn.net,作者:αβγθ,版权归原作者所有,如需转载,请联系作者。

原文链接:blog.csdn.net/weixin_38022166/article/details/105449427

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。