使用 Python 的基于边缘和基于区域的分割

news2024/10/5 19:19:03

引言

在本文中,我们将重点讨论基于边缘和基于区域的分割技术。在讨论细节之前,我们需要了解细分它们分别是什么以及它们是如何工作的。

 

分割

图像分割是一种将数字图像分割成各种图像对象的技术。

区域中的每个像素(图像对象)在某些属性(如颜色、亮度、位置或纹理)上是相似的,这可以降低图像的复杂性以便于分析。

在分割的帮助下,还可以从图像中检测隐藏信息。

分割算法基于图像的两个基本属性:

· 像素强度值(边界方法)

· 像素相似性(区域方法)

 

在下图中,我们有一张以椅子、桌子、窗户等为特征的图像。我们可以借助分割来分别获取这些对象。中间的图像有一张椅子、一张桌子和一个窗户作为我们的分割图像对象。在最右边的图像中,通过标记图像对象来使用实例分割。

 

873264ccbd16b7f907b55c8346a485b0.png

随着 Python 机器学习的到来,分割变得非常容易。

 

对图像分割的需求

将一个图像分割成不同的图像对象,从中提取信息,然后进行标记,以训练各种机器学习模型来解决业务问题。

一个例子是在分割的帮助下自动标记出勤的面部识别系统。

分割的另一个应用是在医学领域,在检测到肿瘤、癌症等严重疾病后进行高效和快速的诊断。

图像分割在机器人等领域也有巨大的应用。

 

基于边缘的图像分割

在这种方法中,区域的边界彼此之间以及与背景之间的差异很大,允许基于强度(灰度级)的局部不连续性进行边界检测。

换句话说,它是在图像中定位边缘的过程。这是理解图像特征的非常重要的一步,因为我们知道边缘由有意义的特征组成并且具有重要的信息。

 

b9a80cfb4d4ecc6119df7cf088932229.png

 

基于区域的图像分割

这种方法包括根据一组特定的标准将图像划分为相似的区域。

基于区域的分割技术包括一种通过将图像分割成具有相似像素特征的不同部分来进行分割的算法。这种技术搜索输入图像中的小块或大块,以便进行分割。

它将为选定的块添加更多的像素,或者进一步将块点缩小为更小的段,并将它们与其他更小的块点合并。因此,基于这种方法还有两种基本的技术: 区域生长和区域合并与分裂。

 

bb2514cfacf1561803b68cc7f4b62779.png

Python 实现

import numpy as np
import matplotlib.pyplot as plt
from skimage import data
coins = data.coins()
hist = np.histogram(coins, bins=np.arange(0, 256))
fig, (ax1) = plt.subplots()
ax1.imshow(coins, cmap=plt.cm.gray,interpolation='nearest')

 

f7e082ff2ffb2de2105200447ef1b21a.png

 

基于边缘的图像分割

from skimage.feature import canny
edges = canny(coins/255.)
fig, ax = plt.subplots(figsize=(4, 3))
ax.imshow(edges, cmap=plt.cm.gray, interpolation='nearest')
ax.axis('off')
ax.set_title('Canny detector')
Text(0.5, 1.0, 'Canny detector')

在该代码中,我们使用了 canny 库,这是一种流行的边缘检测算法来检测输入图像的边缘。

 

d6eed7896748a160ebbf9e420203f743.png

通过设置有效对象的最小大小,可以轻松去除小的虚假对象:

from scipy import ndimage as ndi
fill_coins = ndi.binary_fill_holes(edges)
fig, ax = plt.subplots(figsize=(4, 3))
ax.imshow(fill_coins, cmap=plt.cm.gray, interpolation='nearest')
ax.axis('off')
ax.set_title('Filling the holes')
Text(0.5, 1.0, 'Filling the holes')

 

61c5045a65437f87aafd6abfdb66e40e.png

 

基于区域的分割

