基于 OpenCV 的图像分割项目实战

本文通过实例演示了如何使用OpenCV进行图像分割,针对KESM显微镜图像进行血管组织分割。首先,通过中位数滤波器去除噪声,然后使用Otsu方法进行二值化分割。文章还探讨了验证方法,包括混淆矩阵、F1分数和马修斯相关系数(MCC),并强调了验证指标在二进制分类中的重要性。此外,介绍了数据预处理、阈值技术的选择以及深度学习在复杂图像分割中的应用。
摘要由CSDN通过智能技术生成

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

本期我们将一起来实现一个有趣的问题 -图像分割的算法。

本文的示例代码可以在以下链接中找到:

https://github.com/kiteco/kite-python-blog-post-code/tree/master/image-segmentation

作为我们的例子,我们将对KESM显微镜获取的图像进行分割以获取其中的血管组织。

数据科学家和医学研究人员可以将这种方法作为模板,用于更加复杂的图像的数据集(如天文数据),甚至一些非图像数据集中。由于图像在计算机中表示为矩阵,我们有一个专门的排序数据集作为基础。在整个处理过程中,我们将使用 Python 包,以及OpenCV、scikit 图像等几种工具。除此之外,我们还将使用 numpy ,以确保内存中的值一致存储。

主要内容

去噪

为了消除噪声,我们使用简单的中位数滤波器来移除异常值,但也可以使用一些不同的噪声去除方法或伪影去除方法。这项工件由采集系统决定(显微镜技术),可能需要复杂的算法来恢复丢失的数据。工件通常分为两类:

1. 模糊或焦点外区域

2. 不平衡的前景和背景(使用直方图修改正确)

分割

对于本文,我们使用Otsu 的方法分割,使用中位数滤波器平滑图像后,然后验证结果。只要分段结果是二进制的,就可以对任何分段算法使用相同的验证方法。这些算法包括但不限于考虑不同颜色空间的各种循环阈值方法。

一些示例包括:

1. 李阈值

2. 依赖于局部强度的自适应阈值方法

3. 在生物医学图像分割中常用的Unet等深度学习算法

4. 在语义上对图像进行分段的深度学习方法

验证

我们从已手动分割的基础数据集开始。为了量化分段算法的性能,我们将真实数据与预测数据的二进制分段进行比较,同时显示准确性和更有效的指标。尽管真阳性 (TP) 或假阴性 (FN) 数量较低,但精度可能异常高。在这种情况下,F1 分数和 MCC是二进制分类的更好量化指标。稍后我们将详细介绍这些指标的优缺点。

为了定性验证,我们叠加混淆矩阵结果,即真正的正极、真负数、假阳性、假负数像素正好在灰度图像上。此验证也可以应用于二进制图像分割结果上的颜色图像,尽管本文中使用的数据是灰度图像。最后,我们将介绍整个实现过程。现在,让我们看看数据和用于处理这些数据的工具。

Loading and visualizing data

我们将使用以下模块加载、可视化和转换数据。这些对于图像处理和计算机视觉算法非常有用,具有简单而复杂的数组数学。如果单独安装,括号中的模块名称会有所帮助。

如果在运行示例代码中,遇到 matplotlib 后端的问题,请通过删除 plt.ion() 调用来禁用交互式模式,或是通过取消注释示例代码中的建议调用来在每个部分的末尾调用 plt.show()。"Agg"或"TkAgg"将作为图像显示的后端。绘图将显示在文章中。

代码导入

import cv2
 import matplotlib.pyplot as plt
 import numpy as np
 import scipy.misc
 import scipy.ndimage
 import skimage.filters
 import sklearn.metrics
 # Turn on interactive mode. Turn off with plt.ioff()
 plt.ion()

在本节中,我们将加载可视化数据。数据是小老鼠脑组织与印度墨水染色的图像,由显微镜(KESM)生成。此 512 x 512 图像是一个子集,称为图块。完整的数据集为 17480 x 8026 像素,深度为 799,大小为 10gb。因此,我们将编写算法来处理大小为 512 x 512 的图块,该图块只有 150 KB。

