IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 人工智能 -> 基于形态学处理的不规则形状图像的几何参数统计,包括输出面积,周长,圆度,矩形度,伸长度 -> 正文阅读

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

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
  人工智能 最新文章
2022吴恩达机器学习课程——第二课(神经网
第十五章 规则学习
FixMatch: Simplifying Semi-Supervised Le
数据挖掘Java——Kmeans算法的实现
大脑皮层的分割方法
【翻译】GPT-3是如何工作的
论文笔记:TEACHTEXT: CrossModal Generaliz
python从零学(六)
详解Python 3.x 导入(import)
【答读者问27】backtrader不支持最新版本的
上一篇文章      下一篇文章      查看所有文章
加:2022-12-25 11:10:19  更:2022-12-25 11:10:49 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 20:38:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码