MATLAB 的“regionprops”函数如何计算周长?

2024-01-21

我发现该函数使用链码 http://www.crisluengo.net/archives/310对形状的边界进行编码,然后计算周长this way https://fr.mathworks.com/matlabcentral/answers/357994-perimeter-used-by-regionprops使用这个公式:

perimeter = sum(isEven)*0.980 + sum(~isEven)*1.406 - sum(isCorner)*0.091;

然而,我不知道在某些特殊情况下这个链码是如何计算的。

考虑以下示例(MATLAB 生成的周长为 10.0150):

 1     1     1     1     1
 1     1     0     0     1

MATLAB 如何定义/计算连接到左侧 2x2 正方形的一像素宽线周围的周长?

更确切地说:

如果我使用字母表示非零边框像素(本例中所有 1 都是边框):

 a     d     e     f     g
 b     c                 h

链码可以从以下位置开始:a。如果我们顺时针计算,它将继续c, e, f...这意味着它无法返回a,否则它必须在同一个字母上走两次(如果有 1px 宽的线附加到其他 1px 宽的线等,甚至超过两次)。


获取链码有两个步骤:追踪边界和将坐标编码为链码。后一步很琐碎,我不会详细介绍。我认为这个问题的目的就是追寻边界。

通常所追踪的是形成边界的对象像素(即具有至少一个背景邻居)。重要的是这按顺序发生,仅列出这些像素是不够的。但请注意,这种边界描述是有偏差的:真实对象大于通过在对象边界处连接像素中心而形成的多边形。周长计算需要考虑到这一点(如您链接的博客文章中所述)。

这段代码稍微改编自这篇博文 https://www.crisluengo.net/archives/324. img是一个逻辑数组:

% Data for chain code encoding:
directions = [ 1, 0
               1,-1
               0,-1
              -1,-1
              -1, 0
              -1, 1
               0, 1
               1, 1];
% Get a start point, any pixel on the boundary is OK:
indx = find(img,1)-1;           % 0-based indexing is easier
% Image sizes
sz = [size(img,2),size(img,1)]; % x,y sizes, rather than y,x sizes
% Coordinates for start point
start = [floor(indx/sz(2)),0];
start(2) = indx-(start(1)*sz(2));
% Initialize algorithm
cc = [];                        % The chain code
coord = start;                  % Coordinates of the current pixel
dir = 1;                        % The starting direction
% Loop till full boundary is traced
while 1
   newcoord = coord + directions(dir+1,:);
   if all(newcoord>=0) && all(newcoord<sz) ...
         && img(newcoord(2)+1,newcoord(1)+1)
      cc = [cc,dir];
      coord = newcoord;
      dir = mod(dir+2,8);
   else
      dir = mod(dir-1,8);
   end
   if all(coord==start) && dir==1 % back to starting situation
      break;
   end
end

正如您在这里所看到的,该算法从随机像素开始,并选择一个方向。然后它沿着边界寻找给定方向上的下一个邻居。链接的博客文章详细解释了如何找到该邻居。简而言之,您沿着当前方向寻找具有背景邻居的第一个相邻对象像素。给定我们当前的位置和方向,可以证明特定方向上的邻居将是背景像素。从背景像素开始,绕当前点顺时针(或逆时针,选择一个)方向,第一个对象像素将保证是边界像素。我们将其添加到列表中并继续。

当我们到达起始位置时算法终止和方向。因此,对象的 1 像素厚部分将被访问两次,以完成边界追踪。

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

MATLAB 的“regionprops”函数如何计算周长? 的相关文章

  • MATLAB 类的 Description 和DetailedDescription 属性

    内置 MATLAB 类具有 Description 和 DetailedDescription 属性的值 gt gt handle ans meta class handle Package meta Properties Name han
  • 如何在 MATLAB 中绘制纹理映射三角形?

    我有一个三角形 u v 图像中的坐标 我想在 3D 坐标处绘制这个三角形 X Y Z 与图像中的三角形进行纹理映射 Here u v X Y Z都是具有三个元素的向量 代表三角形的三个角 我有一个非常丑陋 缓慢且令人不满意的解决方案 其中我
  • matlab中求和函数句柄

    Hi我试图对两个函数句柄求和 但它不起作用 例如 y1 x x x y2 x x x 3 x y3 y1 y2 我收到的错误是 对于 function handle 类型的输入参数 未定义函数或方法 plus 这只是一个小例子 实际上我实际
  • MATLAB 列含义的内存分析

    我正在使用 MATLAB 配置文件来使用命令观察内存 profile memory on profile clear my code profile report and i got this table 1 我想问一下什么意思 已分配内存
  • opencv - 在图像中绘制轮廓

    我正在尝试在图像周围绘制轮廓 我可以看到找到了轮廓 但无法绘制轮廓 轮廓的颜色似乎是两种 黑色和白色 颜色中的一种 import cv2 import numpy as np import matplotlib pyplot as plt
  • Matlab:如何在没有颜色分级的情况下绘图?

    我的朋友制作了一个脚本来处理大量数据并绘制各种图表 但是当他运行脚本时 图表根据图例具有不同的颜色 当我这样做时 所有图表都相似 颜色渐变从黑色到红色的 见图 为什么不同以及如何获得不同颜色的图表 带有颜色分级图的 2D 绘图 figure
  • 有没有一种简单的方法(工具?)来比较不同格式的图像像素?

    好吧 我现在已经用 java 编写了一个基本的无损 jpeg 连接器 但我想将它生成的文件与原始文件进行比较 我只能在十六进制编辑器中比较这么多 有谁知道一种简单的方法 基于软件或基于java 最好是软件 因为我现在不想再编码了 我可以比较
  • 图像处理中面部标志点的归一化

    我正在从事一个与从面部识别情绪 悲伤 快乐 愤怒等 相关的项目 我正在使用 dlib 库中的面部标志检测器 它检测 68 个兴趣点 对于相同的情绪 这些兴趣点会根据不同面部的面部朝向 眼睛大小 嘴唇等而变化 我想标准化这些兴趣点 使它们不受
  • 各向异性扩散二维图像[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我想在二维图像上使用各向异性扩散 我想使用 python 但不介意使用 matlab 或 c 他们有我
  • 在 Matlab 中将变量命名为字符串 [重复]

    这个问题在这里已经有答案了 假设变量 FileName 包含一个字符串 例如 Name1 如何创建名称为 Name1 的变量 本页的示例 4 似乎很相似 但我无法让它工作 这是正确的做法吗 http se mathworks com hel
  • 防止Matlab舍入输出?

    我运行一个简单的脚本来估计函数的根 一切都很好 算法的每次迭代都会打印出当前的 x 和 f x 但是当脚本完成并将 x 的最终估计设置为函数的输出时 该值将被返回并四舍五入到小数点后 3 位 while k lt maxit k k 1 d
  • 将曲线图案与图像边缘匹配

    我有一个要搜索沿其边缘的曲线的目标图像和一个包含该曲线的模板图像 我需要实现的是在目标图像中找到模板图像中的曲线的最佳匹配 并根据分数来判断是否匹配 这还包括曲线的旋转和大小调整 目标图像可以是 Canny Edge 检测器的输出 如果这能
  • MATLAB - 避免循环基于其他向量的元素创建矩阵

    假设我有向量x y z 长度n m l 我想创建一个细胞矩阵Q使用这些向量的元素 天真的人们可以像这样使用 for 循环 for i 1 n for j 1 m for k 1 l Q i j k someFunction x i y j
  • 最快的 Sobel 边缘检测 C#

    我想制作一个实现索贝尔边缘检测的程序 这是我的代码 private Bitmap SobelEdgeDetect Bitmap ori Bitmap b original Bitmap bb original int width b Wid
  • 如何在python中提取skimage骨架信息到NetworkX节点和边以进行进一步的高级分析

    目前 我在Python中使用skimage从一些二值化地图中提取开放空间的骨架 如下图所示 使用以下 python 代码 from skimage morphology import skeletonize from skimage imp
  • 如何在Java中裁剪图像的某些区域?

    我正在尝试执行以下代码 private void crop HttpServletRequest request HttpServletResponse response int x 100 int y 100 int w 3264 int
  • 如何使用PNGJS库从rgb矩阵创建png?

    我无法从此处的文档创建 PNG 文件 编码 https github com niegowski node pngjs https github com niegowski node pngjs 该文档提供了有关操作现有 PNG 的示例 为
  • 我想知道像tineye.com这样的反向图像搜索服务是如何工作的......?

    像 TinEye 这样的反向图像搜索引擎如何工作 我的意思是进行图像搜索需要哪些参数 不知道 TinEye 是否使用这个 但是SURF http en wikipedia org wiki SURF是用于此目的的常用算法 在这里您可以看到一
  • 如何从图像中去除颗粒状细节[重复]

    这个问题在这里已经有答案了 我用过adapthisteq以提高前景物体的可见度 然而 这似乎产生了颗粒状的噪点细节 如何从图像中去除这些颗粒状细节 我尝试过高斯模糊imgaussfilt虽然它确实消除了一些颗粒状细节 但图像中细胞的形状变得
  • OpenCV - 我需要将彩色图像插入黑白图像并且

    我用以下代码将黑白图像插入彩色图像 没问题 face grey cv cvtColor face cv COLOR RGB2GRAY for row in range 0 face grey shape 0 for column in ra

随机推荐

  • 将值放入 array_walk_recursive() 之外的数组中[重复]

    这个问题在这里已经有答案了 我想递归地查找名为 image 的键的嵌套 JSON 对象 并将它们的值 URL 字符串 推送到函数外部的另一个数组中 从其他示例和 SO 问题中 我知道我需要传递对范围外数组变量的引用 但我对 PHP 不太熟悉
  • 如何使用 NSDateFormatter 将字符串日期转换为 NSDate

    我有以下日期作为 NSString Thu May 29 14 22 40 UTC 2014 我尝试使用以下代码将其转换为 NSDate NSDateFormatter fmt NSDateFormatter alloc init fmt
  • 仅获取我的 Android 应用程序附带的区域设置列表

    我知道有多种方法可以获取设备支持的所有区域设置的列表 有人能够获取您已包含在应用程序中的区域设置列表吗 使用以下代码我知道我可以获得设备支持的列表 String languages getAssets getLocales or Strin
  • 利用 Google 帐户凭据在 Android 中发送电子邮件

    在 Android 中是否可以使用手机关联的 GMail 凭据以编程方式发送电子邮件 当我明确提供用户名和密码时 我可以发送电子邮件 但我希望利用已经与手机关联的 Google 帐户 请注意 我不需要实际访问用户名或密码 我只是想间接利用这
  • Spark Cassandra 连接器使用 IN 子句进行过滤

    我在 java 的 Spark cassandra 连接器过滤方面面临一些问题 Cassandra 允许使用 IN 子句按分区键的最后一列进行过滤 例如 create table cf text a varchar b varchar c
  • Elasticsearch - 文档中片段的位置

    我正在执行如下所示的短语查询 它返回给我按相关性排序的突出显示的片段 当然 我希望用户单击某个片段 然后我会将文档滚动到相应的位置 但是 我在 Elasticsearch 中看不到任何方法来找出片段在原始文档中的位置 有任何想法吗 GET
  • 如何在Rails中缓存任意对象(基于时间)?

    我读了官方指南 它说有page cache action cache and fragment cache 但它们不是我想要的 我只是想缓存一个对象 而不是整个页面或视图片段 就像这样的伪代码 def show cache ads expi
  • Boto3:等待 S3 流式上传完成

    我在用着S3 Client upload fileobj with a BytesIO流作为输入 将文件从流上传到 S3 我的函数不应该在上传完成之前返回 所以我需要一种方法来等待它 从文档中看 没有明显的方法来等待传输完成 但有一些提示c
  • 我的 Android 设备没有出现在 adb 设备列表中

    我有一台 HP Slate 21 它使用 USB 电缆连接到我的 Windows 盒子 设备上已启用 USB 调试 After 添加适当的 SingleAdbInterface and CompositeAdbInterface https
  • IIS7 显示 iisstart.html 而不是默认文档

    我有一个在 IIS7 上运行的 Sitefinity 4 1 网站 我在默认文档列表的顶部设置 Default aspx 但是当我访问http www http www org 它显示 IIS7 欢迎页面 当我访问时http www htt
  • 捕获引擎执行异常

    我有一个包含托管代码和本机代码的应用程序 应用程序当前有一个未处理的异常过滤器 通过 SetUnhandledExceptionFilter 设置 它捕获任何关键错误 生成小型转储 记录各种应用程序参数 然后退出程序 未处理的异常处理程序不
  • MySQL:删除同一行时发生死锁

    最近删除记录时遇到死锁 注意隔离级别是可重复读取 MySQL 5 7 这是重现步骤 1 创建一个新表 CREATE TABLE t id bigint 20 NOT NULL AUTO INCREMENT name varchar 32 N
  • 清除 django_session 表中的会话而不注销当前用户

    我正在 Django 中进行会话 默认情况下 django 将会话存储在django session 我发现没有办法清除会话 Though clearsessions可用于删除行 还建议将其作为 cron 作业运行 但这样做意味着注销所有登
  • 如何使用 Postman 通过 HTTP Basic 调用服务?

    我正在使用curl来发出请求 curl u NL91IOC2RWCM31G1ESWYX SvCuj0tFQjmclZDFQzdMqfrGZ5Qw5jfKM8 H Accept application json https api storm
  • 在chart.js的圆环图上显示每个弧的值

    这是我当前的圆环图 我想在弧本身上显示每个弧的值 https i stack imgur com DJeQD png 这是图表的配置 const genderConfig plugins title display true text GE
  • 如何访问 android xamarin 表单中工具栏图像的点击或单击

    我在工具栏中放置了一个图像 如下面的代码所示 我这样做是为了在左侧有一个工具栏图标
  • 删除

    我的表格采用两栏表格格式 在左栏中我使用
  • 在 WordPress 中实现简单的动态路由

    假设我有一个干净的 WordPress 安装 带有基本的自定义主题 在该主题中 我有一个自定义页面模板 它只是一个 iframe 它指向不同域上的 web 应用程序 所以假设我的 WordPress 安装可以在http example co
  • 通过管道 tail -f 切割到 sed 不会产生输出

    我尝试使用以下命令在终端中显示命名管道 tail f textFile cut d f 3 sed e s a g g 由于某种原因 这不会产生任何输出 如果删除 f 它确实会按预期工作 tail textFile cut d f 3 se
  • MATLAB 的“regionprops”函数如何计算周长?

    我发现该函数使用链码 http www crisluengo net archives 310对形状的边界进行编码 然后计算周长this way https fr mathworks com matlabcentral answers 35