当前位置: 首页 > news >正文

拉萨网站建设公司seo包括哪些方面

拉萨网站建设公司,seo包括哪些方面,网站宽度 像素,医院网站建设规划书文章目录传统图像处理分割阈值分割一个应用场景opencv库中的阈值分割固定阈值THRESH_OTSU 大津法阈值自适应阈值传统图像处理分割 现在提到图像分割,很多人会直接想到当前火爆的深度学习的各种分割网络,比如实例分割,语义分割等。其实在传统…

文章目录

  • 传统图像处理分割
  • 阈值分割
    • 一个应用场景
    • opencv库中的阈值分割
    • 固定阈值
    • THRESH_OTSU 大津法阈值
    • 自适应阈值

传统图像处理分割

现在提到图像分割,很多人会直接想到当前火爆的深度学习的各种分割网络,比如实例分割,语义分割等。其实在传统的图像处理领域,也有一些分割算法,这些算法在通用的分割上来说没有深度网络的普适性好,但是在某些特殊场景是一个更轻量级的解决方案。也是图像处理学习过程中的毕竟之路。

阈值分割

阈值分割是一个基本的图像处理算法,思路很简单:
将图像中每个像素的像素值和阈值进行比较,高于阈值的是一类,低于阈值的是一类。
这样的算法一般有两种应用场景:

  • 提取前景或者背景
  • 二值化处理

一个应用场景

我在实际工作中,碰到了一个实际场景,我觉得就是可以用这个阈值分割来解决的,而不需要使用比较重的深度网络来解决。

问题是要定位一个试管中试剂的位置信息,设备中拍摄的图像如下图所示:
在这里插入图片描述

从图中可以分析,这条分界线实际上是很容易判断出来的,而且前景和背景的像素值差距非常大,所以我当时考虑的就是直接用阈值分割来实现。

opencv库中的阈值分割

在opencv库中,用于阈值分割的函数是:cv2.threshold.
该函数的接受4个参数:

  • src, 图像数据,为单通道图像。
  • thresh,阈值。
  • maxval,最大像素值
  • type,阈值分割方法。

最后的这个参数,是因为阈值分割有很多中方法,在opencv的官网上描述的非常清楚:
在这里插入图片描述

在这里插入图片描述

实际上就是根据像素值与阈值的关系,来获取最终目标图像的像素值规则。这里就不一个一个说了。我提一下我自己用到的几个方法,以及在这个试管工作中的效果。
另外,我还用到一些其他的方法,把试管的感兴趣区域确定和提取出来了,这里就说了,和这一篇文章的关系不大。

固定阈值

上面提到了,因为分界线非常明显,所以我想着直接尝试出一个固定的阈值来做分割,看能不能达到自己想要的效果。

代码如下:

if __name__ == '__main__':img = cv2.imread("images/tubeImg.jpeg")grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 如果大于阈值,赋值为255,小于阈值,赋值为0ret, binary = cv2.threshold(grey, 60, 255, cv2.THRESH_BINARY)cv2.imshow("result", binary)cv2.waitKey()cv2.destroyAllWindows()

在这里插入图片描述

效果不太理想,最上面的这个界限不是很清楚(虽然通过拟合可以基本确定),而且中间的一些杂志部分去除的不是很好(后续需要用到,所以在这一步想一次搞定)。
所以再试试其他的方法看看。

尝试了TRUNC和TOZERO的方式,如下图:
在这里插入图片描述
在这里插入图片描述

我理解实际上就是把目标图像的前景和背景的像素值拉的不是很大而已,对我想要的效果帮助不大。

而且我通过修改阈值,把60这个值改大改小效果仍然不佳,就只能谋求其他方法了。

THRESH_OTSU 大津法阈值

这个分割方法和上述的分割方法不一样,上述的分割方法的阈值是固定的,而这个方法的阈值时需要通过一些计算才能得到的,这种计算方式就是大津法。
大津法的原理和思路如下(单通道):

  • 大津法的思路就是要找到一个阈值,根据这个阈值划分成两类(A, B)之后,这A, B两类像素值的方差最大。那么问题就变成两个:
    • 如何计算A,B两类像素的方差。
    • 使用最快速的方法找到让方差最大的那个阈值。
  • 一张M * N大小的图像,假设阈值为k。
  • 那么大于k的像素点(如果是BINARY的方法则表示前景,否则就是反过来,下同)的个数N0N_0N0,小于k的像素点的个数为N0N_0N0。那么前景分类的像素点在整张图像中的占比就为ω0=N0M∗N\omega_0=\frac{N_0}{M * N}ω0=MNN0,背景的就是ω1=N1M∗N\omega_1=\frac{N_1}{M * N}ω1=MNN1.
  • 大于k的像素点的平均灰度值可计为u0u_0u0,小于的平均灰度值可计为u1u_1u1
  • 整张图像的平均灰度为uuu
  • 那么现在可以回答上面的第一个问题,两类像素的方差定位为
    g=ω0(u0−u)2+ω1(u1−u)2g = \omega_0(u_0-u)^2 + \omega_1(u_1-u)^2g=ω0(u0u)2+ω1(u1u)2
  • 大津法就是要找到这个最大的g值。那么第二个问题来了,怎么去算这个g值。最简单的办法就是遍历,让k从0到255,依次计算这个g值,哪个最大,阈值就取那个k。opencv是不是这么实现的不知道,有兴趣的可以去翻翻源码。

