数字图像处理:图像分割应用
数字图像处理:图像分割应用
图像分割是图像处理中的一个关键步骤,其目的是将图像分成具有不同特征的区域,以便进一步的分析和处理。
1.1 阈值分割法
阈值分割法(Thresholding)是一种基于图像灰度级或颜色的分割方法,它通过设置一个或多个阈值,将图像划分为前景和背景。它的基本思想是根据像素的灰度值来判断该像素是否属于某个目标区域。
基本原理:
将像素的灰度值与设定的阈值进行比较。
如果像素值高于阈值,则归为目标区域;如果低于阈值,则归为背景。
在多阈值分割中,多个阈值将图像分成多个区域。
1.2 区域生长法
区域生长法(Region Growing)是一种基于像素相似性的分割方法,它从某些初始的“种子点”开始,逐步将与种子点相似的邻域像素归入同一分割区域,直到没有更多满足条件的像素可以合并。
基本原理:
从选定的“种子点”开始,根据预定义的相似性准则(如灰度值相似度或纹理相似度),将相邻的像素添加到种子区域中。
相邻像素的相似性准则一般基于像素的灰度差异、颜色差异或纹理等特征。
当不再有符合相似性条件的像素时,生长过程停止,得到一个完整的区域。
1.3 边缘检测法
边缘检测法(Edge Detection)是一种基于图像梯度信息的分割方法,它通过检测图像中灰度值或颜色发生显著变化的位置来确定区域的边界,适用于具有明显边界的目标区域分割。
基本原理:
利用图像梯度(即像素灰度值或颜色的变化率)来识别边缘。
边缘通常是图像中像素灰度值或颜色发生急剧变化的地方,通常代表物体的边界。
常用的边缘检测算法包括Sobel算子、Canny算子、Prewitt算子等。
1.4 代码实现
(1)选取实验用的图像,完成图像读取和显示;
(2)使用阈值分割法、区域生长法、边缘检测法对图像进行分割,并显示结果;
(3)使用深度学习模型进行图像分割,并比较结果。
import numpy as np
import cv2 as cv
import matplotlib.pyplot as plt
import random# 读取图像并转换为RGB格式
img_dir = r'D:\Document\Experiment\data\image.png'
rgb = cv.imread(img_dir)
rgb = cv.cvtColor(rgb, cv.COLOR_BGR2RGB) # 转换为RGB格式# 转换为灰度图
gray = cv.cvtColor(rgb, cv.COLOR_RGB2GRAY)# (1)阈值分割法
def threshold_segmentation(image, threshold_value=128):"""使用简单的阈值分割法"""_, thresholded_image = cv.threshold(image, threshold_value, 255, cv.THRESH_BINARY)return thresholded_image# (2)区域生长法
def region_growing(image, seed_point, threshold=5):"""使用简单的区域生长算法"""h, w = image.shapesegmented_image = np.zeros_like(image)visited = np.zeros_like(image, dtype=bool)seed_value = image[seed_point[1], seed_point[0]]# 初始化种子列表seeds = [seed_point]segmented_image[seed_point[1], seed_point[0]] = 255visited[seed_point[1], seed_point[0]] = True# 区域生长while seeds:x, y = seeds.pop(0)for dx, dy in [(-1, 0), (1, 0), (0, -1), (0, 1)]: # 邻域4连通nx, ny = x + dx, y + dyif 0 <= nx < w and 0 <= ny < h and not visited[ny, nx]:if abs(int(image[ny, nx]) - int(seed_value)) < threshold:segmented_image[ny, nx] = 255seeds.append((nx, ny))visited[ny, nx] = Truereturn segmented_image# (3)边缘检测法
def edge_detection(image):"""使用Canny边缘检测法"""edges = cv.Canny(image, 100, 200) # 调整阈值可以影响边缘检测效果return edges# 应用阈值分割法
threshold_image = threshold_segmentation(gray, threshold_value=128)# 应用区域生长法
seed_point = (1055, 788) # 随机选择一个种子点
region_growing_image = region_growing(gray, seed_point, threshold=30)# 应用边缘检测法
edges_image = edge_detection(gray)# 展示分割结果
plt.figure(figsize=(15, 5))# 展示原始图像
plt.subplot(1, 4, 1)
plt.title("Original")
plt.axis('off')
plt.imshow(rgb)plt.subplot(1, 4, 2)
plt.title("Threshold Segmentation")
plt.axis('off')
plt.imshow(threshold_image, cmap='gray')plt.subplot(1, 4, 3)
plt.title("Region Growing Segmentation")
plt.axis('off')
plt.imshow(region_growing_image, cmap='gray')plt.subplot(1, 4, 4)
plt.title("Edge Detection")
plt.axis('off')
plt.imshow(edges_image, cmap='gray')plt.show()

