基于形态学处理的不规则形状图像的几何参数统计,包括输出面积,周长,圆度,矩形度,伸长度

news2024/11/17 19:50:28

up目录

一、理论基础

二、核心程序

三、测试结果


一、理论基础

         形态学是图像处理中应用最为广泛的技术之一,主要用于从图像中提取对表达和描绘区域形状有意义的图像分量,使后续的识别工作能够抓住目标对象最为本质的形状特征,如边界和连通区域等。同时像细化、像素化和修剪毛刺等技术也常应用于图像的预处理和后处理中,成为图像增强技术的有力补充。

       形态学的基本思想是利用一种特殊的结构元来测量或提取输入图像中相应的形状或特征,以便进一步进行图像分析和目标识别。

       在经阈值处理提取出目标区域的二值图像之后,区域边缘可能并不理想,这时可以使用腐蚀或膨胀操作对区域进行“收缩”或“扩张”。腐蚀和膨胀是两种最基本也是最重要的形态学运算, 它们是很多高级形态学处理的基础, 很多其他的形态学算法都是由这两种基本运算复合而成。

1.1面积

        Matlab函数bwarea简介 函数功能:计算二值图像中对象的总面积. 调用格式: total = bwarea(BW) 估算二值图像BW中对象的总面积. 返回的total是一个标量, 它的值大致地反映了和图像中on像素的个数.由于对于不同像素类型, 度量标准不同, 因此结果可能并不十分精确.BW可以是数值类型(整型.浮点型)或者逻辑类型.对于数值类型, 像素值不为0被视为on.返回值total是double类型的.

       bwarea通过对图像中每个像素的面积求和来估计图像中所有 on 像素的面积。单个像素的面积是通过观察其 2×2 邻域来确定的。有六种不同的情形,每种情形表示一个不同面积:

  • 具有零个 on 像素的情形(面积 = 0)

  • 具有一个 on 像素的情形(面积 = 1/4)

  • 具有两个相邻 on 像素的情形(面积 = 1/2)

  • 具有两个对角 on 像素的情形(面积 = 3/4)

  • 具有三个 on 像素的情形(面积 = 7/8)

  • 具有所有四个 on 像素的情形(面积 = 1)

每个像素是四个不同 2×2 邻域的一部分。例如,被 off 像素包围的单个 on 像素的总面积为 1。

1.2周长

       链码(又称为freeman码)是用曲线起始点的坐标和边界点方向代码来描述曲线或边界的方法,常被用来在图像处理、计算机图形学、模式识别等领域中表示曲线和区域边界。

1、原链码
        从边界(曲线)起点S开始,按顺时针方向观察每一线段走向,并用相应的指向符表示,结果就形成表示该边界(曲线)的数码序列,称为原链码。
2、归一化链码
       原链码具有平移不变性(平移时不改变指向符),但当改变起点S时,会得到不同的链码表示,即不具备唯一性。为此可引入归一化链码,其方法是:对于闭合边界,任选一起点S得到原链码,将链码看作由各方向数构成的n位自然数,将该码按一个方向循环,使其构成的n位自然数最小,此时就形成起点唯一的链码,称为归一化链码,也称为规格化链码。
给定一个从任意点开始得到的链码,把它看作一个由各方向数构成的自然数。将这些方向数依一个方向循环,以使它们所构成的自然数的值最小。我们将这样转换后所对应的链码起点作为这个边界的归—化链码的起点。

       在matlab中,利用bwperim来查找二值图像的边缘。

BW2 = bwperim(BW1)
BW2 = bwperim(BW1,conn)
BW2 = bwperim(BW1,conn)表示从输入图像BW1中返回只包括对象边缘像素点的图像。

BW = bwperim(I,8); % 检测目标的边缘跟踪,用于计算周长 
for i=1:x
   for j=1:y
     if (BW(i,j)>0)
       P2=j;
       if ((P2-P1)==1) % 判断是否为垂直方向连续的周长像素点
       Ny=Ny+1;
       end
     P1=P2;
     end
    end
end

