日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

图像处理基本算法-形态学

發(fā)布時(shí)間:2025/3/15 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 图像处理基本算法-形态学 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
形態(tài)學(xué)一般是使用二值圖像,進(jìn)行邊界提取,骨架提取,孔洞填充,角點(diǎn)提取,圖像重建。

基本的算法:膨脹腐蝕,開操作,閉操作,擊中擊不中變換

幾種算法進(jìn)行組合,就可以實(shí)現(xiàn)一些非常復(fù)雜的功能,而且邏輯嚴(yán)密。

這里給出形態(tài)學(xué)的一般原理,以及用形態(tài)學(xué)進(jìn)行邊界提取,角點(diǎn)提取好骨架提取的原代碼

一??? 引言
??????? 數(shù)學(xué)形態(tài)學(xué)是一門建立在集論基礎(chǔ)上的學(xué)科,是幾何形態(tài)學(xué)分析和描述的有力工具。數(shù)學(xué)形態(tài)學(xué)的歷史可回溯到19世紀(jì)。1964年法國的Matheron和Serra在積分幾何的研究成果上,將數(shù)學(xué)形態(tài)學(xué)引入圖像處理領(lǐng)域,并研制了基于數(shù)學(xué)形態(tài)學(xué)的圖像處理系統(tǒng)。1982年出版的專著《Image Analysis and Mathematical Morphology》是數(shù)學(xué)形態(tài)學(xué)發(fā)展的重要里程碑,表明數(shù)學(xué)形態(tài)學(xué)在理論上趨于完備及應(yīng)用上不斷深入。數(shù)學(xué)形態(tài)學(xué)蓬勃發(fā)展,由于其并行快速,易于硬件實(shí)現(xiàn),已引起了人們的廣泛關(guān)注。目前,數(shù)學(xué)形態(tài)學(xué)已在計(jì)算機(jī)視覺、信號(hào)處理與圖像分析、模式識(shí)別、計(jì)算方法與數(shù)據(jù)處理等方面得到了極為廣泛的應(yīng)用。
??????? 數(shù)學(xué)形態(tài)學(xué)可以用來解決抑制噪聲、特征提取、邊緣檢測、圖像分割、形狀識(shí)別、紋理分析、圖像恢復(fù)與重建、圖像壓縮等圖像處理問題。該文將主要對(duì)數(shù)學(xué)形態(tài)學(xué)的基本理論及其在圖像處理中的應(yīng)用進(jìn)行綜述。

二??? 數(shù)學(xué)形態(tài)學(xué)的定義和分類
??????? 數(shù)學(xué)形態(tài)學(xué)是以形態(tài)結(jié)構(gòu)元素為基礎(chǔ)對(duì)圖像進(jìn)行分析的數(shù)學(xué)工具。它的基本思想是用具有一定形態(tài)的結(jié)構(gòu)元素去度量和提取圖像中的對(duì)應(yīng)形狀以達(dá)到對(duì)圖像分析和識(shí)別的目的。數(shù)學(xué)形態(tài)學(xué)的應(yīng)用可以簡化圖像數(shù)據(jù),保持它們基本的形狀特征,并除去不相干的結(jié)構(gòu)。數(shù)學(xué)形態(tài)學(xué)的基本運(yùn)算有4個(gè):膨脹、腐蝕、開啟和閉合。它們?cè)诙祱D像中和灰度圖像中各有特點(diǎn)。基于這些基本運(yùn)算還可以推導(dǎo)和組合成各種數(shù)學(xué)形態(tài)學(xué)實(shí)用算法。