各个图块可以映射为在多处理/多线程(即分布式基础结构)上运行,然后再缝合在一起即获得完整的分段图像。我们不介绍具体的缝合方法。简而言之,拼接涉及对整个矩阵的索引并根据该索引将图块重新组合。可以使用map-reduce进行,Map-Reduce的指标例如所有图块的所有F1分数之和等。我们只需将结果添加到列表中,然后执行统计摘要即可。

左侧的黑色椭圆形结构是血管,其余的是组织。因此,此数据集中的两个类是:

• 前景(船只)—标记为255

• 背景(组织)—标记为0

右下方的最后一个图像是真实图像。通过绘制轮廓并填充轮廓以手动方式对其进行追踪,通过病理学家获得真实情况。我们可以使用专家提供的类似示例来训练深度学习网络,并进行大规模验证。我们还可以通过将这些示例提供给其他平台并让他们以更大的比例手动跟踪一组不同的图像以进行验证和培训来扩充数据。

本文首先研究使用Python语言和OpenCV对数字高程图DEM,运用高斯核、阈值化、以及形态学中的开运算、闭运算、对图像进行分割、边缘提取、提取建筑物轮廓,并将其组织成顶点和线段的矢量格式,输出成为矢量化数字地图。然后输出XML格式文件保存矢量化数据[2]。 关键词:图像矢量化;数字高程图;pythonOpenCV;轮廓处理 1 前言 1.1图像与图像处理简介 在社会生活中,图像处理有着广泛的应用,人们可以通过图像获取很多日常生活中的一些重要信息,而由于社会的科技迅速发展,图像信息处理的技术也发展得越来越快,并且涉及到了日常生活中的方方面面,如科研、工业、农业现代化、军事国防、医疗卫生、公安机关、制造业等等多个领域,并且图像处理也涉及到了很多学科、如计算机科学、数学、物理、模式识别、人工智能、深度学习等,所以图像处理是一门具有交叉性很强的学科、并且能够与很多学科的融合并促进相关学科的发展。 2 相关工作 1. 工欲善其事必先利其器,由于需要使用Python OpenCV进行图像的操作,所以一开始需要先了解python的相关的使用语法以及编译器方面的使用,还有OpenCV的安装,然后才能更加顺利的开始进行接下来的步骤。 2. 需要对模式识别与图像处理的项目内的具体要求的方法进行初步了解,然后再进行深入的学习和掌握,所以需要对《OpenCV-Python-Tutorial-中文版》本书的相关知识进行学习并自己实践一番。如图像的基本操作、平滑、阈值化、形态学转换中的开运算、闭运算,以及轮廓处理的相关知识。 3. 对相关要求使用Python进行实现,并调试运行,查看相应的效果,最后输出XML文件存矢量化数据。
OpenCV在图像识别项目实战中有几个常见的应用。首先是图像增强,利用OpenCV可以消除运动引起的图像模糊、去除阴影等影响,以提升图像质量和清晰度。 其次是基于OpenCV的实际项目,例如车道线检测和路面的坑洼检测等。通过OpenCV的图像处理和计算机视觉算法,可以实现对特定对象的检测,进而用于道路规划、驾驶辅助等应用场景。 此外,OpenCV还可以与深度学习等其他技术相结合,用于解决难度较大的问题,如图像分割、人脸检测、人脸跟踪、运动检测等。深度学习模型可以在OpenCV的基础上进行训练和应用,进一步提升图像识别的准确性和效率。 需要注意的是,在实施OpenCV图像识别项目时,通常需要使用特定的编程环境。例如,使用Python 3.6.3作为编程语言,并安装OpenCV-Python 3.4.1.15版本作为图像处理库。这些环境配置的准备工作是开展OpenCV图像识别项目的前提。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [推荐几个Python+OpenCV实战项目](https://blog.csdn.net/amusi1994/article/details/126314121)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [OpenCV图像识别实战 第二节 opencv-python基本编程(1)](https://blog.csdn.net/prophet_xh/article/details/124769813)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小白学视觉

您的赞赏是我们坚持下去的动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值