%检测水平方向连读的周长像素点%
P1=0;
P2=0;
Nx=0; % 记录水平方向连续周长像素点的个数
for j=1:y
    for i=1:x
       if (BW(i,j)>0)
          P2=i;
         if ((P2-P1)==1) % 判断是否为水平方向连续的周长像素点
            Nx=Nx+1;
         end
         P1=P2;
       end
     end
end 

1.3圆度

      目前在生产实践中,圆度的测量仪器主要有圆度仪、三坐标测量机等,而圆度的评定和计算则是通过圆度仪、三坐标测量机等精密仪器自带的计算程序来完成。由于设计者对程序严格保密且这些程序大都价格不菲,因此,使用者希望开发更多、更方便的圆度评定方法。实际上,圆度评定和计算的过程就是一个按照圆度评定标准构造函数原型进行优化求解的过程。

1.4矩形度

       矩形度体现物体对其外接矩形的充满程度,反映一个物体与矩形相似程度的一个参数
是矩形拟合因子。 

其中,S0是该物体的面积,而SMER是其最小外接矩形的曲积。R反映了一个物体对其的充满程度。对于矩形物体R取得最大值1,对于圆形物体R取值为 ,对于纤细、弯曲的物体R取值变小。

1.5伸长度

伸长度,指材料因为外力的作用产生变形后延长了程度。

二、核心程序

I=imread('1.jpg');
I2=rgb2gray(I);

Threshold=graythresh(I2);
BW=im2bw(I2,Threshold);
imshow(BW);

[M1,N1]=size(BW);
i1=M1;change=0;
for i =1:M1
      if change==0&sum(BW(i,:))~=0
            change=1;
            if i<i1
                  i1=i;
            end
      elseif change==1&sum(BW(i,:))==0
            i2=i;change=0;
      end
end
j1=N1;change=0;
for j =1:N1
      if change==0&sum(BW(:,j))~=0
            change=1;
            if j<j1
                  j1=j;
            end
      elseif change==1&sum(BW(:,j))==0
            j2=j;change=0;
      end
end
BW1=BW(i1:i2,j1:j2);
[M,N]=size(BW1);
BW=imresize(BW1,[50 ceil(50*N/M)]);
figure,imshow(BW);

%标记面积最大的区域
L = bwlabel(BW);
stats = regionprops(L);
Ar = cat(1, stats.Area);
ind = find(Ar ==max(Ar));
BW2= ismember(L,ind);
function phi = ACSE(I)

%F is input binary image
% ~0 region denotes the target region 
%output:A:面积;C:周长;S:紧密度;E:离心度

[x,y]=size(I);
BW = bwperim(I,8); % 检测目标的边缘跟踪,用于计算周长 

%检测垂直方向连读的周长像素点%
P1=0;
P2=0;
Ny=0; % 记录垂直方向连续周长像素点的个数
for i=1:x
   for j=1:y
     if (BW(i,j)>0)
       P2=j;
       if ((P2-P1)==1) % 判断是否为垂直方向连续的周长像素点
       Ny=Ny+1;
       end
     P1=P2;
     end
    end
end

%检测水平方向连读的周长像素点%
P1=0;
P2=0;
Nx=0; % 记录水平方向连续周长像素点的个数
for j=1:y
    for i=1:x
       if (BW(i,j)>0)
          P2=i;
         if ((P2-P1)==1) % 判断是否为水平方向连续的周长像素点
            Nx=Nx+1;
         end
         P1=P2;
       end
     end
end 

SN=sum(sum(BW)); % 计算周长像素点的总数
Nd=SN-Nx-Ny; % 计算奇数码的链码数目