(1)二值形態(tài)學(xué)
??????? 數(shù)學(xué)形態(tài)學(xué)中二值圖像的形態(tài)變換是一種針對(duì)集合的處理過程。其形態(tài)算子的實(shí)質(zhì)是表達(dá)物體或形狀的集合與結(jié)構(gòu)元素間的相互作用,結(jié)構(gòu)元素的形狀就決定了這種運(yùn)算所提取的信號(hào)的形狀信息。形態(tài)學(xué)圖像處理是在圖像中移動(dòng)一個(gè)結(jié)構(gòu)元素,然后將結(jié)構(gòu)元素與下面的二值圖像進(jìn)行交、并等集合運(yùn)算。
??????? 基本的形態(tài)運(yùn)算是腐蝕和膨脹。
??????? 在形態(tài)學(xué)中,結(jié)構(gòu)元素是最重要最基本的概念。結(jié)構(gòu)元素在形態(tài)變換中的作用相當(dāng)于信號(hào)處理中的“濾波窗口”。用B(x)代表結(jié)構(gòu)元素,對(duì)工作空間E中的每一點(diǎn)x,腐蝕和膨脹的定義為:
???????
??????? 用B(x)對(duì)E進(jìn)行腐蝕的結(jié)果就是把結(jié)構(gòu)元素B平移后使B包含于E的所有點(diǎn)構(gòu)成的集合。用B(x)對(duì)E進(jìn)行膨脹的結(jié)果就是把結(jié)構(gòu)元素B平移后使B與E的交集非空的點(diǎn)構(gòu)成的集合。先腐蝕后膨脹的過程稱為開運(yùn)算。它具有消除細(xì)小物體,在纖細(xì)處分離物體和平滑較大物體邊界的作用。先膨脹后腐蝕的過程稱為閉運(yùn)算。它具有填充物體內(nèi)細(xì)小空洞,連接鄰近物體和平滑邊界的作用。
??????? 可見,二值形態(tài)膨脹與腐蝕可轉(zhuǎn)化為集合的邏輯運(yùn)算,算法簡單,適于并行處理,且易于硬件實(shí)現(xiàn),適于對(duì)二值圖像進(jìn)行圖像分割、細(xì)化、抽取骨架、邊緣提取、形狀分析。但是,在不同的應(yīng)用場合,結(jié)構(gòu)元素的選擇及其相應(yīng)的處理算法是不一樣的,對(duì)不同的目標(biāo)圖像需設(shè)計(jì)不同的結(jié)構(gòu)元素和不同的處理算法。結(jié)構(gòu)元素的大小、形狀選擇合適與否,將直接影響圖像的形態(tài)運(yùn)算結(jié)果。因此,很多學(xué)者結(jié)合自己的應(yīng)用實(shí)際,提出了一系列的改進(jìn)算法。如梁勇提出的用多方位形態(tài)學(xué)結(jié)構(gòu)元素進(jìn)行邊緣檢測算法既具有較好的邊緣定位能力,又具有很好的噪聲平滑能力。許超提出的以最短線段結(jié)構(gòu)元素構(gòu)造準(zhǔn)圓結(jié)構(gòu)元素或序列結(jié)構(gòu)元素生成準(zhǔn)圓結(jié)構(gòu)元素相結(jié)合的設(shè)計(jì)方法,用于骨架的提取,可大大減少形態(tài)運(yùn)算的計(jì)算量,并可同時(shí)滿足尺度、平移及旋轉(zhuǎn)相容性,適于對(duì)形狀進(jìn)行分析和描述。

(2)灰度數(shù)學(xué)形態(tài)學(xué)
??????? 二值數(shù)學(xué)形態(tài)學(xué)可方便地推廣到灰度圖像空間。只是灰度數(shù)學(xué)形態(tài)學(xué)的運(yùn)算對(duì)象不是集合,而是圖像函數(shù)。以下設(shè)f(x,y)是輸入圖像,b(x,y)是結(jié)構(gòu)元素。用結(jié)構(gòu)元素b對(duì)輸入圖像y進(jìn)行膨脹和腐蝕運(yùn)算分別定義為:

對(duì)灰度圖像的膨脹(或腐蝕)操作有兩類效果:
(1)如果結(jié)構(gòu)元素的值都為正的,則輸出圖像會(huì)比輸入圖像亮(或暗);
(2)根據(jù)輸入圖像中暗(或亮)細(xì)節(jié)的灰度值以及它們的形狀相對(duì)于結(jié)構(gòu)元素的關(guān)系,它們?cè)谶\(yùn)算中或被消減或被除掉。灰度數(shù)學(xué)形態(tài)學(xué)中開啟和閉合運(yùn)算的定義與在二值數(shù)學(xué)形態(tài)學(xué)中的定義一致。用b對(duì)f進(jìn)行開啟和閉合運(yùn)算的定義為:

(3)模糊數(shù)學(xué)形態(tài)學(xué)
??????? 將模糊集合理論用于數(shù)學(xué)形態(tài)學(xué)就形成了模糊形態(tài)學(xué)。模糊算子的定義不同,相應(yīng)的模糊形態(tài)運(yùn)算的定義也不相同。在此,選用Shinba的定義方法。模糊性由結(jié)構(gòu)元素對(duì)原圖像的適應(yīng)程度來確定。用有界支撐的模糊結(jié)構(gòu)元素對(duì)模糊圖像的腐蝕和膨脹運(yùn)算按它們的隸屬函數(shù)定義為:

?

其中,x,y∈Z2代表空間坐標(biāo),ua,ub分別代表圖像和結(jié)構(gòu)元素的隸屬函數(shù)。從(7),(8)式的結(jié)果可知,經(jīng)模糊形態(tài)腐蝕膨脹運(yùn)算后的隸屬函數(shù)均落在[0,1]的區(qū)間內(nèi)。模糊形態(tài)學(xué)是傳統(tǒng)數(shù)學(xué)形態(tài)學(xué)從二值邏輯向模糊邏輯的推廣,與傳統(tǒng)數(shù)學(xué)形態(tài)學(xué)有相似的計(jì)算結(jié)果和相似的代數(shù)特性。模糊形態(tài)學(xué)重點(diǎn)研究n維空間目標(biāo)物體的形狀特征和形態(tài)變換,主要應(yīng)用于圖像處理領(lǐng)域,如模糊增強(qiáng)、模糊邊緣檢測、模糊分割等。

