opencv-29 Otsu 处理(图像分割)

这篇具有很好参考价值的文章主要介绍了opencv-29 Otsu 处理(图像分割)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Otsu 处理

Otsu
处理是一种用于图像分割的方法,旨在自动找到一个阈值,将图像分成两个类别:前景和背景。这种方法最初由日本学者大津展之(Nobuyuki
Otsu)在 1979 年提出

在 Otsu 处理中,我们通过最小化类别内方差或最大化类别间方差的方式来确定最佳阈值。具体步骤如下:

  1. 首先,计算图像的直方图,即统计图像中每个像素值的频数。
  2. 对于每个可能的阈值 T,将图像分成两个类别:小于等于 T 的像素为一个类别,大于 T 的像素为另一个类别。
  3. 对于每个阈值 T,计算两个类别的像素值的均值和方差。
  4. 使用类别内方差和类别间方差之间的比率(称为 Otsu 函数)来评估当前阈值的效果。Otsu 函数计算公式为:(类别间方差) / (类别内方差)。
  5. 找到使得 Otsu 函数最大化的阈值 T,这个阈值就是最佳阈值。
  6. 使用最佳阈值 T 将图像进行分割,得到前景和背景。

Otsu 处理在图像分割中广泛应用,特别是在二值化图像中,可以有效地将图像分成前景和背景两部分,并且对于具有明显双峰直方图的图像效果较好。

Otsu 处理与自适应阈值得区别

Otsu 处理和自适应阈值是两种不同的图像阈值处理方法,它们在选择阈值的方式和应用场景上有所区别。

Otsu 处理:

Otsu 处理是一种全局阈值处理方法,它旨在找到一个适合整个图像的最佳阈值,将图像分成前景和背景两部分。这个最佳阈值是通过最大化类间方差或最小化类内方差来确定的,以使得前景和背景的差异最大化。
Otsu 处理适用于具有明显双峰直方图的图像,即图像中存在明显的前景和背景像素值的分界点。
Otsu 处理是一个全局方法,只使用图像的整体信息来确定阈值,因此不适用于具有局部不均匀光照或噪声的图像。

自适应阈值:

自适应阈值是一种局部阈值处理方法,它根据图像中的局部区域来确定每个像素的阈值。这样可以在图像中的不同区域应用不同的阈值,从而更好地处理具有局部不均匀光照或噪声的图像。
自适应阈值的计算过程是基于图像中每个像素周围的局部邻域进行的,可以通过选择不同的算法(例如平均值、高斯加权平均值等)来计算局部阈值。
自适应阈值适用于具有非均匀光照或有噪声的图像,可以提高阈值处理的准确性和效果。

综上所述,Otsu 处理是一种全局阈值处理方法,适用于具有明显双峰直方图的图像;而自适应阈值是一种局部阈值处理方法,适用于具有非均匀光照或噪声的图像。在实际应用中,我们根据图像的特点选择合适的阈值处理方法,以获得最佳的图像分割结果。

代码示例:

在使用函数 cv2.threshold()进行阈值处理时,需要自定义一个阈值,并以此阈值作为图像阈值处理的依据。通常情况下处理的图像都是色彩均衡的,这时直接将阈值设为 127 是比较合适的。

但是,有时图像灰度级的分布是不均衡的,如果此时还将阈值设置为 127,那么阈值处理的结果就是失败的。例如,有一个图像 img,里面的像素值为:

[[123 123 123 123 123]
[123 123 123 123 123]
[123 123 126 126 126]
[123 123 126 126 126]
[123 123 126 126 126]]

此时,如果仍然以 127 作为阈值,那么阈值处理结果是:

[[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]
[0 0 0 0 0]]

很显然,这不是我们想要的结果。我们可以观察到,对于 img,如果以阈值 125 进行分割,可以得到较好的结果:

[[ 0 0 0 0 0]
[ 0 0 0 0 0]
[ 0 0 255 255 255]
[ 0 0 255 255 255]
[ 0 0 255 255 255]]

但是,实际处理的图像往往是很复杂的,不太可能像上述 img 那样,一眼就观察出最合适的阈值。