H=max(sum(I)); % 计算目标的高度 
W=max(sum(I')); % 图象I经矩阵转置后,计算宽度
C=sqrt(2)*Nd+Nx+Ny; % 计算周长

%====形态特征值计算===%
A=bwarea(I);% 计算目标的面积
 
S=A/C;

[M N]=size(I);
[x, y] = meshgrid(1:N, 1:M);
x = x(:);
y = y(:);
I=I(:);
m20 = sum(x.^2 .* I);
m02 = sum(y.^2 .* I);
m11 = sum(x .* y .* I);
e=(m20-m02)^2+4*m11;
E=e/A+1;
phi(1)=A;
phi(2)=C;
phi(3)=S;
phi(4)=E;

三、测试结果

matlab2022a测试结果如下

面积

ans =

        2401

周长

ans =

  191.1716

圆度

ans =

    1.2113

矩形度

ans =

     1

伸长度

ans =

     1

面积

ans =

   1.6199e+03

周长

ans =

   219

圆度

ans =

    2.3561

矩形度

ans =

    0.7199

伸长度

ans =

    0.9000

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/113281.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C#语言实例源码系列-实现文件分割和合并

专栏分享点击跳转>Unity3D特效百例点击跳转>案例项目实战源码点击跳转>游戏脚本-辅助自动化点击跳转>Android控件全解手册 &#x1f449;关于作者 众所周知&#xff0c;人生是一个漫长的流程&#xff0c;不断克服困难&#xff0c;不断反思前进的过程。在这个过程中…

腾讯云轻量应用服务器使用 WooCommerce 应用镜像搭建电商独立站

WooCommerce 是当前很受欢迎的电商独立站建站工具&#xff0c;具备开源、免费、使用简单且功能强大等特点&#xff0c;您可通过该镜像快速搭建基于 WordPress 的电商独立站。该镜像已预装 WordPress&#xff08;包含 WooCommerce 插件&#xff09;、Nginx、MariaDB、PHP 软件。…

数据结构之排序【直接选择排序和堆排序的实现及分析】内含动态演示图

文章目录引言&#xff1a;1.直接选择排序2.堆排序3.直接选择排序和堆排序的测试引言&#xff1a; 感觉今天更冷了&#xff0c;码字更加的不易&#xff0c;所以引言就简单的写一下啦&#xff01;今天我们就来了解一下什么是直接选择排序和堆排序。 1.直接选择排序 时间复杂度…

RabbitMQ 第一天 基础 4 RabbitMQ 的工作模式 4.1 Work queues 工作队列模式

RabbitMQ 【黑马程序员RabbitMQ全套教程&#xff0c;rabbitmq消息中间件到实战】 文章目录RabbitMQ第一天 基础4 RabbitMQ 的工作模式4.1 Work queues 工作队列模式4.1.1 模式说明4.1.2 代码编写4.1.3 小结第一天 基础 4 RabbitMQ 的工作模式 4.1 Work queues 工作队列模式 …

ELK第四讲之【docker安装Logstash8.4.3、集成springboot】

docker安装elasticsearch8.4.3 docker安装kibana8.4.3 一、docker安装logstash8.4.3 官方地址 https://github.com/elastic/logstash/releases 1、拉取镜像 docker pull elastic/logstash:8.4.3 2、启动容器 docker run -it -d --name logstash -p 9600:9600 -p 5044:…

十六、Docker Compose容器编排第一篇

1、概述 Compose 是一个用于定义和运行多容器 Docker 应用程序的工具。使用 Compose&#xff0c;您可以使用 YAML 文件来配置应用程序的服务。然后&#xff0c;使用一个命令&#xff0c;您可以从您的配置中创建并启动所有服务。 Compose 适用于所有环境&#xff1a;生产、暂存、…

node.js+uni计算机毕设项目高校自习室座位网上预约小程序(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…

获取淘宝价格区间l-r的商品a的详细信息(商品名等)

看了一眼&#xff0c;上次更新距今2个月&#xff0c;看起来我好咕咕啊&#xff08;感叹&#xff09;&#xff0c;可是感觉这两个月也没闲着捏&#xff08;比赛&#xff0c;cf&#xff0c;期末等等&#xff0c;幸亏期末考延期了&#xff0c;我这被期末作业都整死了快&#xff09…

SpringBoot+Vue项目艺术摄影预约系统设计与实现

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

Python pandas有几千个库函数,你用过几个?(2)

上一篇链接&#xff1a; Python pandas有几千个库函数&#xff0c;你用过几个&#xff1f;&#xff08;1&#xff09;_Hann Yang的博客-CSDN博客 I~Q&#xff1a; Function10~25 Types[Function][9:25] [infer_freq, interval_range, isna, isnull, json_normalize, lreshap…

微信HOOK 协议接口 实战开发篇 1.登录

使用HOOK也有不短的时间&#xff0c;写的各类接口杂乱无章 于是便有了将所有接口重构&#xff0c;整理一下的想法 顺手将整理的要点作为日志记录下来 预计每类接口写一篇日志&#xff0c;本次使用的是2022.12.24&#xff0c;当前微信最新版3.8.1.26版 言归正传&#xff0c;开始…

【秋招总结】双非本小菜鸡的坎坷秋招之路(附面经)

前言 因为大环境的影响&#xff0c;今年秋招hc骤缩&#xff0c;导致竞争的激烈程度比往年高了不少。 在秋招的时候&#xff0c;经历过简历石沉大海的无奈&#xff0c;也体验过人家收割offer而自己却依旧0offer的焦虑&#xff0c;不过好在最终也拿到了还算满意的结果。 如今我…

python爬虫把数据保存到csv、mysql中

啧&#xff0c;放假几天游戏玩腻了&#xff0c;啥都不想干&#xff0c;突然想起来python这玩意&#xff0c;无聊就来玩玩 目录 先是保存csv里面 然后保存到mysql里 目标&#xff1a;起点 主要是拿到这几个数据 分析下网页 一个li对应一本小说&#xff0c;打开li看里面的东西 …

Android ViewPager2 实现阅读器横向翻页效果(三)--- 实时动态分页及章节切换效果的原理及实现

文章目录Android ViewPager2 实现阅读器横向翻页效果&#xff08;三&#xff09;--- 实时动态分页及章节切换效果的原理及实现关键概念引入初始数据准备ViewPager Adapter 动态分页 及 第一次分页分页后更新窗口 及 首页尾页的特殊处理翻页状态监听 及 动态章节切换Android Vie…

BIT.4 Linux进程控制

目录进程创建fork函数初识写实拷贝fork常规用法fork调用失败的原因补充知识进程终止进程退出场景进程常见退出方法exit函数与_exit函数return 退出补充知识进程等待进程等待必要性进程等待的方法wait方法waitpid方法wait / waitpid 阻塞代码WIFEXITEDwait / waitpid 非阻塞代码…

LeetCode刷题复盘笔记—一文搞懂动态规划之718. 最长重复子数组问题(动态规划系列第三十一篇)

今日主要总结一下动态规划的一道题目&#xff0c;718. 最长重复子数组 题目&#xff1a;718. 最长重复子数组 Leetcode题目地址 题目描述&#xff1a; 给两个整数数组 nums1 和 nums2 &#xff0c;返回 两个数组中 公共的 、长度最长的子数组的长度 。 示例 1&#xff1a; …

华熙LIVE·五棵松商业北区明年国庆亮相 互动体验升级

京城着名的活力聚集地——华熙LIVE五棵松明年将增添两万多平米商业区&#xff0c;新增商业区位于现有商业区北侧并与之相连通&#xff0c;业态在承袭现有沉浸式互动体验业态基础上&#xff0c;将引进元宇宙等前沿科技和跳楼机等娱乐设施&#xff0c;使互动体验进一步升级。项目…

一文搞懂Linux内核中断机制原理与实现

为什么需要中断&#xff1f; 如果让内核定期对设备进行轮询&#xff0c;以便处理设备&#xff0c;那会做很多无用功&#xff0c;因为外设的处理速度一般慢于CPU&#xff0c;而CPU不能一直等待外部事件。所以能让设备在需要内核时主动通知内核&#xff0c;会是一个聪明的方式&a…

JWT渗透与攻防(一)

目录 前言 JWT漏洞介绍 案列演示之Leaky_JWT JWT漏洞具体的实现方式&#xff1a; 案列演示之JWT None Algorithm JWT漏洞工具的利用 JWT利用工具介绍 jwt_tool 漏洞利用 jwt-cracker c-jwt-cracker 前言 Json web token (JWT)相关漏洞对于渗透测试人员而言可能是一种…

node.js+uni计算机毕设项目店内点餐微信小程序LW(程序+小程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置&#xff1a; Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术&#xff1a; Express框架 Node.js Vue 等等组成&#xff0c;B/S模式 Vscode管理前后端分离等…