?

三?數(shù)學(xué)形態(tài)學(xué)在圖像處理中的主要應(yīng)用

近年來,數(shù)學(xué)形態(tài)學(xué)在圖像處理方面得到了日益廣泛的應(yīng)用。下面主要就數(shù)學(xué)形態(tài)學(xué)在邊緣檢測、圖像分割、圖像細(xì)化以及噪聲濾除等方面的應(yīng)用做簡要介紹。

(1)???????邊緣檢測

邊緣檢測是大多數(shù)圖像處理必不可少的一步,提供了物體形狀的重要信息。對(duì)于二值圖像,邊緣檢測是求一個(gè)集合A的邊界,記為B(A):

?

對(duì)于灰度圖像,邊緣檢測是求一幅圖像的形態(tài)學(xué)梯度,記為g:

數(shù)學(xué)形態(tài)學(xué)運(yùn)算用于邊緣檢測,存在著結(jié)構(gòu)元素單一的問題。它對(duì)與結(jié)構(gòu)元素同方向的邊緣敏感,而與其不同方向的邊緣(或噪聲)會(huì)被平滑掉,即邊緣的方向可以由結(jié)構(gòu)元素的形狀確定。但如果采用對(duì)稱的結(jié)構(gòu)元素,又會(huì)減弱對(duì)圖像邊緣的方向敏感性。所以在邊緣檢測中,可以考慮用多方位的形態(tài)結(jié)構(gòu)元素,運(yùn)用不同的結(jié)構(gòu)元素的邏輯組合檢測出不同方向的邊緣。

梁勇等人構(gòu)造了8個(gè)方向的多方位形態(tài)學(xué)結(jié)構(gòu)元素,應(yīng)用基本形態(tài)運(yùn)算,得到8個(gè)方向的邊緣檢測結(jié)果,再把這些結(jié)果進(jìn)行歸一化運(yùn)算、加權(quán)求和,得到最終的圖像邊緣。該算法在保持圖像細(xì)節(jié)特征和平滑邊緣等方面,取得了較好的效果。

邊緣檢測源代碼:

/******************************************************************** 形態(tài)學(xué)基本操作采用二值圖像 ***********************************************************************/ #include<cv.h> #include <highgui.h> int main(){IplImage * image,*image2,*image3;image = cvLoadImage("E:\\image\\mapleleaf.tif", 0);cvNamedWindow("image",1);cvShowImage("image",image);/*邊界提取*/image2 = cvCreateImage(cvSize(image->width, image->height),image->depth ,1);image3 = cvCreateImage(cvSize(image->width, image->height),image->depth ,1);int i , j ;int left,right, up , down;int n = 2;//窗口大小為5*5int r,s,flag;unsigned char * ptr, *dst;for (i = 0 ; i< image->height; i++){for (j = 0 ; j< image->width; j++){//窗口設(shè)定left = j - n;right = j +n;up = i -n;down = i+n;//窗口出界處理if(left< 0){left = 0;}if(right >= image->width){right = image->width-1;}if(up< 0){up =0;}if(down >= image->height){down = image->height -1;}//腐蝕處理dst = (unsigned char *)image2->imageData + image2->widthStep*i + j;flag = 1;for (r = up;r <= down;r++){for (s = left ; s<= right; s++){ptr = (unsigned char *)image->imageData + r*image->widthStep + s;if(*ptr != 255){flag = 0;}}}if (flag == 1){*dst = 255;}else{*dst = 0;}}}cvSub(image,image2,image3,0);cvNamedWindow("image3",1);cvShowImage("image3",image3);cvSaveImage("mapleleafboard.bmp", image3);cvWaitKey(0);cvReleaseImage(&image);cvReleaseImage(&image2);cvReleaseImage(&image3);cvDestroyAllWindows();return 0 ; }原圖:



邊界提取:


?

(2)???????圖像分割

基于數(shù)學(xué)形態(tài)學(xué)的圖像分割算法是利用數(shù)學(xué)形態(tài)學(xué)變換,把復(fù)雜目標(biāo)X分割成一系列互不相交的簡單子集X1,X2,…,XN,即:

對(duì)目標(biāo)X的分割過程可按下面的方法完成:首先求出X的最大內(nèi)接“圓”X1,然后將X1從X中減去,再求X-X1的最大內(nèi)接“圓”X2,…,依此類推,直到最后得到的集合為空集為止。下面以二值圖像為例,介紹用數(shù)學(xué)形態(tài)學(xué)方法求解子集X1,X2,…,XN的過程。

設(shè)B為結(jié)構(gòu)元素,B可以是圓、三角形、正方形等簡單的幾何基元,那么“簡單”形狀集合Xi可以用下面的公式來定義:

式中ni為一整數(shù),用上式定義Xi分割目標(biāo),有時(shí)會(huì)產(chǎn)生分割過程不唯一的現(xiàn)象。為此可采用下面公式來定義簡單集合Xi

其中Li為一個(gè)點(diǎn)或一條線,當(dāng)Li為點(diǎn)時(shí),則與(12)式定義等價(jià)。(13)式定義的簡單形狀Xi可由niB沿線Li移動(dòng)而產(chǎn)生。即將“產(chǎn)生器”niB的中心沿“脊骨”Li移動(dòng)產(chǎn)生。如果niB為圓,則得到的Xi稱Blum帶。它具有一些特殊的性質(zhì),如Xi的邊界是光滑的,Xi的最大圓與其邊界相切,Xi的脊骨與產(chǎn)生器都是唯一的等等。

有了簡單形狀集合Xi的定義,則目標(biāo)X可按下面方法分割。首先按式(14)求出X的最大內(nèi)切結(jié)構(gòu)元素Xi

數(shù)學(xué)形態(tài)學(xué)用于圖像分割的缺點(diǎn)是對(duì)邊界噪聲敏感。為了改善這一問題,劉志敏等人提出了基于圖像最大內(nèi)切圓的數(shù)學(xué)形態(tài)學(xué)形狀描述圖像分割算法和基于目標(biāo)最小閉包結(jié)構(gòu)元素的數(shù)學(xué)形態(tài)學(xué)形狀描述圖像分割算法,并使用該算法對(duì)二值圖像進(jìn)行了分割,取得了較好的效果。鄧世偉等人提出一種基于數(shù)學(xué)形態(tài)學(xué)的深度圖像分割算法。作者首先利用形態(tài)學(xué)算子獲得分別含有階躍邊緣與屋脊邊緣的凸脊和凹谷圖像,然后利用控制區(qū)域生長過程得到最終的分割結(jié)果。與傳統(tǒng)方法相比,該方法速度快,抗噪性能好。

?

(3)???????形態(tài)骨架提取

形態(tài)骨架描述了物體的形狀和方向信息。它具有平移不變性、逆擴(kuò)張性和等冪性等性質(zhì),是一種有效的形狀描述方法。二值圖像A的形態(tài)骨架可以通過選定合適的結(jié)構(gòu)元素B,對(duì)A進(jìn)行連續(xù)腐蝕和開啟運(yùn)算來求取,設(shè)S(A)代表A的骨架,定義為:

蔣剛毅等人運(yùn)用數(shù)學(xué)形態(tài)學(xué)方法,對(duì)交通標(biāo)志的內(nèi)核形狀提取形態(tài)骨架函數(shù),將其作為用于模式匹配的形狀特征。A的形態(tài)骨架函數(shù)SKF(A)表示為:

SKF(X)中值較大的點(diǎn)對(duì)應(yīng)大的n,并代表了形態(tài)骨架的主要成分,即表達(dá)了形狀的主體結(jié)構(gòu);而SKF(X)中值較小的點(diǎn)對(duì)應(yīng)小的n,是形態(tài)骨架的細(xì)節(jié)成分,與形狀的邊緣信息相聯(lián)系。

形態(tài)骨架函數(shù)完整簡潔地表達(dá)了形態(tài)骨架的所有信息,因此,根據(jù)形態(tài)骨架函數(shù)的模式匹配能夠?qū)崿F(xiàn)對(duì)不同形狀物體的識(shí)別。算法具有位移不變性,因而使識(shí)別更具穩(wěn)健性。

?骨架提取原代碼:

/************************************************************************/ /* 骨架提取*/ /************************************************************************/ #include<cv.h> #include <highgui.h> int main(){IplImage* image = cvLoadImage("E:\\image\\bone.tif",0);cvNamedWindow("image",1);cvNamedWindow("image2",1);cvNamedWindow("image3",1);cvNamedWindow("image4",1);cvNamedWindow("image5",1);cvNamedWindow("image6",1);cvNamedWindow("result",1);cvShowImage("image", image);//cvWaitKey(0);//當(dāng)前圖片image2 當(dāng)前被腐蝕后的圖片image3 被腐蝕開操作之后的圖片 image5 //image4 作為開操作的中間值 作差后的圖片image6 并之后的圖片result IplImage *image2, *image3 , *image4, *image5,*image6,*result;image2 = cvCreateImage(cvSize(image->width,image->height),IPL_DEPTH_8U,1);image3 = cvCreateImage(cvSize(image->width,image->height),IPL_DEPTH_8U,1);image5 = cvCreateImage(cvSize(image->width,image->height),IPL_DEPTH_8U,1);image4 = cvCreateImage(cvSize(image->width,image->height),IPL_DEPTH_8U,1);image6 = cvCreateImage(cvSize(image->width,image->height),IPL_DEPTH_8U,1);result = cvCreateImage(cvSize(image->width,image->height),IPL_DEPTH_8U,1);//循環(huán)標(biāo)志 flagbool flag = true;//腐蝕判斷標(biāo)志 flag2bool flag2 = true;int i,j,r,s;unsigned char * ptr,*dst;unsigned char B[9] = {255 ,255,255,255,255,255,255,255,255};//對(duì)result進(jìn)行賦值 全部為0 for (i = 0 ; i< result->height; i++){for (j = 0 ; j< result->width ; j++){dst = (unsigned char *)(result->imageData + result->widthStep *i +j);*dst = 0;}}image2 = cvCloneImage(image);cvShowImage("image2", image2);//cvWaitKey(0);while (flag){//flag = false;cvShowImage("image2",image2);//進(jìn)行腐蝕操作,開環(huán)操作 作差 并for (i = 0 ; i< image3->height; i++){for (j = 0 ; j< image3->width ; j++){dst = (unsigned char *)(image3->imageData + i*image3->widthStep + j);if ((i == 0 )|| (j == 0) ||( i == image->height -1 ) || (j == image->width -1 )){*dst = 0;//break;}else{flag2 = true;for (r = i-1 ; r<= i+1 ; r++){for (s = j -1 ; s<= j+1 ; s++){ptr = (unsigned char *)(image2->imageData + r*image2->widthStep + j);if(*ptr != 255){flag2 =false;}}}if (flag2){*dst = 255;}else {*dst = 0;}}}}cvShowImage("image3",image3);//開操作 先腐蝕 后膨脹 for (i = 0 ; i< image4->height; i++){for (j = 0 ; j< image4->width ; j++){dst = (unsigned char *)(image4->imageData + i*image4->widthStep + j);if ((i == 0 )|| (j == 0) ||( i == image->height -1 ) || (j == image->width -1 )){*dst = 0;//break;}else{flag2 = true;for (r = i-1 ; r<= i+1 ; r++){for (s = j -1 ; s<= j+1 ; s++){ptr = (unsigned char *)(image3->imageData + r*image3->widthStep + s);if(*ptr != 255){flag2 =false;}}}if (flag2){*dst = 255;}else {*dst = 0;}}}}cvShowImage("image4",image4);//膨脹操作for (i = 0 ; i< image5->height; i++){for (j = 0 ; j< image5->width ; j++){dst = (unsigned char *)(image5->imageData + i*image5->widthStep + j);if ((i == 0 )|| (j == 0) ||( i == image5->height -1 ) || (j == image5->width -1 )){*dst = 0;//break;}else{flag2 = false;for (r = i-1 ; r<= i+1 ; r++){for (s = j -1 ; s<= j+1 ; s++){ptr = (unsigned char *)(image4->imageData + r*image4->widthStep + s);if(*ptr == 255){flag2 = true;}}}if (flag2){*dst = 255;}else {*dst = 0;}}}}cvShowImage("image5",image5);//作差cvSub(image3,image5,image6,0);//并運(yùn)算for (i = 0 ; i< result->height; i++){for (j = 0 ; j< result->width ; j++){dst = (unsigned char *)(result->imageData + result->widthStep *i +j);ptr = (unsigned char *)(image6->imageData + image6->widthStep *i +j);if (*ptr == 255){*dst = 255;}}}cvShowImage("image6",image6);//將腐蝕后的圖像復(fù)制給當(dāng)前圖像image2image2 = cvCloneImage(image3);//循環(huán)標(biāo)志判定flag = false;for (i = 0 ; i< image2->height; i++){for (j = 0 ; j< image2->width ; j++){ptr = (unsigned char *)(image2->imageData + image2->widthStep *i +j);if (*ptr == 255){flag = true;}}}cvShowImage("result", result);cvWaitKey(40);}cvShowImage("image2", image2);cvShowImage("image3", image3);//cvShowImage("image4", image4);//cvShowImage("image5", image5);//cvShowImage("image6", image6);cvShowImage("result",result);cvSaveImage("E:\\image\\bonegujia.bmp",result);cvWaitKey(0);cvReleaseImage(&image);cvDestroyAllWindows();return 0; }
原圖:


提取的骨架:


DNA原圖:


骨架:


形態(tài)學(xué)算法對(duì)于提取交叉的物體,會(huì)產(chǎn)生斷裂,一般會(huì)在提取之后緊跟連接操作。




角點(diǎn)提取源代碼:采用擊中擊不中變換

