matlab跟踪目标图像边缘并计算长轴短轴

2023-10-29

题目如下:
对图像进行处理和分析,跟踪出目标边缘,并计算出目标的长轴和短轴及方向,原始图像如图1所示。
图1 原始图像
图1 原始图像
一、处理过程
1.边缘提取
目标边缘提取在图像处理学科中属于数学形态学,在提取目标边缘之前有认真思考过应该用什么方法?是用4连通方向码、8连通方向码,还是腐蚀与膨胀呢?由于本人编程水平有限,再加上对知识的熟练程度不一,最终选择较为简单的腐蚀与膨胀。
膨胀在数学形态学的作用是把图像周围的背景点合并到物体中。如果两个物体之间的距离比较近,那么膨胀运算就会使着两个物体联通在一起,所以膨胀对填补图像分割后物体中的空洞很有用。
腐蚀在数学形态学中的作用是消除物体的边界点,它可以把小于结构元素的物体去除,选取不同大小的结构元素可以去掉不同大小的物体。如果两个物体之间有细小的连通,当结构元素足够大的时候,可以通过腐蚀运算将两个物体分开。
仔细观察目标图像,发现图片很干净没有噪声,并且是黑白图片,像是一张二值图,但不是很肯定,因为本人没有图像处理的经验,所以还是按照惯例将目标图像二值化了,原始图像和二值图的对比如图2所示。
在这里插入图片描述
图2 原始图像和二值图
我提取目标轮廓的方法就是将二值图经过膨胀再减去原图,原始图像较为简单通过如此处理即可得到外轮廓图,如图3所示。
在这里插入图片描述
图3 外轮廓图
2.长轴短轴及方向
计算目标长轴和短轴在图像处理中属于图像的几何特征。
当物体边界已知时,用其外接矩形的尺寸来刻画它的基本形状是最简单的方法,求物体在坐标系方向的外接矩形,只需计算物体边界点的最大和最小坐标值,便可得到物体水平和垂直跨度。但是,对于任意朝向的物体,需要先确定物体的主轴,然后计算在主轴方向上的长度和与之垂直方向上的宽度,这样的外接矩形是物体最小的外接矩形(MER,Minimum Enclosing Rectangle)。所以我用计算MER的方法来计算长轴短轴及方向。
具体思路如下:每次以3°的增量在90°的范围内旋转物体边界,每旋转一次都从上到下、从下到上、从左到右、从右到左遍历整个图像,记录最先遇到的四个边界点的X和Y的坐标,将其对应相减可得到外接矩形的长和宽,并计算面积。在旋转到某个角度时,外接矩形的面积会达到最小,三十次旋转完后通过依次比较得到最小的面积,即为边界的最小外接矩形,其长即为长轴,宽即为短轴,由其旋转角度可得长轴和短轴的方向,图4为三十次旋转的数据,数据从上到下依次是旋转角度、外接矩形的面积及上下左右四个边界点的位置。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
图4 三十次旋转的数据
通过比较得到最小的面积,即边界的最小外接矩形,其长为长轴,宽为短轴,由其旋转角度可得长轴和短轴的方向,数据如图5,从上到下依次是旋转角度、外接矩形的面积及上下左右四个边界点的位置。
在这里插入图片描述
图5 最小外接矩形的数据
简单计算:
279-185=94,为短轴大小。
317-116=201,为长轴大小。
42°为图像与x轴负方向的夹角,画出其最小外接矩形,如图5,由图5易知长轴与x轴负方向的夹角为42°短轴与x轴负方向的夹角为132°。
目标轮廓的最小外接矩形如图6所示。
整个图像处理完毕。
在这里插入图片描述
图6 最小外接矩形

二、结果展示
1.目标边缘
在这里插入图片描述
2.几何尺寸
长轴201像素,与x轴负方向的夹角为42°
短轴94像素,与x轴负方向的夹角为132°
3.MATLAB程序