如果一个个去尝试,工作量无疑是巨大的。

Otsu 方法能够根据当前图像给出最佳的类间分割阈值。简而言之,Otsu 方法会遍历所有可能阈值,从而找到最佳的阈值。

在 OpenCV 中,通过在函数 cv2.threshold()中对参数 type 的类型多传递一个参数,“cv2.THRESH_OTSU”,即可实现 Otsu 方式的阈值分割。

需要说明的是,在使用 Otsu 方法时,要把阈值设为 0。此时的函数 cv2.threshold()会自动寻找最优阈值,并将该阈值返回。

例如,下面的语句让函数 cv2.threshold()采用 Otsu 方法进行
阈值分割:

t,otsu=cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)

与普通阈值分割的不同之处在于:

 参数 type 增加了一个参数值“cv2.THRESH_OTSU”。
 设定的阈值为 0。
 返回值 t 是 Otsu 方法计算得到并使用的最优阈值。
需要注意,如果采用普通的阈值分割,返回的阈值就是设定的阈值。

例如下面的语句设定
阈值为 127,所以最终返回的就是 t=127。

t,thd=cv2.threshold(img,127,255,cv2.THRESH_BINARY)

测试 Otsu 阈值处理的实现。

import cv2
import numpy as np
img = np.zeros((5,5),dtype=np.uint8)
img[0:6,0:6]=123
img[2:6,2:6]=126
print("img=\n",img)
#普通设定阈值
t1,thd=cv2.threshold(img,127,255,cv2.THRESH_BINARY)
print("thd=\n",thd)
print("设定得阈值 t1=\n",t1)
#otsu设定阈值
t2,otsu=cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
print("otsu 自动获取得阈值 t2=\n",t2)
print("otsu=\n",otsu)

运行结果如下:

img=
 [[123 123 123 123 123]
 [123 123 123 123 123]
 [123 123 126 126 126]
 [123 123 126 126 126]
 [123 123 126 126 126]]
thd=
 [[0 0 0 0 0]
 [0 0 0 0 0]
 [0 0 0 0 0]
 [0 0 0 0 0]
 [0 0 0 0 0]]
设定得阈值 t1=
 127.0
otsu 自动获取得阈值 t2=
 123.0
otsu=
 [[  0   0   0   0   0]
 [  0   0   0   0   0]
 [  0   0 255 255 255]
 [  0   0 255 255 255]
 [  0   0 255 255 255]]

总结果中我们可以找到上面自动阈值取到了123.找到了最佳得阈值.

对于像素数组得这个最佳阈值体没有感观得效果,我们接下来找个图片来看看 otsu 阈值处理得效果
代码如下:

import cv2
img=cv2.imread("tiffany.bmp",0)
t1,thd=cv2.threshold(img,127,255,cv2.THRESH_BINARY)
t2,otsu=cv2.threshold(img,0,255,cv2.THRESH_BINARY+cv2.THRESH_OTSU)
cv2.imshow("img",img)
cv2.imshow("thd",thd)
cv2.imshow("otus",otsu)
cv2.waitKey()
cv2.destroyAllWindows()

运行结果如下,从效果中来看结果还是很明显得.otsu 得效果明显比自定义得阈值处理效果要好很多.
opencv-29 Otsu 处理(图像分割),opencv,计算机视觉,opencv,计算机视觉,人工智能文章来源地址https://www.toymoban.com/news/detail-623532.html

