基本形態學演算法

2021-09-06 23:02:52 字數 2359 閱讀 1890

基本形態學演算法

為什麼要做基本形態學演算法的研究和實現?是因為形態學是乙個非常有力,應用 廣泛的工具,但同時也是研究不是很清楚的工具。往往乙個恰到好處的變換,就能夠省下許多的勞動。對此的分類和研究就顯得非常有必要,而相關**的積累,也很有價值。

零、基本概念:

膨脹:白->黑;    dilate

腐蝕:黑->白;  erode

開    : 腐蝕->膨脹 平滑物體輪廓,斷開較窄的地方,清除細突;

閉   :膨脹->腐蝕 彌合較窄的間斷,填補細長的溝壑;

頂帽 :src-(開運算(src))

底帽 :閉運算(src)-src

一、邊界提取

先腐蝕,然後相減。

作為生成演算法可能價值不是很大,但是在生成鏤空字元的時候,價值就會比較大。

//-------------------生成驗證碼--------------//

void

creatcode()

//-------------------邊界提取----------------//

void

getedge(mat src)

二、孔洞填充(注意,floodfill是沒有教程的)

乙個孔洞可以被定義為由前景畫素相連線的邊界所包圍的乙個背景區域。關鍵是標註出區域中的點來。

原文的翻譯實在無法理解。我這裡做出自己收集到的實現。

opencv中提供了floodfill的例子,應該說功能強大

對於本例,問題在於如何自動化這個過程?

我實現了乙個效果,主要是通過反過來找中間的黑點,然後相加。這裡屬於反過來使用floodfill,效果還是不錯的.

nice!體現形態學的強大能力。如果你用輪廓來找的話,會很麻煩,而且不穩定。但是用形態學,確非常穩定,只有在很特殊的情況下,才可能出現失敗的青年高考。

三、聯通分量提取

從二值影象中提取聯通分量是許多自**形啊分析應用的核心。除了在對應a中每個連通分量中的乙個點的已指的每乙個位置我們置為1,其他為0

對於8連通,目前採用的演算法是find contours。雖然有一些文件中也提出了一些演算法,但是根據我目前的知識結構,還是直接contour的方法最好。

四、【關於細化和骨廓,屆時看不懂】

五、頂帽變換和底帽變換

頂帽變換的乙個作用是去除光照不均勻

用於連鑄的效果非常明顯,我相信這樣可以把**質量進一步提高

去除背景還是要這樣來做

從這點可以看出,它的確是效果要更好一點的。

小結:形態學變換應該說是很強的,因為它更接近於原始的情況,是不同於輪廓分析的基礎工具。在我之前的過程中確實缺乏這方面的使用,這方面的書還要多讀多用。

p.s.

在opencv中,提供了一攬子的解決方法

int main()

分為兩個部分,首先生成乙個element,然後根據引數的不同,進行形態學變換

/* morphological operations */

enum

;

來自為知筆記(wiz)

Matlab 形態學常用演算法

膨脹 是將a與核b卷積,求區域性最大值,可以使得影象中的亮區域逐漸增長 腐蝕 是膨脹的反操作,一般來說膨脹會擴張區域和腐蝕縮小區域 膨脹可以填補細小的坑洞而腐蝕可以消除細的突起,maltab中使用imdalite a,b 表示使用核b膨脹a區域,核b可以通過strel函式獲得,如strel disk...

形態學重建

在形態學梯度影象的基礎上,利用形態學的開閉重建運算對梯度影象進行重建,在保留重要區域倫敦的同時去除細節和雜訊。分水嶺變換存在過分割現象,原因在於檢測的區域性極值過多,造成極值過多的原因在於影象中的非規則灰度擾動和雜訊。對於好的分水嶺影象分割方法,不僅能消除過分割現象,而且應保證分割後的區域倫敦邊緣具...

形態學濾波

include pch.h include include include include using namespace std using namespace cv 形態學 mat g srcimage,g dstimage int g nelementshape morph rect int ...