Re: [運算] 自動圈起及分類處理
----------------------------------------------
[[[ 下列程式碼並未測試,可能有錯,純供參考 ]]]
----------------------------------------------
你用 bwperim 來圈出樹有可能會
(1). 重疊的
(2). 正常的
(3). 特小的
┌─┐ ┌─┐┌┐
│ └┐│ │└┘
└┐ │└─┘
└─┘
直接用 bwperim 的結果來標記當然分不出來啊
BWoutline = bwperim(bw)
= [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 0 0 1 1 1 0 1 1 0
0 1 0 1 1 1 0 1 0 1 0 1 1 0
0 1 1 1 0 1 0 1 1 1 0 0 0 0
0 0 0 1 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
先用 imfill & bwlabel 來分出各個物件
labeled = imfill(bwperim(bw))
= [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 0 0 2 2 2 0 3 3 0
0 1 1 1 1 1 0 2 2 2 0 3 3 0
0 1 1 1 1 1 0 2 2 2 0 0 0 0
0 0 0 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0]
得到各個物件的大小
objSize = arrayfun(@x sum(sum(labeled == x)), 1:numObjects);
= [16, 9, 4]
^ ^
| |
太大 太小
可以用分群,或是自己指定判斷閥值
isNormal = objSize < 10 & objSize > 8
= [0, 1, 0]
再去圈
obj = 1:numObjects;
isNormal = ismember(labeled, obj(isNormal))
= [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 1 0 0 0 0
0 0 0 0 0 0 0 1 1 1 0 0 0 0
0 0 0 0 0 0 0 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0]
bwNormal = BWoutline & isNormal
= [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 1 1 1 0 0 0 0
0 0 0 0 0 0 0 1 0 1 0 0 0 0
0 0 0 0 0 0 0 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0]
bwStrange = BWoutline & ~isNormal
= [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 1 1 1 0 0 0 0 0 0 0 1 1 0
0 1 0 1 1 1 0 0 0 0 0 1 1 0
0 1 1 1 0 1 0 0 0 0 0 0 0 0
0 0 0 1 1 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 ]
※ 引述《gragus9tone (大肚子)》之銘言:
: 给予一张高空拍摄的植物图 https://i.imgur.com/Egye1ga.jpg
: 需要把每棵树都圈起来但是要用颜色区分
: 比如在照片中不完整的树用的颜色和完整的树的颜色是要不一样的 https://i.imgur.com/lYbDwU0.jpg
: 我完全卡死在区分这里
: 我的会乱圈一通 没有颜色区分
: 我的code在这里 goo.gl/d67Xx9
: 各路大神请指导一下我该怎么做才能做到我说的那样
: 先谢谢你们了
: -----
: Sent from JPTT on my iPhone
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 106.104.134.118
※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1535776194.A.6B2.html
討論串 (同標題文章)
完整討論串 (本文為第 2 之 2 篇):
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章