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

图像数据处理25

六、 图像分割

6.2区域生长

6.2.1区域生长的基本概念:可以理解成先选择一个像素区域,然后将其邻接区域中相似程度高的像素合并进去,直到找不到可以合并的像素为止。其的主要优点是能够较为精准地将具有相同特征的联通区域分割出来。

6.2.2相似性判断的主要依据:设定一个阙值,计算每个候选像素的灰度值与已生长区域像素的平均灰度值之间的差的绝对值,要是这个值小于阙值,则认为相似程度高,将其合并到生长区域像素中去,反之则不进行合并。

6.3.3实际应用:

import cv2
import numpy as npdef region_growing(img, seed, threshold):"""区域生长算法实现。参数:img: 输入图像,NumPy数组。seed: 种子点,格式为(x, y)。threshold: 生长阈值,决定相邻像素是否加入区域。返回:一个NumPy数组,表示区域生长的结果。"""rows, cols = img.shaperegion = np.zeros((rows, cols), dtype=np.uint8)seeds = [seed]region[seed[0], seed[1]] = 255neighbors = [(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 1), (1, -1), (1, 0), (1, 1)]while seeds:x, y = seeds.pop(0)for nx, ny in neighbors:nx, ny = x + nx, y + nyif 0 <= nx < rows and 0 <= ny < cols and region[nx, ny] == 0:# 确保像素值被转换为整数进行比较if abs(int(img[nx, ny]) - int(img[x, y])) < threshold:region[nx, ny] = 255seeds.append((nx, ny))return region# 加载图像
img_path = 'taiyang2.jpg'  # 替换为你的图像路径
img = cv2.imread(img_path, cv2.IMREAD_GRAYSCALE)  # 以灰度模式读取图像# 检查图像是否成功加载
if img is None:print("错误:无法加载图像。请检查文件路径。")
else:# 种子点和阈值seed = (100, 100)  # 替换为你的种子点坐标threshold = 20 # 替换为你的阈值# 执行区域生长算法result = region_growing(img, seed, threshold)# 缩小图像img_small = cv2.resize(img, (0, 0), fx=0.5, fy=0.5)result_small = cv2.resize(result, (0, 0), fx=0.5, fy=0.5)# 拼接图像concat_img = cv2.hconcat([img_small, result_small])# 显示结果cv2.imshow('Region Growing Comparison', concat_img)cv2.waitKey(0)cv2.destroyAllWindows()

注:本人为在校学生,博客是边学边写的,主要是为了巩固知识,如有错误请积极指正。

本文的内容主要基于我对张运楚教授编著的《数字图像处理》一书的学习和理解。这本书深入浅出地介绍了数字图像处理的基本理论以及经典算法等,并且提供了丰富的示例代码和实际用例,极大地帮助了我学习图像处理知识。在此,我推荐大家阅读这本书,更加深入的学习有关图像处理的知识

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • MySQL数据库用户管理和授权
  • 突发性网络攻击的安全挑战分析
  • 微软DP420认证,涉及SQL,C#,Java
  • Apache Kafka 简介、使用场景及特点
  • day-43 盛最多水的容器
  • Shell 脚本入门指南
  • xss-labs靶场通关详解
  • 【DSP+FPGA】基于DSP+FPGA XC7K325T与TMS320C6678的通用信号处理平台
  • 【软考】【多媒体应用设计师】媒体与技术2
  • useeffect和uselayout区别
  • HTTPS协议中的加密机制分析、证书认证
  • hadoop日志文件
  • Linux环境下的MySQL的卸载、安装与使用[以CentOS7为例说明]
  • Transformer模型 PostionEmbedding的实现
  • @RequestBody与@RequestParam:Spring MVC中的参数接收差异解析
  • #Java异常处理
  • [译] React v16.8: 含有Hooks的版本
  • Angular 响应式表单 基础例子
  • Angular4 模板式表单用法以及验证
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Linux下的乱码问题
  • spring boot下thymeleaf全局静态变量配置
  • vuex 笔记整理
  • 给github项目添加CI badge
  • 回流、重绘及其优化
  • 聊聊flink的BlobWriter
  • 聊聊hikari连接池的leakDetectionThreshold
  • 日剧·日综资源集合(建议收藏)
  • -- 数据结构 顺序表 --Java
  • 问题之ssh中Host key verification failed的解决
  • 自动记录MySQL慢查询快照脚本
  • 基于django的视频点播网站开发-step3-注册登录功能 ...
  • ​MySQL主从复制一致性检测
  • ​一些不规范的GTID使用场景
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #我与Java虚拟机的故事#连载07:我放弃了对JVM的进一步学习
  • (读书笔记)Javascript高级程序设计---ECMAScript基础
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (附源码)springboot助农电商系统 毕业设计 081919
  • (汇总)os模块以及shutil模块对文件的操作
  • (六)DockerCompose安装与配置
  • (四)鸿鹄云架构一服务注册中心
  • (五)activiti-modeler 编辑器初步优化
  • (转)EOS中账户、钱包和密钥的关系
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • ***利用Ms05002溢出找“肉鸡
  • .gitignore文件---让git自动忽略指定文件
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .net core 6 集成 elasticsearch 并 使用分词器
  • .net core 6 集成和使用 mongodb
  • .Net Web窗口页属性
  • .NET处理HTTP请求
  • .NET中统一的存储过程调用方法(收藏)
  • .ui文件相关