imginput=imread(fullfile('C:\Users\Administrator\Desktop','7.bmp'));
figure;subplot(121);imshow(imginput);
title('原始图像');
level=graythresh(imginput);
BW=im2bw(imginput,level);
subplot(122);imshow(BW);
title('二值图像');
se = strel('square',3); 
imgwai=imdilate(imginput,se)-imginput;  %imgnwai为外边界,膨胀图减去原图  
figure;imshow(imgwai);
title('外轮廓图');
m=1;
for A=0:30
    R=imrotate(imgwai,3*A,'nearest');
    p=0;
    [x,y]=size(R);
    for i=1:x
        for j=1:y
            if R(i,j)==255
                shang=i;
                p=1;
                break
            end
            if p==1
                p=0;
                break
            end
        end
    end
 
    for i=1:x
        for j=1:y
            if R(x-i+1,j)==255
                xia=x-i+1;
                break
            end
            if p==1
                p=0;
                break
            end
        end
    end
 
    for j=1:y
        for i=1:x
            if R(i,j)==255
                zuo=j;
                break
            end
            if p==1
                p=0;
                break
            end
        end
    end
 
    for j=1:y
        for i=1:x
            if R(i,y-j+1)==255
                you=y-j+1;
                break
            end
            if p==1
                p=0;
                break
            end
        end
    end
 
    chang=(xia-shang);
    kuan=(you-zuo);
    S=chang*kuan;
 
    all(1,A+1)=3*A;
    all(2,A+1)=S;
    all(3,A+1)=shang;
    all(4,A+1)=xia;
    all(5,A+1)=zuo;
    all(6,A+1)=you;
end
 
for n=1:A+1
    if all(2,n)==min(all(2,:))
        Min(1,m)=all(1,n);
        Min(2,m)=all(2,n);
        Min(3,m)=all(3,n);
        Min(4,m)=all(4,n);
        Min(5,m)=all(5,n);
        Min(6,m)=all(6,n);
        m=m+1;
    end
end
 
[x_MIN,y_MIN]=size(Min);
 
for t=1:y_MIN
    R=imrotate(imgwai,Min(1,t),'nearest');
    SHANG=Min(3,t);
    XIA=Min(4,t);
    ZUO=Min(5,t);
    YOU=Min(6,t);
    R(SHANG,min(ZUO,YOU):max(ZUO,YOU))=255;
    R(XIA,min(ZUO,YOU):max(ZUO,YOU))=255;
    R(min(SHANG,XIA):max(SHANG,XIA),ZUO)=255;
    R(min(SHANG,XIA):max(SHANG,XIA),YOU)=255;
  figure;imshow(R); title('最小外接矩形');
end


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

