EDA365电子论坛网

标题: 这是一篇关于集Matlab的形状识别与计算图形周长、面积、圆周率的文章 [打印本页]

作者: haidaowang    时间: 2020-1-15 09:32
标题: 这是一篇关于集Matlab的形状识别与计算图形周长、面积、圆周率的文章

7 I/ U7 T. e, ~% R1.二值化图像
+ v3 D3 j9 w8 \8 V) Q​ 用于处理的图像,一般都是为二值图像。这里也不例外,因为要调用那些图像处理函数,传入的图像都是二值化后的图像。1 L- t0 j( f8 d" r! }, d' z( _

8 e7 g% ~; N) M& e) x# d' j二值化操作代码:
& {7 X* F- M7 ?& p# r) Y
; b/ N% p2 y5 Y3 a4 w
5 R! R/ u# g& p, H+ [2 ~+ [运行结果:
9 T4 a* ^" b( K) e" i2 Q& |' Y' L" w  e
2 v) L  Q0 @, Y! w0 t7 T  _" ^( \* S . E* _, D( N9 T0 ]$ }% p7 {6 F

1 u% y7 t* W( i, }3 l  D. x, h
; O0 b( q& d& O: N! b# H7 }2.统计标注连通域
% K7 S& j( w  Y0 e- ?
4 l. _7 \: k: z; Q. O参考网址:: q! I/ x# k3 E" J0 g8 E! _2 a9 R
/ K7 P  R* c2 e" ?' A9 `- x( d, u
Matlab中bwlabel函数的使用9 S: r- R& Z3 B% k
9 f3 Q% z6 I' M% F* T2 Z
matlab的Regionprops详解
" c5 i" X% k' e7 Y5 v! E* n. C& h; U

1 `+ k: d5 T' W% T$ Hbwlabel函数
7 B8 K2 F# O* }# j9 J' E. {
: r5 g. l6 J" A. e6 Y" y1 ^& d/ I* ^2 X3 W
L = bwlabel(BW,n)
, x2 G# M* D6 a0 M5 L2 O  t) z: [8 E返回一个和BW大小相同的L矩阵,包含了标记了BW中每个连通区域的类别标签,这些标签的值为1、2、num(连通区域的个数)。n的值为4或8,表示是按4连通寻找区域,还是8连通寻找,默认为8。
6 _" a* ~; m5 C% [: ]( d% U4连通或8连通是图像处理里的基本感念:而8连通,是说一个像素,如果和其他像素在上、下、左、右、左上角、左下角、右上角或右下角连接着,则认为他们是联通的;4连通是指,如果像素的位置在其他像素相邻的上、下、左或右,则认为他们是连接着的,连通的,在左上角、左下角、右上角或右下角连接,则不认为他们连通。请注意“或”字的含义,就是满足其中一个条件就认为是连通的。* i# X3 ~1 K/ x
[L,num] = bwlabel(BW,n)这里num返回的就是BW中连通区域的个数。
, q: Z9 i1 J+ N4 l2 x通俗的说,这个函数的作用是用来找这个二值图像中的连通区域的,对于不同的符合条件的连通区域(4连通,8连通)分别用不同的标号加以区别,结果保存在L这个矩阵里,而num里保存的是输入图像中连通区域的总数。4 V1 y0 a" |2 x; }% g. S4 b
, f/ s9 t7 J: z. h& I

( M  s: x" S* p# a; M) iRegionprops函数
$ e, \: r( p9 _
4 ?$ Z6 K- ?5 P% g# |% H) }+ K" o- n. j# d( ?/ Y
Regionprops:用途是get the properties of region,即用来度量图像区域属性的函数。, A( c5 n7 d  V+ E* V
2 [! n" t3 d& P
语法:STATS = regionprops(image,properties)2 E( N; ]4 G. u6 c9 v5 w9 k
6 b5 l. s' f* n/ |
image是为传入的是bwlabel函数传出的,经过标记后的图像数据。7 c! N0 }+ g2 ], `3 `2 m  R

5 {" O" n, K; @! q1 ]4 Dproperties:这个则是你需要传入的参数。
$ }, O- K8 p) \: c; c* f6 d, F
$ [' G, C% H1 k3 c3 `' G. F比如我们需要求面积,则传入Area参数。
! }1 ~" ?% N$ s) Y, Z, }6 \. R6 h; r0 }) E  M7 Y3 N; ?2 R
求周长,则传入Perimeter参数。" T: Q( ~, N+ k, r
1 w4 `" g6 |# Z, T0 A& w
求离心率,则传入Eccentricity参数。  i6 ^0 G6 e  H# o
& |0 R. U+ D0 o8 T0 L$ Y- O  _) A* c$ G
regionprops 函数具体有哪些参数可以参考Matlab官方文档。
( ?5 M" A& N0 u- g$ _9 @
- M1 D+ O) V6 G9 v% ?  N在Matlab右上角查询regionprops函数,点开,则会有最官方的使用方法和参数含义。0 S, a+ Z6 L5 `, Z6 I$ T) L3 R