到了这里,关于opencv-29 Otsu 处理(图像分割)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机图形图像技术(OpenCV核心功能、图像变换与图像平滑处理)

    1、显示图像 ①功能:在指定窗口中显示图像。 ②参数: name 为窗口的名字; image 为待显示的图像。 ③说明:可显示彩色或灰度的字节图像和浮点数图像,彩色图像数据按BGR顺序存储。 2、读入图像 ①功能:从指定文件读入图像。 ②参数: filename 为图像文件名,支持BMP、

    2024年02月03日
    浏览(46)
  • 计算机视觉传统图像处理库opencv的使用

    人工智能领域的图像处理分支,整理了计算机视觉传统图像处理库opencv的使用网址链接。 opencv使用范围,主要用在计算机视觉、视频分析、机器学习、医学影像处理、自动驾驶、工业检测、游戏开发上。 1):opencv效果视频 opencv10个应用场景 - 知乎 2):opencv介绍 AI必备技能

    2024年02月09日
    浏览(42)
  • OpenCV处理图像和计算机视觉任务时常见的算法和功能

    当涉及到OpenCV处理图像和计算机视觉任务时,有许多常见的具体算法和功能。以下是一些更具体的细分: 图像处理算法: 图像去噪 :包括均值去噪、高斯去噪、中值滤波等,用于减少图像中的噪声。 直方图均衡化 :用于增强图像的对比度,特别适用于低对比度图像。 边缘

    2024年02月11日
    浏览(40)
  • 基于 OpenCV 的车辆变道检测,计算机视觉+图像处理技术

    本期教程我们将和小伙伴们一起研究如何使用计算机视觉和图像处理技术来检测汽车在行驶中时汽车是否在改变车道!大家一定听说过使用 OpenCV 的 haar 级联文件可以检测到面部、眼睛等,但是如果目标是汽车,公共汽车呢? 01. 数据集 我们将道路上汽车的视频文件用作数据

    2024年01月25日
    浏览(69)
  • 【计算机视觉 | 图像分类】arxiv 计算机视觉关于图像分类的学术速递(6月 29 日论文合集)

    基于多示例学习的全幻灯片图像分类的伪袋混合增强 论文地址: 鉴于十亿像素图像建模的特殊情况,多实例学习(MIL)已成为全幻灯片图像(WSI)分类最重要的框架之一。 在当前实践中,大多数 MIL 网络在训练中经常面临两个不可避免的问题:i)WSI 数据不足,ii)神经网络

    2024年02月11日
    浏览(53)
  • 【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(8 月 30 日论文合集)

    Novis:端到端近在线视频实例分割实例 直到最近,视频实例分割(VIS)社区在以下共同信念下操作:离线方法通常优于逐帧在线处理。然而,最近在线方法的成功质疑这种信念,特别是对于具有挑战性和长视频序列。我们将这项工作理解为对最近观察结果的反驳,并呼吁社区

    2024年02月09日
    浏览(65)
  • 【计算机视觉 | 图像分割】arxiv 计算机视觉关于图像分割的学术速递(7 月 6 日论文合集)

    面向跨域语义分割的提示扩散表示法 虽然最初设计用于图像生成,扩散模型最近已证明提供了优秀的预训练的特征表示语义分割。这一结果引起了兴趣,我们开始探索扩散预训练表示如何推广到新的领域,这是任何表示的关键能力。我们发现,扩散预训练实现了非凡的领域泛

    2024年02月12日
    浏览(54)
  • 计算机视觉 -- 图像分割

    引入问题: 在自动驾驶系统中,如果用之前的检测网络(例如Faster-Rcnn),试想,倘若前方有一处急转弯,系统只在道路上给出一个矩形标识,这样一来车辆很有可能判断不出是该避让还是径直上前,车祸一触即发。因此,对新技术的诉求应运而生,该技术须能识别具体路况

    2024年02月11日
    浏览(58)
  • 基于深度学习、机器学习,对抗生成网络,OpenCV,图像处理,卷积神经网络计算机毕业设计选题指导

    开发一个实时手势识别系统,使用卷积神经网络(CNN)和深度学习技术,能够识别用户的手势并将其映射到计算机操作,如控制游戏、音量调整等。这个项目需要涵盖图像处理、神经网络训练和实时计算等方面的知识。 利用深度学习模型,设计一个人脸识别系统,可以识别人

    2024年02月07日
    浏览(82)
  • 计算机视觉实验五——图像分割

    了解图割操作,实现用户交互式分割,通过在一幅图像上为前景和背景提供一些标记或利用边界框选择一个包含前景的区域,实现分割。 采用聚类法实现图像的分割(K-means方法)。 ①图片准备 博主选择了一张 前景与背景区分明显 的图片,和一张 前景与背景区分不明显 的

    2024年04月15日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包