区域生长

2023-11-02

转自:https://blog.csdn.net/qq_37764129/article/details/81227091

注:本程序只能做图像分割,结果图是转自原作者的,暂时没实现该功能。

1、理论基础

      区域生长算法的基本思想是将有相似性质的像素点合并到一起。对每一个区域要先指定一个种子点作为生长的起点,然后将种子点周围领域的像素点和种子点进行对比,将具有相似性质的点合并起来继续向外生长,直到没有满足条件的像素被包括进来为止。这样一个区域的生长就完成了。这个过程中有几个关键的问题:

a> 给定种子点(种子点如何选取?)

      种子点的选取很多时候都采用人工交互的方法实现,也有用其他方式的,比如寻找物体并提取物体内部点作为种子点。

b> 确定在生长过程中能将相邻像素包括进来的准则

     灰度图像的差值;彩色图像的颜色等等。都是关于像素与像素间的关系描述。

c> 生长的停止条件

2、灰度差值的区域生长算法实现

算法实现的步骤:

a>  创建一个空白的图像(全黑);

b> 将种子点存入vector中,vector中存储待生长的种子点;

c> 依次弹出种子点并判断种子点如周围8领域的关系(生长规则),相似的点则作为下次生长的种子点;

d> vector中不存在种子点后就停止生长。

 
  1. #include <opencv2\highgui\highgui.hpp>

  2. #include <iostream>

  3. #include "math.h"

  4.  
  5. using namespace cv;

  6. using namespace std;

  7.  
  8. Mat RegionGrow(Mat src, Point2i pt, int th)

  9. {

  10. Point2i ptGrowing; //待生长点位置

  11. int nGrowLable = 0; //标记是否生长过

  12. int nSrcValue = 0; //生长起点灰度值

  13. int nCurValue = 0; //当前生长点灰度值

  14. Mat matDst = Mat::zeros(src.size(), CV_8UC1); //创建一个空白区域,填充为黑色

  15. //生长方向顺序数据

  16. int DIR[8][2] = { { -1, -1 }, { 0, -1 }, { 1, -1 }, { 1, 0 }, { 1, 1 }, { 0, 1 }, { -1, 1 }, { -1, 0 } };

  17. Vector<Point2i> vcGrowPt; //生长点栈

  18. vcGrowPt.push_back(pt); //将生长点压入栈中

  19. matDst.at<uchar>(pt.y, pt.x) = 255; //标记生长点

  20. nSrcValue = src.at<uchar>(pt.y, pt.x); //记录生长点的灰度值

  21.  
  22. while (!vcGrowPt.empty()) //生长栈不为空则生长

  23. {

  24. pt = vcGrowPt.back(); //取出一个生长点

  25. vcGrowPt.pop_back();

  26.  
  27. //分别对八个方向上的点进行生长

  28. for (int i = 0; i<9; ++i)

  29. {

  30. ptGrowing.x = pt.x + DIR[i][0];

  31. ptGrowing.y = pt.y + DIR[i][1];

  32. //检查是否是边缘点

  33. if (ptGrowing.x < 0 || ptGrowing.y < 0 || ptGrowing.x >(src.cols - 1) || (ptGrowing.y > src.rows - 1))

  34. continue;

  35.  
  36. nGrowLable = matDst.at<uchar>(ptGrowing.y, ptGrowing.x); //当前待生长点的灰度值

  37.  
  38. if (nGrowLable == 0) //如果标记点还没有被生长

  39. {

  40. nCurValue = src.at<uchar>(ptGrowing.y, ptGrowing.x);

  41. if (abs(nSrcValue - nCurValue) < th) //在阈值范围内则生长

  42. {

  43. matDst.at<uchar>(ptGrowing.y, ptGrowing.x) = 255; //标记为白色

  44. vcGrowPt.push_back(ptGrowing); //将下一个生长点压入栈中

  45. }

  46. }

  47. }

  48. }

  49. return matDst.clone();

  50. }

  51. int main() //区域生长

  52. {

  53. Mat src = imread("E:\\QT text\\image processing\\delineation\\image\\1.jpg");

  54. namedWindow("原图", 0);

  55. imshow("原图", src);

  56.  
  57. Point pt = (514,510); //待生长点位置

  58. int th = 10;

  59. src = RegionGrow(src, pt, th);

  60. namedWindow("RegionGrow", 0);

  61. imshow("RegionGrow", src);

  62. waitKey(0);

  63. return 0;

  64. }