通过大津法计算得到阈值之后,还要确定是使用哪种分类方法,所以代码可以写成:

if __name__ == '__main__':img = cv2.imread("images/tubeImg.jpeg")grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 先使用大津法计算阈值,然后再分类# 如果大于阈值,赋值为255,小于阈值,赋值为0ret, binary = cv2.threshold(grey, 60, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)cv2.imshow("result", binary)cv2.waitKey()cv2.destroyAllWindows()

图是下图:
在这里插入图片描述

我感觉上面的那条分界线更加分明和分布平均一点。

自适应阈值

上面的几种方法里的思路里基本上都是一个阈值在应用与整个图像的分割,不管是自己手动设的,还是通过某种方法计算出来的。但是一旦确定后,这个阈值就会应用到整张图像中去。
在opencv中还提供了一种阈值分割方法,这个阈值在整张图像的分割操作中是变化的,是 根据该像素周边的邻居像素(neighborhood pix)值来确定该像素的比较阈值,然后再根据之前的阈值比较逻辑来确定是前景类还是后台类

opencv中的这个函数是adaptiveThreshold,这个函数有下面几个参数:

  • src,源图像,为灰度图。
  • maxValue, 最大值
  • adaptiveMethod,根据邻居像素如何计算这个阈值,也就是说确定这个邻域像素的计算方法。
    • ADAPTIVE_THRESH_MEAN_C,邻域的像素计算平均值作为阈值(减去一个偏移量)
    • ADAPTIVE_THRESH_GAUSSIAN_C,邻域的像素通过一个高斯核作为掩码来计算权重值作为阈值(减去一个偏移量)。根据不同的blockSize,opencv会调用getGaussianKernel这个来获取这个高斯核,有兴趣可以具体了解下高斯核的生成原理和逻辑。
  • thresholdType,确定阈值之后的分类方式,就支持两种:THRESH_BINARY(大于阈值取255,小于取0),THRESH_BINARY_INV(大于阈值取0,小于取255)
  • blockSize, 这个邻域的边长,一般是3,5,7.和图像中的卷积核类似。
  • C,上面计算阈值过程中提到的偏移量。

我在我的工程里试了一下:

if __name__ == '__main__':img = cv2.imread("/Users/zoulei/files/personal/blog/images/tubeImg.jpeg")grey = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)# 如果大于阈值,赋值为255,小于阈值,赋值为0# ret, binary = cv2.threshold(grey, 60, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)# 自适应阈值分割binary = cv2.adaptiveThreshold(grey, 255, cv2.ADAPTIVE_THRESH_MEAN_C, cv2.THRESH_BINARY, 15, 2)cv2.imshow("result", binary)cv2.waitKey()cv2.destroyAllWindows()

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

试过蛮多的blockSize,基本上都是这个效果。和我想要的效果完全不符合,所以这个方法对我来说没什么用。
这个方法应该是用于做对比度较大的图像杂质分割会比较有用,我这个工程里暂时没有用到,有兴趣的朋友可以去试一下。

当然,最后我自己的解决方案是选择用OTSU大津法的阈值分割方法,再加上对分界线的一些拟合方法和一些逻辑判断来解决我自己的问题。

http://www.khdw.cn/news/9736.html

相关文章:

  • wordpress是不是cms优化搜索曝光次数的方法
  • wordpress 父级子页面北京seo关键词优化外包
  • 广西教育平台网站建设关键词排名点击工具
  • 用户体验不好的网站seo网站关键词快速排名
  • 做网站比较好的公司有哪些木卢seo教程
  • 求职网站建设方案百度app营销软件
  • 企业网站的规划与建设ppt外贸网站推广服务
  • 大连网站排名公司怎么自己弄一个网站
  • saas 做网站seo网站优化平台
  • 使用动易模版制作网站网络营销网站有哪些
  • axure做网站好不好拍照搜索百度识图
  • 给bc做网站劫持关键词推广排名软件
  • 阿里云 多个网站搜索引擎优化的分类
  • 国家对网站建设有什么要求广州seo网站优化培训
  • 做精神科网站价格郑州网站顾问
  • 上海做兼职哪个网站黄冈网站seo
  • 论坛用wordpress搜索引擎优化英文简称为
  • 做自己的外贸网站怎样赚钱做品牌推广应该怎么做
  • 服务好的武汉网站建设优化大师有必要花钱吗
  • 什么网站动物和人做的吗关键词指数查询
  • 做兼职调查哪个网站好网站优化推广
  • 佛山营销网站建设推广三只松鼠口碑营销案例
  • 服饰东莞网站建设怎么让百度快速收录网站
  • 网页制作与网站建设项目教程卢松松外链工具
  • 网站url超链接怎么做可以推广的软件有哪些
  • 网站运营管理方案英文外链seo兼职在哪里找
  • 全国特种作业人员证查询镇江seo优化
  • 自己做盗版小说网站吗自创网站
  • 有哪些建设网站的大公司厦门人才网个人会员
  • 蓟州区住房和建设委员会网站好的搜索引擎推荐