/******************************************************************** 形態(tài)學(xué)基本操作采用二值圖像 形態(tài)學(xué)方法在邊界獲取和形狀檢測中有很多應(yīng)用 尋找角點(diǎn) ***********************************************************************/ #include<cv.h> #include <highgui.h> int main(){IplImage * image,*image2,*image3,*image4,*result;image = cvLoadImage("E:\\image\\jiaodian.bmp", 0);cvNamedWindow("image",1);cvShowImage("image",image);/*擊中擊不中變換 尋找角點(diǎn)*/ /************************************************************************//* 最終結(jié)果為(79, 85 )和 (129 ,134)兩個(gè)符合要求的角點(diǎn) 在結(jié)果圖像中可以看到兩個(gè)白點(diǎn)*//************************************************************************/image2 = cvCreateImage(cvSize(image->width, image->height),image->depth ,1);image3 = cvCreateImage(cvSize(image->width, image->height),image->depth ,1);image4 = cvCreateImage(cvSize(image->width, image->height),image->depth ,1);result = cvCreateImage(cvSize(image->width, image->height),image->depth ,1);int i,j,r,s ;unsigned char B1[9] ={ 255,255,255,255,0,0,255,0,0};unsigned char B2[9] = {0,0,0,0,255,255,0,255,255 };int flag; //iamge2 是對(duì)image進(jìn)行求補(bǔ)的結(jié)果unsigned char *ptr, *dst,*ptr2;for (i = 0 ; i< image2->height; i++){for (j = 0 ; j< image2->width; j++){ptr = (unsigned char*)image->imageData + i * image->widthStep+ j;dst = (unsigned char*)image2->imageData + i*image2->widthStep + j;*dst = 255- (*ptr);}}//對(duì)源圖像進(jìn)行腐蝕for (i = 0 ; i< image3->height; i++){for (j = 0 ; j< image3->width; j++){flag = 1;dst = (unsigned char*)image3->imageData + i*image3->widthStep +j;//邊界判斷if (( i == 0) || (j == 0) || (i == image3->height-1) || (j == image3->width -1 )){*dst = 0;}else{for (r = i -1 ; r<= i+1; r++){for (s = j-1 ; s <= j +1 ; s++){ptr = (unsigned char*)image->imageData + r * image->widthStep+ s;if (*ptr != B1[3*(r-i+1) + s-j+1]){flag = 0;break;}}}if (flag == 1){ptr = (unsigned char*)image->imageData + i * image->widthStep+ j;*dst = 255;}else{*dst = 0;}}}}//顯示腐蝕結(jié)果for (i = 0 ; i< image2->height; i++){for (j = 0 ; j< image2->width; j++){ptr = (unsigned char*)image->imageData + i * image->widthStep+ j;ptr2 = (unsigned char*)image3->imageData + i*image3->widthStep + j;if (*ptr2 == 255){printf("x, %d y: %d %d\n",j, i, *ptr2 - *ptr);}}}//對(duì)補(bǔ)圖像進(jìn)行腐蝕for (i = 0 ; i< image4->height; i++){for (j = 0 ; j< image4->width; j++){flag = 1;dst = (unsigned char*)image4->imageData + i*image4->widthStep +j;//邊界判斷if (( i == 0) || (j == 0) || (i == image4->height-1) || (j == image4->width -1 )){*dst = 0;}else{for (r = i -1 ; r<= i+1; r++){for (s = j-1 ; s <= j +1 ; s++){ptr = (unsigned char*)image2->imageData + r * image2->widthStep+ s;if ((*ptr) != B2[3*(r- i+1) + s-j +1]){flag = 0;}}}if (flag == 1){ptr = (unsigned char*)image2->imageData + i * image2->widthStep+ j;*dst = 255;}else{*dst = 0;}}}}//顯示腐蝕結(jié)果for (i = 0 ; i< image4->height; i++){for (j = 0 ; j< image4->width; j++){ptr = (unsigned char*)image2->imageData + i * image->widthStep+ j;ptr2 = (unsigned char*)image4->imageData + i*image3->widthStep + j;if (*ptr2 == 255){printf("x, %d y: %d %d\n",j,i, *ptr2 - *ptr);}}}//二者求交集for (i = 0 ; i< result->height; i++){for (j = 0 ; j< result->width; j++){ptr = (unsigned char *)image3->imageData + image3->widthStep * i + j;ptr2 = (unsigned char *)image4->imageData + image4->widthStep * i + j;dst = (unsigned char *)result->imageData + result->widthStep*i + j;if (((*ptr) == 255) && ((*ptr2) == 255)){*dst = 255;printf("x : %d\n" , j);printf("y : %d\n" , i);}else{*dst = 0;}}}cvNamedWindow("image3",1);cvNamedWindow("image4",1);cvNamedWindow("result",1);cvShowImage("image3",image3);cvShowImage("image4",image4);cvShowImage("result",result);//cvSaveImage("mapleleafboard.bmp", image3);cvWaitKey(0);cvReleaseImage(&image);cvReleaseImage(&image2);cvReleaseImage(&image3);cvDestroyAllWindows();return 0 ; }原圖:


提取的角點(diǎn):


如果要提取十字型角點(diǎn)只需換用十字型的模板即可

(4)???????噪聲濾除

對(duì)圖像中的噪聲進(jìn)行濾除是圖像預(yù)處理中不可缺少的操作。將開啟和閉合運(yùn)算結(jié)合起來可構(gòu)成形態(tài)學(xué)噪聲濾除器。

對(duì)于二值圖像,噪聲表現(xiàn)為目標(biāo)周圍的噪聲塊和目標(biāo)內(nèi)部的噪聲孔。用結(jié)構(gòu)元素B對(duì)集合A進(jìn)行開啟操作,就可以將目標(biāo)周圍的噪聲塊消除掉;用B對(duì)A進(jìn)行閉合操作,則可以將目標(biāo)內(nèi)部的噪聲孔消除掉。該方法中,對(duì)結(jié)構(gòu)元素的選取相當(dāng)重要,它應(yīng)當(dāng)比所有的噪聲孔和噪聲塊都要大。

對(duì)于灰度圖像,濾除噪聲就是進(jìn)行形態(tài)學(xué)平滑。實(shí)際中常用開啟運(yùn)算消除與結(jié)構(gòu)元素相比尺寸較小的亮細(xì)節(jié),而保持圖像整體灰度值和大的亮區(qū)域基本不變;用閉合運(yùn)算消除與結(jié)構(gòu)元素相比尺寸較小的暗細(xì)節(jié),而保持圖像整體灰度值和大的暗區(qū)域基本不變。將這兩種操作綜合起來可達(dá)到濾除亮區(qū)和暗區(qū)中各類噪聲的效果。同樣的,結(jié)構(gòu)元素的選取也是個(gè)重要問題。


?

?

四?選取結(jié)構(gòu)元素的方法

分析表明,各種數(shù)學(xué)形態(tài)學(xué)算法的應(yīng)用可分解為形態(tài)學(xué)運(yùn)算和結(jié)構(gòu)元素選擇兩個(gè)基本問題,形態(tài)學(xué)運(yùn)算的規(guī)則已由定義確定,于是形態(tài)學(xué)算法的性能就取決于結(jié)構(gòu)元素的選擇,亦即結(jié)構(gòu)元素決定著形態(tài)學(xué)算法的目的和性能。因此如何自適應(yīng)地優(yōu)化確定結(jié)構(gòu)元素,就成為形態(tài)學(xué)領(lǐng)域中人們長期關(guān)注的研究熱點(diǎn)和技術(shù)難點(diǎn)。目前較多采用多個(gè)結(jié)構(gòu)元素對(duì)圖像進(jìn)行處理的方法。

?

(1)???????多結(jié)構(gòu)元素運(yùn)算

在許多形態(tài)學(xué)應(yīng)用中,往往只采用一個(gè)結(jié)構(gòu)元素,這通常不能產(chǎn)生滿意的結(jié)果。在模式識(shí)別中,如果要提取某個(gè)特定的模式,只采用一個(gè)結(jié)構(gòu)元素,那么,只有與結(jié)構(gòu)元素形狀、大小完全相同的模式才能被提取,而與此結(jié)構(gòu)元素表示的模式即使有微小差別的其他模式的信息都不能獲取。

解決此問題的一個(gè)有效方法之一就是將形態(tài)學(xué)運(yùn)算與集合運(yùn)算結(jié)合起來,同時(shí)采用多個(gè)結(jié)構(gòu)元素,分別對(duì)圖像進(jìn)行運(yùn)算,然后將運(yùn)算后的圖像合并起來,即多結(jié)構(gòu)元素形態(tài)學(xué)運(yùn)算。

?

(2)???????用遺傳算法選取結(jié)構(gòu)元素

遺傳算法的思想來源于自然界物競天擇、優(yōu)勝劣汰、適者生存的演化規(guī)律和生物進(jìn)化原理,并引用隨機(jī)統(tǒng)計(jì)理論而形成,具有高效并行全局優(yōu)化搜索能力,能有效地解決機(jī)器學(xué)習(xí)中參數(shù)的復(fù)雜優(yōu)化和組合優(yōu)化等難題。

近年來不少國外學(xué)者已進(jìn)行了這方面的探索與研究,Ehrgardt設(shè)計(jì)了形態(tài)濾波的遺傳算法,用于二值圖像的去噪和根據(jù)二值紋理特性消除預(yù)定目標(biāo);Huttumen利用遺傳算法構(gòu)造了軟式形態(tài)濾波器及其參數(shù)優(yōu)化的設(shè)計(jì)方法,以實(shí)現(xiàn)灰度圖像的降噪功能。余農(nóng)、李予蜀等人用遺傳算法在自然景象的目標(biāo)檢測與提取方面進(jìn)行了研究,通過自適應(yīng)優(yōu)化訓(xùn)練使結(jié)構(gòu)元素具有圖像目標(biāo)的形態(tài)結(jié)構(gòu)特征,從而賦予結(jié)構(gòu)元素特定的知識(shí),使形態(tài)濾波過程融入特有的智能,以實(shí)現(xiàn)對(duì)復(fù)雜變化的圖像具有良好的濾波性能和穩(wěn)健的適應(yīng)能力。其實(shí)質(zhì)是解決濾波器設(shè)計(jì)中知識(shí)獲取和知識(shí)精煉的機(jī)器學(xué)習(xí)問題。

?

五?數(shù)學(xué)形態(tài)學(xué)存在的問題與進(jìn)一步的研究方向

數(shù)學(xué)形態(tài)學(xué)是一門建立在集論基礎(chǔ)之上的學(xué)科,是幾何形狀分析和描述的有力工具。近年來,數(shù)學(xué)形態(tài)學(xué)在數(shù)字圖像處理、計(jì)算機(jī)視覺與模式識(shí)別等領(lǐng)域中得到了越來越廣泛的應(yīng)用,漸漸形成了一種新的數(shù)字圖像分析方法和理論,引起了國內(nèi)外相關(guān)領(lǐng)域研究人員的廣泛關(guān)注。目前,數(shù)學(xué)形態(tài)學(xué)存在的問題及研究方向主要集中在以下幾個(gè)方面:

(1)????????????形態(tài)運(yùn)算實(shí)質(zhì)上是一種二維卷積運(yùn)算,當(dāng)圖像維數(shù)較大時(shí),特別是用灰度形態(tài)學(xué)、軟數(shù)學(xué)形態(tài)學(xué)、模糊形態(tài)學(xué)等方法時(shí),運(yùn)算速度很慢,因而不適于實(shí)時(shí)處理。

(2)????????????由于結(jié)構(gòu)元素對(duì)形態(tài)運(yùn)算的結(jié)果有決定性的作用,所以,需結(jié)合實(shí)際應(yīng)用背景和期望合理選擇結(jié)構(gòu)元素的大小與形狀。

(3)?????????????軟數(shù)學(xué)形態(tài)學(xué)中關(guān)于結(jié)構(gòu)元素核心、軟邊界的定義,及對(duì)加權(quán)統(tǒng)計(jì)次數(shù)*的選擇也具有較大的靈活性,應(yīng)根據(jù)圖像拓?fù)浣Y(jié)構(gòu)合理選擇,沒有統(tǒng)一的設(shè)計(jì)標(biāo)準(zhǔn)。

(4)???????????為達(dá)到最佳的濾波效果,需結(jié)合圖像的拓?fù)涮匦赃x擇形態(tài)開、閉運(yùn)算的復(fù)合方式。

(5)????????????對(duì)模糊形態(tài)學(xué),不同的模糊算子會(huì)直接影響模糊形態(tài)學(xué)的定義及其運(yùn)算結(jié)果。

(6)???????????有待進(jìn)一步將數(shù)學(xué)形態(tài)學(xué)與神經(jīng)網(wǎng)絡(luò)、模糊數(shù)學(xué)結(jié)合研究灰度圖像、彩色圖像的處理和分析方法。

(7)????????????有待進(jìn)一步研究開發(fā)形態(tài)運(yùn)算的光學(xué)實(shí)現(xiàn)及其它硬件實(shí)現(xiàn)方法。

(8)????????????有待將形態(tài)學(xué)與小波、分形等方法結(jié)合起來對(duì)現(xiàn)有圖像處理方法進(jìn)行改進(jìn),進(jìn)一步推廣應(yīng)用。所以如何實(shí)現(xiàn)灰度形態(tài)學(xué)、軟數(shù)學(xué)形態(tài)學(xué)、模糊軟數(shù)學(xué)形態(tài)學(xué)的快速算法,如何改善形態(tài)運(yùn)算的通用性,增強(qiáng)形態(tài)運(yùn)算的適應(yīng)性,并結(jié)合數(shù)學(xué)形態(tài)學(xué)的最新應(yīng)用進(jìn)展,將其應(yīng)用到圖像處理領(lǐng)域,豐富和發(fā)展利用數(shù)學(xué)形態(tài)學(xué)的圖像處理與分析方法,成為數(shù)學(xué)形態(tài)學(xué)今后的發(fā)展方向。

?

六?結(jié)論

數(shù)學(xué)形態(tài)學(xué)對(duì)圖像的處理具有直觀上的簡明性和數(shù)學(xué)上的嚴(yán)謹(jǐn)性,在定量描述圖像的形態(tài)特征上具有獨(dú)特的優(yōu)勢(shì),為基于形狀細(xì)節(jié)進(jìn)行圖像處理提供了強(qiáng)有力的手段。建立在集合理論基礎(chǔ)上的數(shù)學(xué)形態(tài)學(xué),主要通過選擇相應(yīng)的結(jié)構(gòu)元素采用膨脹、腐蝕、開啟、閉合#種基本運(yùn)算的組合來處理圖像。數(shù)學(xué)形態(tài)學(xué)在圖像處理中的應(yīng)用廣泛,有許多實(shí)用的算法,但在每種算法中結(jié)構(gòu)元素的選取都是一個(gè)重要的問題。



轉(zhuǎn)載于:https://www.cnblogs.com/libing64/archive/2012/01/05/2878735.html

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的图像处理基本算法-形态学的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。