& ^+ N3 b9 ?* t; M
8 s$ U$ f$ T& ]: k9 R9 Z+ _; X% I9 s! C+ `% q+ R5 O
这个函数非常强大,不止这个教程中的三个功能。! W& E: P0 ?1 D

. J( x/ r7 X4 @2 `$ \7 W
. z9 |9 q4 y6 |$ T1 l- \' ^0 R7 a- L

" @& y/ Y- I" F! v( E统计连通域代码:9 o# o7 m& _) w9 I0 M
  _4 ~# ?! L! v% G2 n: w& d
  2 h( V3 |0 ]7 d  _8 I4 A) M

! b5 j1 E5 ^2 V( O1 D1 O/ r标记图像各个图形,进行图形编号代码
6 F$ d/ r; o* g8 r' j, E" g% [' N4 ^) q+ Z$ ?

( P! o& u: l7 l, Y- H运行结果图像:& ~6 ^& t4 V* m0 F- [

4 X6 X5 r/ q& b6 ] - b0 T. @/ H3 D9 M

' z2 H" h. d; q& ?- ]" X0 j7 e* @: C9 [. j- u; d
3.计算周长,面积与离心率
0 j  ?( I, @7 x" S5 R$ R" a% ~  v7 ?* B8 j* l6 M4 V& i

& y& [# x% M4 p  ~1 I接上一次的题目:计算出图像左上角绿色方块的面积和周长,计算出右下角红色椭圆的离心率$ }: G; f5 Z9 M$ e/ T1 T- G" _6 M

0 ^$ h% s; a0 R+ ~6 k: p​ 要计算出左上角和右下角图像的值,首先,你要先识别出那个图形,你才能对其进行计算。这里就需要使用到前面bwlabel函数标记的矩阵。  z% D' ]( @2 J8 [7 X. B
+ W8 x/ L' G0 g

5 s7 z4 T1 `0 H/ `( o% ?
0 R' o& g! A' T: R代码即:1 f, g, _/ j; F4 h4 ^
9 V9 `8 U4 m3 B

0 R- b, v& F- e+ g$ u
( ?& A) }  c" j5 p) }, v% g根据标记的数值,来判断是不是那个区域,然后将那个标记的区域取出,并显示出来。: i( i5 @9 z" [4 J" h

$ y! m' M+ j/ \4 {效果图:注意,使用regionprops函数计算周长和面积,计算的是白色区域的周长和面积。黑白颜色颠倒,那个计算出来的数值则不正确。
8 E! y, L' h5 ^2 C3 ?/ j7 _+ p2 b
- F: Y/ K- r/ k% G$ q) k: D
6 W7 z) \% a- g8 ~/ k+ {: E
6 O( r$ c, Y+ N  I+ Y( y1 F; V
计算代码:
0 ~; v1 r* l9 G8 N. J8 i/ L8 \6 e' A9 K  }/ A
    9 @& o( K8 Y+ f4 {- ~$ R

/ C, J* S3 @8 |" P4 s. _# o) C计算结果将在matlab的命令行窗口打印出来:; m+ j% t& y* h7 R8 a" o7 |
2 Y$ g9 ]$ C! f
round_area = 7044.000000   —— 周长
7 T' A* t; a3 v7 @, us.Perimeter = 320.200000     ——面积
7 F' J! e0 S; q# v! X5 `& voval.Eccentricity = 0.915874  ——离心率% j  Q/ M9 p2 i& a3 H8 T- Y

2 }" }  e7 G* l' a  i" K- n6 k
& z- t& M8 \3 S/ f5 h  i9 Q$ [! Y6 n9 l. s  E7 M

5 g2 M7 Q$ Y! Z& ~! D
作者: xixihahaheihei    时间: 2020-1-15 17:56
集Matlab的形状识别与计算图形周长、面积、圆周率




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2