3、算法效果

贴图看看使用该算法的图像处理效果:

首先对原图像进行二值化:

        得到种子点的方法这里就不用介绍了,这个不是该算法的重点。得到两个种子点(左右肺),分别使用区域生长算法得到左右肺区,然后与原图进行与运算,得到结果:

        To:博乐评论中提到的原始区域生长的算法思想。原始区域生长中一般有四领域的生长和八领域的生长两种方式,基本思想和该算法是一致的。这个算法也是博主在以前没有使用opencv的程序中修改得来的。

转自:https://blog.csdn.net/robin__chou/article/details/50071313

相关博客:

区域生长基础理论及代码:https://blog.csdn.net/gaohuazhao/article/details/51100429

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

区域生长 的相关文章

  • MASK R-CNN网络介绍

    目录 前言 一 MASK R CNN网络 1 1 RoIPool和RoIAlign 1 2 MASK分支 二 损失函数 三 Mask分支预测 前言 在介绍MASK R CNN之前 建议先看下FPN网络 Faster R CNN和FCN的介绍
  • 开源SOLOv2,让动态实例分割更快更强更精准

    作者 介绍 作者建立一个性能强大的简单 通过动态学习对象分割器的蒙版头 使蒙版头以位置为条件 进一步提升性能 具体来说 将遮罩分支解耦为遮罩内核分支和遮罩特征分支 分别负责学习卷积内核和卷积特征 利用矩阵NMS 非最大抑制 以显着减少由于掩
  • 【计算机视觉

    文章目录 一 检测相关 8篇 1 1 Explainable Cost Sensitive Deep Neural Networks for Brain Tumor Detection from Brain MRI Images consi
  • 硬币系列二

    最近搞了一些稀奇硬币 老潘把他们都用手机拍了下来 但是由于手机镜头焦距所限 并不能让硬币充满整个画面 所以很自然的想法就是 把硬币从图片中裁剪出来 一个正常人的做法是 把需要拍摄特写的物品放在纯净颜色的背景上 这种做法其实也有利于后期的抠图
  • CVPR 2020

    性能优于PDA MDA和SWDA等网络 作者团队 北京航空航天大学 1 引言 近年来 在基于深度学习的目标检测中见证了巨大的进步 但是 由于domain shift问题 将现成的检测器应用于未知的域会导致性能显著下降 为了解决这个问题 本文
  • 深度可分离卷积的计算量

    深度可分离卷积将传统的卷积分解为一个深度卷积 depthwise convolution 一个 1 1的卷积 pointwise convolution 如下图所示 a 是传统卷积 b c 分别对应深度可分离卷积的深度卷积和 1 1的卷积
  • 水平集分割

    基于距离正则的水平集分割MATLAB代码 无需初始化 This Matlab code demonstrates an edge based active contour model as an application of the Dis
  • 区域生长

    转自 https blog csdn net qq 37764129 article details 81227091 注 本程序只能做图像分割 结果图是转自原作者的 暂时没实现该功能 1 理论基础 区域生长算法的基本思想是将有相似性质的像
  • 全卷积网络(FCN)与图像分割

    从图像分类到图像分割 卷积神经网络 CNN 自2012年以来 在图像分类和图像检测等方面取得了巨大的成就和广泛的应用 CNN的强大之处在于它的多层结构能自动学习特征 并且可以学习到多个层次的特征 较浅的卷积层感知域较小 学习到一些局部区域的
  • 图像分割高铁扣件

    图像分割 针对高铁扣件 在对图像的研究和应用中 人们往往仅对图像中的某些部分感兴趣 这些部分通常被称为前景或目标 其余部分则称为背景 目标一般对应于图像中特定的 具有独特性质的区域 独特性质可以是像素的灰度值 物体轮廓曲线 颜色和纹理等 为
  • 1.2【Mask-RCNN训练自己的数据集】---- Part Two: 模型训练(全部流程总结+部分释义)

    二 编写模型训练代码 打开MaskRCNN文件夹下的samples文件夹 存在以下四个文件夹 下述模型训练代码将对shapes文件夹下的train shapes ipnyb 进行修改 这里是jupyter的文本格式 笔者不太习惯使用这种格式
  • 图像分割的衡量指标详解

    转载自 http m blog csdn net u011771047 article details 72777349 http blog csdn net u014593748 article details 71698246 fps
  • 图像分割之Unet解析及实现代码

    Unet解析及实现代码 论文连接 https arxiv org pdf 1505 04597 pdf 源码连接 https github com FENGShuanglang unet 图像分割 Unet网络结构详解 Unet网络结构 o
  • 【计算机视觉

    文章目录 一 分割 语义相关 12篇 1 1 MeViS A Large scale Benchmark for Video Segmentation with Motion Expressions 1 2 Likelihood Based
  • 【Semantic Segmentation】语义分割综述

    Semantic Segmentation 语义分割综述 metric 为mIOU year method PASCAL VOC 2012 PASCAL Context Cityscapes ADE20K 2019 HRNet 54 0 8
  • 局部自适应阈值分割方法

    github地址 https github com radishgiant ThresholdAndSegment git Local Yanowitz 由于光照的影响 图像的灰度可能是不均匀分布的 此时单一阈值的方法分割效果不好 Yano
  • 【AI视野·今日CV 计算机视觉论文速览 第215期】Tue, 8 Jun 2021

    AI视野 今日CS CV 计算机视觉论文速览 Tue 8 Jun 2021 showing first 100 of 133 entries Totally 100 papers 上期速览 更多精彩请移步主页 Daily Computer
  • 【MATLAB教程案例23】基于MATLAB图像分割算法仿真——阈值分割法、Otsu阈值分割法、K均值聚类分割法等

    FPGA教程目录 MATLAB教程目录 目录 1 软件版本 2 通过二值图实现图像分割 3 通过Otsu阈值分割实现图像分割
  • 1.3 【Mask-RCNN训练自己的数据集】---- Part Three: 用自己训练的模型进行测试(全部流程总结+部分释义)

    三 模型测试 import os import sys sys path remove opt ros kinetic lib python2 7 dist packages import random import math import
  • 图像分割2021

    cvpr2022总结 CVPR 2022 图像分割论文大盘点 大林兄的博客 CSDN博客 图像分割最新论文 尽管近年来实例分割取得了长足的进步 但如何设计具有实时性的高精度算法仍然是一个挑战 本文提出了一种实时实例分割框架OrienMask