matlab跟踪目标图像边缘并计算长轴短轴 的相关文章

  • 在 Matlab 中将绘图从高斯混合变换为均匀分布

    考虑以下抽签2x1Matlab 中的向量 其概率分布是两个高斯分量的混合 P 10 3 number draws v 1 First component mu a 0 0 5 sigma a v 0 0 v Second component
  • 如何使用神经网络保存 Sift 特征向量进行分类

    SIFT 特征的 Matlab 实现发现于http www cs ubc ca lowe keypoints http www cs ubc ca lowe keypoints 在 stackoverflow 的帮助下 我想将功能保存到 m
  • 一次分配多个字段的聪明方法?

    由于遗留函数调用 我有时被迫编写像这样的丑陋的包装器 function return someWrapper someField a someField a b someField b and so on realistically it
  • 将此 MATLAB 代码转换为 Python 时我做错了什么?

    我正在努力将生成波形的 MATLAB 代码转换为 Python 就上下文而言 这是原子力显微镜带激发响应的模拟 与代码错误无关 在 MATLAB 中从 r vec 生成的图形与我在 Python 中生成的图形不同 我是否正确地将 MATLA
  • 图像堆栈的最大强度投影

    我正在尝试重新创建该功能 max array 3 来自 MatLab 它可以获取 N 个图像的 300x300px 图像堆栈 我在这里说 图像 因为我正在处理图像 实际上这只是一个大的双数组 300x300xN 并创建一个 300x300
  • 如何在 MATLAB 中可视化球体的交集?

    似乎这个问题在一些地方被问过 包括SO https stackoverflow com questions 35130336 draws the intersecting volume of two spheres in matlab 我最
  • 在 Excel 中打印 MATLAB 图窗并调整其大小

    我在 MATLAB 中有两个带有手柄的图形hFig1 and hFig2 我想将它们打印到 Excel 中的特定单元格 单元格 E3 和 I3 并将它们重新调整为 2 英寸 x 3 英寸 我尝试过使用 AddPictures对象处理程序和使
  • 使用 GPU 进行 Matlab 卷积

    我用gpuArray尝试了matlab的卷积函数conv2 convn 例如 convn gpuArray rand 100 100 10 single gpuArray rand 5 single 并将其与 cpu 版本 convn ra
  • Matlab:如何显示数组的“真实”值?

    我有一个在脚本中计算的向量 计算后 我将值显示到命令窗口 显示如下 finalResults 1 0e 05 0 0001 0 0 0005 0 0002 0 0001 0 0027 0 0033 0 0001 0 0000 0 0000
  • 计算数组中接下来的 n 个元素的乘积

    我想计算下一个的乘积n矩阵的相邻元素 号码n要相乘的元素数应在函数的输入中给出 例如 对于此输入 我应该从第一个开始计算每 3 个连续元素的乘积 p ind max product 1 2 2 1 3 1 3 这给出了 1 2 2 2 2
  • Matlab PARFOR 循环可以通过编程方式打开/关闭吗?

    有一个关于 MATLAB 中 parfor 的简单问题 我想在程序中设置一个标志 以便在 parfor 和常规 for 循环之间进行更改 基本上 我需要此功能 以便我的代码的某些部分可以在 调试 模式下更新图形 然后当关闭该标志时 使用 p
  • Matlab - 如果值包含xxx,则删除元胞数组中的行

    在 Matlab 中 如何删除包含变量字符串的元胞数组中的元胞 假设我的元胞数组是 C svnTrunk RadarLib radarlb utilities scatteredInterpolant m C svnTrunk RadarL
  • 如何使用matlab生成不同频率的正弦波?

    对于我的项目 我需要使用 matlab 生成一个正弦波 它有 100 000 个样本 并且频率在每 10 000 个样本后随机变化 采样率和频率可以根据方便而定 matlab中有没有函数可以生成这个 好的另一个例子 生成 5 个随机频率 r
  • 在 MATLAB 中重命名文件

    我正在尝试以编程方式重命名工作目录中的文件a temp txt to b hello txt 您建议如何这样做 MATLAB中有一个简单的文件重命名函数吗 我认为您正在寻找 MOVEFILE
  • 使用 MATLAB 进行线路跟踪

    我有一个图像 我想将其转换为逻辑图像 包括线条为黑色 背景为白色 当然 可以使用阈值方法来实现这一点 但我不想使用这种方式来做到这一点 我想通过使用线路跟踪方法或类似的方法来检测它 这是关于视网膜血管检测的 我找到了一个article ht
  • 如何在 Matlab 中将数组打印到 .txt 文件?

    我才刚刚开始学习Matlab 所以这个问题可能非常基本 我有一个变量 a 2 3 3 422 6 121 9 4 55 我希望将值输出到 txt 文件 如下所示 2 3 3 422 6 121 9 4 55 我怎样才能做到这一点 fid f
  • 有没有办法在matlab中进行隐式微分

    我经常使用 matlab 来帮助我解决数学问题 现在我正在寻找一种在 matlab 中进行隐式微分的方法 例如 我想区分y 3 sin x cos y exp x 0关于dy dx 我知道如何使用数学方法通常做到这一点 但我一直在努力寻找使
  • 如何将二进制值列表转换为int32类型?

    我在 MATLAB 工作区中有一个小端格式的二进制数列表 我想将它们转换为 int32 a是由 0 和 1 组成的双向量 如下所示 a 0 0 0 1 1 0 0 1 1 1 1 0 1 0 1 0 0 0 0 1 1 0 0 0 1 1
  • matlab中的排列函数是如何工作的

    这是一个有点愚蠢的问题 但我似乎无法弄清楚排列在 matlab 中是如何工作的 以文档为例 A 1 2 3 4 permute A 2 1 ans 1 3 2 4 到底是怎么回事 这如何告诉 matlab 3 和 2 需要交换 哇 这是我迄
  • 理解高斯混合模型的概念

    我试图通过阅读在线资源来理解 GMM 我已经使用 K 均值实现了聚类 并且正在了解 GMM 与 K 均值的比较 以下是我的理解 如有错误请指出 GMM 类似于 KNN 在这两种情况下都实现了聚类 但在 GMM 中 每个簇都有自己独立的均值和

