opencv 二值图,python 二值图

  opencv 二值图,python 二值图

  数字图象处理

  Author:louwill

  Machine Learning Lab

  本系列重点梳理不同于当前深度学习的传统数字图像处理基础知识。主要参考资料为《数字图像处理》第四版xsdhxc和yoyo的Gasyori100knock仓库。侧重于案例和代码实现,主要实现工具是Python的numpy和opencv库。Numpy实现为原理,opencv实现为APP。

  本部分主要阐述了图像二值化和对虾的主要原理,并对基于对虾的图像阈值分割有一个简要的了解。

  二值化

  机器学习的特征处理经常使用二进制方法。口红细节和图像二值化是只显示黑白图像的方法。我们来看一个图像二值化的具体例子。基于Numpy的处理方法如下。

  原始图像:

  img=cv2.imread(。/harden . png’)

  灰度和二值化:

  Img=cv2.imread(。/Harden.png )灰度y=0.2126 * img):2)0.7152 * img):3360,1) 0.07660

  Opencv还为各种阈值方法提供了调用函数。基于全局阈值的实现方法如下。

  import c v2 importnumpyasnpfrommatplotlibimportyplotaspltimg=cv2 . im read(harden.png ,0)img=cv2 . CVT color)img throtthrolor

  基于阈值的图像二值化方法直观、易于实现、计算速度快,因此在传统的图像分割中占有重要地位。

  大力的小虾米

  基于阈值的图像二值化方法的关键之一是如何选择阈值,这可以认为是一个全局优化问题。即大津法是日本学者大津展在1979年提出的一种图像阈值分割方法。该方法将阈值划分视为一个统计决策问题,目的是最小化将像素分配到两个以上组的过程中引入的平均误差。小霞建议两组之间方差最大的阈值应该是最佳阈值。所以大虾也叫最大类间方差法。

  首先我们来看看大虾的基本原理。设判别阈值为t,小于阈值的像素面积为0,大于阈值的像素面积为1。0和w1分别是由阈值T分开的两种类型的像素相对于总像素的比率。M0和M1是这两类像素值的平均值,{ s0 } 2和{ S1 } 2是这两类像素值的方差。

  类内方差和类间方差如下。

  整个图像的方差如下

  分离度可定义如下:

  最大化图像分离时,最大化{s _ b} 2。所以:

  最大化就好。

  从一个具体的例子出发,我们用numpy做Otsu算法,探讨阈值。

  Img=cv2.imread(。/harden . png))img=img . astype)NP . float)h,w,C=img.shape# graying out=0.2126 *。0) out=out.astype(NP.uint8)初始化类之间的方差和优化阈值max_sigma=0max_t=0#)迭代for _ tinrange (1,255): # Yes

  0平均值m0=np.mean (v0) iflen (v0) 0else0。# v 0类像素比例w0=len(v 0)/(H * W)# class v1 v1=out[NP . where(out=_ t)]#计算v1均值m1=np.mean ( (H*W)#类间方差Sb2=w0 * w1 *(M0-M1)* * 2)#优化if sb 2 max _ sigma:max _ sigma=sb 2 max _ t=_ t #打印最佳阈值print(max_t)通过大力的虾米优化,可以得知样图的最佳分割阈值为然后以97为阈值进行二值化。效果如下图。

  out[out=max _ t]=255 out[out max _ t]=0 img[:0]=outimg[:1]=outimg[:2]=outlt . im show(img);

  Opencv直接提供了强大虾米的实现函数:

  Img=cv2.imread(。/harden.png) #灰度化img=cv2.cvtcolor (img,cv2.color _ bgr2gray) #大力阈值化虾ret,th=cv2.threshold (img,0,255,cv2.thresh _ bin效果如下:

  作为一种寻找最佳全局阈值的方法,Dali shrimp是一种基于阈值的图像分割的代表性算法。它的优点是快速高效。当目标物体与背景像素灰度分布差异明显时,Dali shrimp可以作为一种较好的图像分割方法。但是,它的缺点也很明显。轰轰烈烈的小虾只能对单个目标进行二值化。

  参考资料:

  xsdhxc 数字图像处理第四版

  https://github.com/yoyoyo-yo/Gasyori100knock

  https://zh.wikipedia.org/wiki/最大类间方差算法

  往期精彩:

  2019,算法工程师第一年

  基于numpy和opencv的数字图像处理(一):通道替换与灰度化

  算法工程师的成长之路

  长按二维码。关注机器学习实验室。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: