❶ NI Vision:二值圖像連通域標記演算法
前面說到,要使用Labwindows + NI Vision(IMAQ Vision)這套商用開發框架來做數圖課設。很明顯,這套虛擬儀器開發平台由NI Instrument(美國國家儀器公司)開發的。大名鼎鼎的Labview軟體就是這個公司開發的。相比較而言,Labwindows使用ANSI C開發,但應用場景是差不多的。
在做課程作業的時候,遇到了一個很有趣的應用。輸入是米粒,比背景灰度要低,目的是輸出米粒的顆數、面積、周長和孔數,這是工業上的一個很常見的應用。具體處理過程是二值化後使用低通濾波,並計算各種性質。
界面設計如下,可以看到米粒的詳細情況。
讓我感興趣的,是通過怎樣的演算法能夠得到米粒的數量?之前曾經用過OpenCV中找最大外界矩形這個函數,但沒有具體了解演算法實現。直覺告訴我原理應該是相似的。
可以看到,每一個米粒之間都是不連通的。這里就就提出了一個概念。 連通區域(Connected Component) 是指圖像中相鄰並有相同像素值的圖像區域。 連通區域分析(Connected Component Analysis,Connected Component Labeling) 是指將圖像中的各個連通區域找出並標記。
二值圖像分析最重要的方法就是連通區域標記,它是所有二值圖像分析的基礎,它通過對二值圖像中白色像素(目標)的標記,讓每個單獨的連通區域形成一個被標識的塊,進一步的我們就可以獲取這些塊的輪廓、外接矩形、質心、不變矩等幾何參數。如果要得到米粒的數量,那麼通過連通區域分析(這里是二值圖像的連通區域分析),就可以得到標記的數量,從而得到米粒的數量。
下面這幅圖中,如果考慮4鄰接,則有3個連通區域,8鄰接則是2個。
從連通區域的定義可以知道,一個連通區域是由具有相同像素值的相鄰像素組成像素集合,因此,我們就可以通過這兩個條件在圖像中尋找連通區域,對於找到的每個連通區域,我們賦予其一個唯一的 標識(Label) ,以區別其他連通區域。
連通區域分析的基本演算法有兩種:1)Two-Pass兩便掃描法 2)Seed-Filling種子填充法 。
兩遍掃描法(Two-Pass),正如其名,指的就是通過掃描兩遍圖像,就可以將圖像中存在的所有連通區域找出並標記。
說了一堆數學語言,其實用圖很好理解
種子填充方法來源於計算機圖形學,常用於對某個圖形進行填充。它基於區域生長演算法。至於區域生長演算法是什麼,可以參照我的這篇 文章 。
同樣的,上動圖
NI Vision 中的運算元定義如下
OpenCV中也有相應的運算元
這里參照其他博客實現一下Two-Pass演算法,Seed-Filling演算法就偷懶不搞了。
Reference:
OpenCV實現圖像連通組件標記與分析
OpenCV-二值圖像連通域分析
數字圖像處理技術 ——鄧繼忠(我的任課老師)
❷ 對圖像中連通域進行標記並計算面積matlab
matlab里有連通域標記的函數bwlabel。
至於求連通域面積,stats=regionprops(ibw,'Area');%ibw是標記號的圖。
求中值也有這函數的,median(A)。
❸ 求救Matlab的二值圖像標簽,求面積,求周長演算法
二值圖像標簽演算法,就是把連通的黑色像素歸為同一個標簽,不同的黑色區域賦予不同標簽的演算法.
求周長即是求一個區域的邊界點的個數,求面積既是求一個區域的所有點個數
❹ matlab對二值圖像標記,求連通區域的周長,面積。matlab具體代碼
二值圖像中背景標記為0,聯通域標記為1,二值圖像記為a
面積的求法:
k=regionprops(a,'Area'); %k得到的是一個structure結構
S=k.Area;
周長求法:
L=length(find(bwperim(a,4)==1));
%bwperim是求圖像聯通域邊界區,對標記邊界的1進行計數。
ps:可以好好看下regionprops的用法,形態學方面的有一些很有用的處理。
❺ 將一張圖二值化後,有很多連通區域,我想分別求出每一塊連通區域的面積,不知道有什麼好一點的演算法
圖像處理里有一種叫做Labeling處理的演算法。
可以把二值圖劃分區域,標出不同的區域編號。
只要計算每種編號的個數,就是對應區域的面積了。
如果沒看懂,不是演算法難,是我表達的不好。哈。
❻ java代碼怎麼實現計算圖像二值連通區域的質心
一:幾何距(Geometric
Moments)知識與質心尋找原理
1.
Image
Moments是圖像處理中非常有用的演算法,可以用來計算區域圖像的質心,方向等幾何特性,同時Mpq的高階具有旋轉不變性,可以用來實現圖像比較分類,正是因為Moments有這些特性,很多手繪油畫效果也會基於該演算法來模擬實現。它的數學表達為:
它的低階M00,M01,
M10可以用來計算質心,中心化以後M11,M02,M20可以用來計算區域的方向/角度
2.
什麼是質心
就是通過該點,區域達到一種質量上的平衡狀態,可能物理學上講的比較多,簡單點的說就是規則幾何物體的中心,不規則的可以通過掛繩子的方法來尋找。
二:演算法流程
1.
輸入圖像轉換為二值圖像
2.
通過連通組件標記演算法找到所有的連通區域,並分別標記
3.
對每個連通區域運用計算幾何距演算法得到質心
4.
用不同顏色繪制連通區域與質心,輸出處理後圖像
三:演算法效果
左邊為原圖,
右邊藍色為連通組件標記演算法處理以後結果,白色點為質心
四:關鍵代碼解析
1.
計算幾何距演算法代碼
doublem00
=
moments(pixels,
width,
height,
0,
0);
doublexCr
=
moments(pixels,
width,
height,
1,
0)
/
m00;//
row
doubleyCr
=
moments(pixels,
width,
height,
0,
1)
/
m00;//
column
return
new
double[]{xCr,
yCr};