from skimage.filters import sobel
elevation_map = sobel(coins)
fig, ax = plt.subplots(figsize=(4, 3))
ax.imshow(elevation_map, cmap=plt.cm.gray, interpolation='nearest')
ax.axis('off')
ax.set_title('elevation_map')
Text(0.5, 1.0, 'elevation_map')

这里,我们从 skimage.filters 中导入 sobel 模块,它用于在输入图像中查找边缘。

Sobel 变换还帮助我们找到输入图像中的垂直和水平边缘。

 

835f561f7ab460db2315ffb133619afd.png

 

总结

本文通过 Python 实现,深入阐述了分割及其两个重要技术(基于边缘的分割和基于区域的分割)。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1214468.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【新版Bing】集成chatGpt4的搜索引擎

具体步骤 打开Chrome浏览器,进入无痕模式。 访问bing.com/new;(需要kexueshangwang,评论区有具体方法) 注册账号或使用老帐号登录(我是直接用的老帐号) 注册界面 登录成功 点击在Microsoft Edge中…

LeetCode2-两数相加

大佬解法 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) { val x; }* }*/ class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode pre new ListNode(0);ListNo…

YOLOv8原创改进:最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度

💡该教程为属于《芒果书》📚系列,包含大量的原创首发改进方式, 所有文章都是全网首发原创改进内容🚀 💡本篇文章为YOLOv8独家原创改进:独家首发最新原创WIoU_NMS改进点,改进有效可以直接当做自己的原创改进点来写,提升网络模型性能精度。 💡对自己数据集改进有效…

langchain 之 Tools 多案例使用(一)

原文:langchain 之 Tools 多案例使用(一) - 简书 ATTENTION: 如果采用 openai 的接口,需要走代理,本文采用 proxychains 进行设置。开启 debug 模式后,能看到更多的输出信息。 import langchain langcha…

黑马程序员微服务 分布式搜索引擎3

分布式搜索引擎03 0.学习目标 1.数据聚合 **聚合(aggregations)**可以让我们极其方便的实现对数据的统计、分析、运算。例如: 什么品牌的手机最受欢迎?这些手机的平均价格、最高价格、最低价格?这些手机每月的销售…

CentOS to 浪潮信息 KeyarchOS 迁移体验与优化建议

浪潮信息KeyarchOS简介 KeyarchOS即云峦操作系统(简称KOS), 是浪潮信息研发的一款面向政企、金融等企业级用户的 Linux 服务器操作系统。它基于Linux内核、龙蜥等开源技术,支持x86、ARM 等主流架构处理器,其稳定性、安全性、兼容性和性能等核心能力均已…

京东账单导出的手工操作

文章目录 京东账单导出的手工操作概述笔记备注备注END 京东账单导出的手工操作 概述 在京东网页版找不到账单导出的操作. 在手机京东中可以导出账单. 当前京东APP的导出实现有点bug, 在输入验证码后, 发送邮件. 可是显示验证码失败, 但是已经发了邮件. 可能是因为发送成功提示…

requests库进行HTTP请求时,有时需要传递cookies参数

在使用requests库进行HTTP请求时,有时需要传递cookies参数。但是,requests库的cookies参数只能接受CookieJar对象,而不能接受字典等其他类型的cookies。 在requests库中增加对字典类型的cookies支持,使其能够接受字典类型的cooki…

IntelliJ IDEA启动一个普通的java web项目的配置

原创/朱季谦 这是我很久以前刚开始用IntelliJ IDEA时记录的笔记,应该是五年前的一篇笔记了。正好赶上最近离职了,可以有比较多的时间把以前的记录整理一下,可以让刚接触到IntelliJ IDEA的童鞋学习如何在IntelliJ IDEA引入一个单机版的jar形式…

第三篇 《随机点名答题系统》——人员管理详解(类抽奖系统、在线答题系统、线上答题系统、在线点名系统、线上点名系统、在线考试系统、线上考试系统)