也可以使用segment-anything进行分割,效果如下

相关文章:
数字图像处理:图像分割应用
数字图像处理:图像分割应用 图像分割是图像处理中的一个关键步骤,其目的是将图像分成具有不同特征的区域,以便进一步的分析和处理。 1.1 阈值分割法 阈值分割法(Thresholding)是一种基于图像灰度级或颜色的分割方法&…...
Java面试宝典-并发编程学习02
目录 21、并行与并发有什么区别? 22、多线程中的上下文切换指的是什么? 23、Java 中用到的线程调度算法是什么? 24、Java中线程调度器和时间分片指的是什么? 25、什么是原子操作?Java中有哪些原子类? 26、w…...
【每日一题】洛谷 - 快速排序模板
今天的每日一题来自洛谷,题目要求对给定的 N N N 个正整数进行从小到大的排序,并输出结果。我们将使用经典的**快速排序算法(QuickSort)**来解决这一问题。下面我将从问题分析、代码实现、及快速排序的核心思想进行详细说明。 题…...
Django模型优化
1、创建一个Django项目 可参考之前的带你快速体验Django web应用 我使用的是mysql数据库。按照上述教程完成准备工作。 2、创建一个app并完成注册 demo主要来完成创建用户、修改用户、查询用户、删除用户的操作。 python manage.py startapp test0023、app的目录 新建templ…...
Python实现火柴人的设计与实现
1.引言 火柴人(Stick Figure)是一种极简风格的图形,通常由简单的线段和圆圈组成,却能生动地表达人物的姿态和动作。火柴人不仅广泛应用于动画、漫画和涂鸦中,还可以作为图形学、人工智能等领域的教学和研究工具。本文…...
衡石分析平台系统分析人员手册-应用模版
应用模板 应用模板使分析成果能被快速复用,节省应用创作成本,提升应用创作效率。此外应用模板实现了应用在不同环境上快速迁移。 支持应用复制功能 用户可以从现有的分析成果关联到新的分析需求并快速完成修改。 支持应用导出为模板功能 实现多个用户…...
Git和SVN
一. Git和SVN的区别 1.1 Git是分布式的,SVN是集中式的 1.2 Git复杂概念多,SVN简单易上手 Git 的命令实在太多了,日常工作需要掌握 add, commit, status, fetch, push, rebase等,若要熟练掌握,还必须掌握 rebase和 m…...
【C语言教程】【常用类库】(十八)宏与预处理 - <stddef.h> 和 <stdbool.h>
18. 宏与预处理 - <stddef.h> 和 <stdbool.h> C语言的宏和预处理指令在程序编译之前就被执行,用于文件包含、符号定义、条件编译等操作。理解和运用宏和预处理可以提高代码的灵活性和可移植性。 18.1 宏定义与条件编译 18.1.1 #define 与参数化宏 #…...
订单超时过期的实现方案的探讨
在我们的业务开发中,会遇到这样一个场景,用户下了一个单,如果超过20分钟不进行支付,订单就要变成已取消状态。 字段设定 订单中需要设定了三个字段:订单是否取消、是否支付、支付超时时间。 订单是否取消会存在&…...
C++中的CRTP
CRTP,全称为 Curiously Recurring Template Pattern(奇异递归模板模式),是一种在C中使用继承和模板技术来实现静态多态和功能复用的惯用法。它使用派生类来模板参数化基类,使得基类能够访问派生类,从而在编…...
go压缩的使用
基础:使用go创建一个zip func base(path string) {// 创建 zip 文件zipFile, err : os.Create("test.zip")if err ! nil {panic(err)}defer zipFile.Close()// 创建一个新的 *Writer 对象zipWriter : zip.NewWriter(zipFile)defer zipWriter.Close()// 创…...
一图解千言,了解常见的流程图类型及其作用
在企业管理、软件研发过程中,经常会需要进行各种业务流程梳理,而流程图就是梳理业务时必要的手段,同时也是梳理的产出。但在不同的情况下适用的流程图又不尽相同。 本文我们就一起来总结一下8 种最常见的流程图类型 数据流程图 数据流程图&…...
【微信小程序_19_自定义组件(1)】
摘要:本文主要介绍了小程序开发中自定义组件的相关知识。包括组件的创建与引用,可在项目根目录创建组件文件夹,生成相应文件,并根据使用频率选择全局或局部引用。还阐述了组件和页面的区别,如组件的.json 文件需声明 “component: true”,.js 文件调用 Component () 函数…...
标准版admin后台页面添加及开发操作流程及注意事项
基础介绍 CRMEB后台管理是基于vue2技术栈进行开发搭建的 Vue Router 使用的是v3版本,mode为history模式 如需修改 mode 请在src/setting.js中修改routerMode 新建页面 新建路由 根据目录结构,需要在src/router/modules中对应模块中,添加对…...
‘perl‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。
‘perl’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 明明已经根据教程安装了perl环境,但是在cmd中依赖报该错误,本章教程提供解决办法。 一、激活perl环境 state shell ActiveState-Perl-5.36.0此时输入perl -v 是可以直接输出perl版本号的。 二、找到perl的执…...
如何利用CMMI帮助组织消除低价值流程
CMMI发展到今天,过程中历经了不断的蜕变和升级。从早期的CMM到今天的CMMI3.0,从早期的22个过程域优化组合到今天的20个实践域,从早期隶属的SEI到今天的CMMI研究院,所有的变化都是与时俱进,都是为了提供更好的实践&…...
如何理解线程安全这个概念?
文章目录 为什么需要线程安全?线程安全的实现方式总结推荐阅读文章 线程安全(Thread Safety)是指在多线程环境中,多个线程同时访问某个对象时,不会导致程序出现错误的状态或不一致的结果。简单来说,线程安全…...
代码随想录算法训练营第48天| 739. 每日温度,496.下一个更大元素 I,503.下一个更大元素II
第十一章:图论part01 图论理论基础 大家可以在看图论理论基础的时候,很多内容 看不懂,例如也不知道 看完之后 还是不知道 邻接矩阵,邻接表怎么用, 别着急。 理论基础大家先对各个概念有个印象就好,后面在…...
Qt 支持打包成安卓
1. 打开维护Qt,双击MaintenanceTool.exe 2.登陆进去,默认是添加或移除组件,点击下一步, 勾选Android, 点击下一步 3.更新安装中 4.进度100%,完成安装,重启。 5.打开 Qt Creator,编辑-》Preferences... 6.进…...
PDF工具类源码
PDF-Guru: PDF Guru Anki是一款以PDF为中心的多功能办公学习工具箱软件,包含四大板块功能:PDF实用工具箱、Anki制卡神器、Anki最强辅助、视频笔记神器,软件功能众多且强大,熟练运用可以大幅提高办公和学习效率,绝对是您…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
C++ 基础特性深度解析
目录 引言 一、命名空间(namespace) C 中的命名空间 与 C 语言的对比 二、缺省参数 C 中的缺省参数 与 C 语言的对比 三、引用(reference) C 中的引用 与 C 语言的对比 四、inline(内联函数…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
Angular微前端架构:Module Federation + ngx-build-plus (Webpack)
以下是一个完整的 Angular 微前端示例,其中使用的是 Module Federation 和 npx-build-plus 实现了主应用(Shell)与子应用(Remote)的集成。 🛠️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
AI+无人机如何守护濒危物种?YOLOv8实现95%精准识别
【导读】 野生动物监测在理解和保护生态系统中发挥着至关重要的作用。然而,传统的野生动物观察方法往往耗时耗力、成本高昂且范围有限。无人机的出现为野生动物监测提供了有前景的替代方案,能够实现大范围覆盖并远程采集数据。尽管具备这些优势…...
Go语言多线程问题
打印零与奇偶数(leetcode 1116) 方法1:使用互斥锁和条件变量 package mainimport ("fmt""sync" )type ZeroEvenOdd struct {n intzeroMutex sync.MutexevenMutex sync.MutexoddMutex sync.Mutexcurrent int…...
C++ 设计模式 《小明的奶茶加料风波》
👨🎓 模式名称:装饰器模式(Decorator Pattern) 👦 小明最近上线了校园奶茶配送功能,业务火爆,大家都在加料: 有的同学要加波霸 🟤,有的要加椰果…...
认识CMake并使用CMake构建自己的第一个项目
1.CMake的作用和优势 跨平台支持:CMake支持多种操作系统和编译器,使用同一份构建配置可以在不同的环境中使用 简化配置:通过CMakeLists.txt文件,用户可以定义项目结构、依赖项、编译选项等,无需手动编写复杂的构建脚本…...