随机推荐

  • (Java)leetcode-337 House Robber III(打家劫舍III)

    题目描述 在上次打劫完一条街道之后和一圈房屋后 小偷又发现了一个新的可行窃的地区 这个地区只有一个入口 我们称之为 根 除了 根 之外 每栋房子有且只有一个 父 房子与之相连 一番侦察之后 聪明的小偷意识到 这个地方的所有房屋的排列类似于一
  • CAN芯片_ TJA1051T/3

    前不久画了块板子 STM32F407VET6加CAN芯片的 如下图 这个电路是从正点原子抄过来的 但是板子打出来发现用不了 换上正点原子STM32F429开发板上的CAN芯片后就能正常工作了 仔细观察后发现两个芯片不太一样 我们买的是TJA
  • Windows 10 安装 PostgreSQL 12.x 报错 ‘psql‘ 不是内部或外部命令 & 由于找不到文件libintl-9.dll等问题

    目录 序言 一 问题总结 问题 1 psql 不是内部或外部命令 也不是可运行的程序或批处理文件 问题 2 由于找不到文件libintl 9 dll 无法继续执行代码 重新安装程序可能会解决此问题 1 卸载 2 安装 3 安装 Stack
  • 8年经验之谈 —— 35岁以上的测试开发工程师都去哪里了?

    测试开发工程师就是吃青春饭 35岁就是测试开发工程师的天花板 没有工作机会了 测试开发工程师趁早转行 不然迟早失业 网上对测试开发工程师不友好的言论非常多 真的是这样吗 如果不是这样 那么35岁以上的测试开发工程师去哪里了呢 行业内转岗 一
  • 一篇搞定pandas语法,建议收藏

    导语 如果说大数据里面hive是屠龙刀 那么pandas则是倚天剑 帮助我们对数据数据挖掘 数据分析 数据清洗 本篇介绍了Pandas 一些基础的语法 以及使用技巧 建议收藏 目录 数据准备 Dataframe 基础操作 2 1 查看 2
  • Android App保活的方式

    背景 在Android系统中 当应用程序进入后台或者被用户关闭后 系统会自动回收该应用程序的资源 以达到优化系统性能的目的 但是 有些应用程序需要在后台长时间运行 比如音乐播放器 即时通讯等 这时就需要使用一些技术手段来保持应用程序的运行状
  • JAVA实现文件上传

    利用JAVA实现文件上传 Demo01 servlet下的图片上传功能 前端代码 upload html h3 文件上传 h3
  • C#中按位与,按位或

    在工作中遇到按位或组合权限串 一直不是特别明白 今天终于花了半个下午的时间搞明白其中的道理 首先每一个权限数都是2的N次方数 如 k1 2 添加 k2 4 删除 k3 8 修改 如此定义功能权限数 当需要组合权限时 就需要对各个所拥有的权限
  • JavaScript中使用画布实现笑脸火柴人

    在这之前 根本不知道JavaScript具体到底有多重要 现在才明白JavaScript也很强大 从网上看了几个js写的网页小游戏 我都惊呆了 以后一定要好好学习js
  • 【华为OD统一考试B卷

    在线OJ 已购买本专栏用户 请私信博主开通账号 在线刷题 运行出现 Runtime Error 0Aborted 请忽略 华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一
  • 数据可视化 第4章

    第4章 添加表格QTableView 1 添加table model py 里面子类化QAbstractTableModel 实现自定义table model from PySide2 QtCore import Qt QAbstractT
  • An Introduction to UE4 Plugins

    An Introduction to UE4 Plugins Rate this Article 3 67 3 votes Approved for Versions 4 2 4 3 4 4 4 5 Contents hide
  • <OpenCV> Mat属性

    OpenCV的图像数据类型可参考之前的博客 https blog csdn net thisiszdy article details 120238017 OpenCV Mat类型的部分属性如下 size 矩阵的大小 s i z e
  • VMware虚拟机网络设置(三种网络模式)

    VMware虚拟机网络设置 三种网络模式 VMware网络使用windows虚拟机客户端时一般默认NAT模式自动可以上网 近日安装macos时上网却不行 网上搜索后自己整理出来 对三种模式自己的看法 首先 找到编辑 gt 虚拟网络编辑器 虚
  • k数和

    思路 这道题感觉是一个非常好的动态规划的题目 动态规划方程 d i j target d i 1 j target d i 1 j 1 target a i d i j t a
  • pigz搭配tar开启不了多线程,还是很慢

    Q pigz搭配tar开启不了多线程 还是很慢 A 注意你的压缩的文件夹或文件的名字不要包含 字符 其他字符未尝试
  • Java代码中对文件的操作

    引言 这几天的项目涉及到了文件的操作 我这边做一下整理 环境说明 jdk版本 1 8 0 311 对文件的操作 1 保存文件 保存文件 param file 文件 param path 文件保存目录 param name 保存后的文件名字
  • 怎么在浏览器的控制台上换行输入?

    使用快捷键 shift enter 如
  • python numpy.meshgrid()函数的用法

    numpy meshgrid xi kwargs 从一个坐标向量中返回坐标矩阵 参数 x1 x2 xn array like 表示网格坐标的一维数组 indexing xy ij 可选 笛卡尔 xy 默认值 或矩阵 ij 输出索引 spar
  • matlab跟踪目标图像边缘并计算长轴短轴

    题目如下 对图像进行处理和分析 跟踪出目标边缘 并计算出目标的长轴和短轴及方向 原始图像如图1所示 图1 原始图像 一 处理过程 1 边缘提取 目标边缘提取在图像处理学科中属于数学形态学 在提取目标边缘之前有认真思考过应该用什么方法 是用4