目录 1.功能需求 2.数据库设计 3.流程设计 4.关键代码 4.1.人员分组 4.1.1数据请求示意图 4.1.2添加组别(login.php)数据请求代码 4.1.3编辑组别(login.php)数据请求代码 4.1.4加入分组(login.php&#xff09…

安装包管理工具-Yarn

一、介绍与安装 1.1 介绍 Yarn是一款功能包管理工具,与npm(npm:Node.js 的包管理器 npm,是目前最流行的Node.js 的包管理器。)类似。有着FAST(快速的), RELIABLE( RELIABLE 可信赖的), AND SECURE DEPENDENCY MANAGEMENT(安全依赖关系管理)的特点。 Yarn官网 1.2…

Git常用规范

分支命名规范 Git分支命名规范可以根据具体的项目和团队的需要而有所不同,但是以下是一些常见的规范: 主分支(master/main):这个分支通常是主要的稳定分支,它包含了当前生产环境的代码。在一些项目中&…

【2016年数据结构真题】

已知由n&#xff08;M>2&#xff09;个正整数构成的集合A{a<k<n},将其划分为两个不相交的子集A1 和A2&#xff0c;元素个数分别是n1和n2&#xff0c;A1和A2中的元素之和分别为S1和S2。设计一个尽可能高效的划分算法&#xff0c;满足|n1-n2|最小且|s1-s2|最大。要求…

requests 2.13.0 版本的 https 连接慢漏提示

# 解决方案 requests 2.13.0 版本的 https 连接慢漏问题 问题背景&#xff1a;在使用requests 2.13.0版本时&#xff0c;发现存在一个缓慢的泄漏问题。这个问题只在使用https连接时出现。经过调查&#xff0c;发现这个问题与pyOpenSSL的使用有关。在使用pyOpenSSL与requests 2.…

001 opencv addWeighted

目录 一、环境 二、addWeighted函数 三、代码演示 一、环境 本文使用环境为&#xff1a; Windows10Python 3.9.17opencv-python 4.8.0.74 二、addWeighted函数 OpenCV中的cv.addWeighted函数是一个用于图像叠加的函数&#xff0c;它可以将两个具有相同尺寸和类型的图像按…

飞天使-django之数据库简介

文章目录 增删改查解决数据库不能存储中文问题创建表数据类型表的基本操作主键唯一键 unique外键实战 增删改查 四个常用的语句查询 : insert delete update select insert into student(Sno,name) values(95001,"张三") delete from student where name张三 upda…

分类预测 | Matlab实现PSO-GRU-Attention粒子群算法优化门控循环单元融合注意力机制多特征分类预测

分类预测 | Matlab实现PSO-GRU-Attention粒子群算法优化门控循环单元融合注意力机制多特征分类预测 目录 分类预测 | Matlab实现PSO-GRU-Attention粒子群算法优化门控循环单元融合注意力机制多特征分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述 1.Matlab实现PSO…

Java获取Jar、War包路径,并生成可编辑修改的本地配置文件

前言 本地的可修改配置文件的编写理应是一个很常用的功能&#xff0c;但由于数据库的存在&#xff0c;它鲜少被提及&#xff0c;大多数我们直接存储到数据库中了。 以至于现今&#xff0c;除了没接触数据库的新手时常使用它以外&#xff0c;它没有太多的出场机会。 也因此&am…

vue手动搭建脚手架(保姆式教案)

目录 1.创建项目 1.node.js环境搭建 2.安装vue-cli 3.搭建项目 目录结构 1.创建项目 1.node.js环境搭建 下载安装node.js&#xff08;Download | Node.js&#xff09;&#xff0c;安装时不要安装在C盘Windowsr打开cmd管理工具开始输入命令检查node.js是否安装和版本号&a…

051-第三代软件开发-日志容量时间限制

第三代软件开发-日志容量时间限制 文章目录 第三代软件开发-日志容量时间限制项目介绍日志容量时间限制 关键字&#xff1a; Qt、 Qml、 Time、 容量、 大小 项目介绍 欢迎来到我们的 QML & C 项目&#xff01;这个项目结合了 QML&#xff08;Qt Meta-Object Language…