随机推荐

  • Android升级到7.0使得webview加载页面为空白页

    前段时间 公司一哥们把他的手机拿给我看 问到公司的软件加载进去是空白页 等了好久也是空白 我也为是网络出现了问题 排查没问题啊 看看是不是缓存问题 又是清缓存 又是卸载重装 结果还是空白页面 想了一下是不是系统问题 问他有没有更新过系统 结
  • Android:RecyclerView 的使用,有这一篇就够了

    谨以文章记录学习历程 如有错误还请指明 RecyclerView 简介 首先 可以理解 RecyclerView 是 ListView 的升级版 更加灵活 同时由于封装了 ListView 的部分实现 导致其使用更简单 结构更清晰 从名字
  • 金融数据时间序列分析——模型准确率过高怎么办

    多少年后 小f想起了自己还是刚刚出道的小萌新时候犯的一个错误 当时模型的准确率贼高 高的离谱 就像下面这种情况 precision recall f1 score support 1 1 1 1 1934 0 1 1 1 535 1 1 1
  • LoadStdProfileSettings -- 加载MRU

    如何为自己的应用程序加入最近文件列表功能呢 最简单的方法就是在你新建工程的时候选择包含最近文件列表功能 也就是在 MFC AppWizard 的第 4 步的时候使 How many files would you like on your
  • 06.RabbitMQ重试机制

    RabbitMQ重试机制 补偿机制 在消费中如果发生异常了 RabbitMQ会使用补偿机制 重试 如果消息没消费成功 会一直重复发送 直到消费成功为止 我们以之前的P2P例子为例 Component RabbitListener queue
  • antd中Form.Item无法获取到对应的表单值解决

    antd中Form Item无法获取到对应的表单值解决 前言 问题代码示例 解决 前言 本文章讲的解决方案只是其中一种 无法获得对应表单的原因有很多 只能在今后的道路上慢慢采坑然后避免 问题代码示例 import React Compone
  • Retrofit中的注解原理项目实战

    今天我们来聊聊这个最近很火的网络请求库retrofit 在此基础上会延伸出一些列的知识点 现在关于retrofit的文章很多 我之所以写这篇文章的原因在于 8月份负责假设新客户端底层的过程中首次尝试使用该库 并取得非常不错的效果 不到20天
  • 计算机视觉最新技术:YOLOv8等前沿算法推荐!

    计算机视觉最新技术 YOLOv8等前沿算法推荐 计算机视觉是人工智能领域中的一个重要方向 它涉及到图像 视频等多媒体形式的信息处理 而随着人工智能技术的不断发展 计算机视觉领域也不断涌现出新的算法和模型 其中 YOLOv8等一系列算法被认为
  • 初识springcloud(微服务)

    1 微服务的定义 microservice 1 多个微服务开发的依然是一个完整的应用 2 微服务都会独立运行在一个独立的进程里面 3 微服务之间通常会采用轻量级的通信机制来进行通信 比如http https socket netty dub
  • python 视频流分析,通过ffmpeg管道将视频输出流到Python脚本中进行分析。如何导入python?...

    我正在与其他库一起编写一个脚本 它需要RGB24格式的帧或图像 为了提高兼容性 我决定允许外部管道将帧流式传输到这个程序中 每次在代码中使用更改设备或源代码可能会变得乏味 使用解析器简单地指定源代码会导致语法错误 示例 ffmpeg f d
  • python如何更新包

    python如何更新包 更多python视频教程请到菜鸟教程https www piaodoo com Python安装新包 pip是很好用的安装工具 pip list 可以查询所有已安装的包和版本 怎么知道本地安装包的版本是否有可以更新的
  • Python模拟智能开关设备MQTT接入阿里云物联网平台 - PyCharm paho.mqtt

    概要 Python 使用 paho mqtt 库 利用阿里云物联网平台的设备证书 productKey deviceName deviceSecret 自动合成 userName passWord 以MQTT通信协议接入阿里云物联网平台 并
  • IPFS搭建私有网络

    87条消息 IPFS 节点搭建 躺在家里不干活的博客 CSDN博客 ipfs节点搭建 一 安装go ipfs 1 下载 下载地址https gitee com wang ya nan go ipfs releases wget https
  • Hadoop Spark 常见问题【一】

    Spark 1 RDD 数据集拆分 数据存储在内存或者磁盘 多分区 失效自动重构 转换操作构造 2 RDD俩种依赖 窄依赖 父RDD中的分区最多只能被一个子RDD的一个分区使用 和宽依赖 子RDD依赖于所有父RDD 3 spark 角色 1
  • APS高级计划排程系统和生产排产系统

    一 什么是APS系统 高级计划与排程APS Advanced Planning and Scheduling 是指在考虑生产资源约束的前提下 通过优化方法 为生产加工任务精确安排生产资源和计划生产时间 使生产及时完成 并使资源充分利用 AP
  • 【WebRTC 02】从摄像头获取视频以及切换分辨率和视频源

    上一节中我们已经搭建出了用于操作的环境 这一节我们要实现的一个小目标 就是将电脑摄像头拍到的内容实时显示到网页上 同时我们一起学习下原理 并做一些小拓展 文章目录 操作环境 实现效果 几个概念 HTML5中的Audio和Video API
  • C++项目练手:矩阵类的功能实现

    C 项目练手 矩阵类的功能实现 C 课程设计 矩阵类的相关功能实现 矩阵简述 实数矩阵是由一个按照长方阵列排列的实数集合 除数据外 两个实数矩阵可以进行加法和乘法运算 一个矩阵也可以和一个实数相乘 得到一个新的矩阵 请基于抽象出的矩阵的属性
  • JavaScript进阶之高阶函数(Higher-order function)

    你还在以为 map reduce filter 是高阶函数吗 高阶函数听上去很让人不明觉厉 但其实也并没有什么特别厉害的地方 只是网上的定义一直让我们有点模糊而已 接下来我们来详细讲讲 首先是定义 查自百度百科 定义 在数学和计算机科学中
  • 二进制安装docker

    二进制安装docker文档 建模部署 docker安装 下载docker 因rpm包安装依赖较多 选择二进制安装 下载地址如下 https download docker com linux static stable x86 64 创建d
  • 区域生长

    转自 https blog csdn net qq 37764129 article details 81227091 注 本程序只能做图像分割 结果图是转自原作者的 暂时没实现该功能 1 理论基础 区域生长算法的基本思想是将有相似性质的像