999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于C++與MATLAB混合編程的露頭表面裂縫識別及矢量化方法

2020-08-06 15:01:03梁博曾齊紅劉遠剛鄧帆邵燕林
計算機時代 2020年7期

梁博 曾齊紅 劉遠剛 鄧帆 邵燕林

摘要:針對露頭影像裂縫特征識別與矢量化問題,提出基于c++與MATLAB混合編程的裂縫識別及矢量化方法。調用MATLAB中的圖像裂縫識別函數快速提取露頭裂縫,同時采用一種改進的八鄰域追蹤算法實現裂縫線狀要素的矢量化。實驗結果表明,該方法將c++與MATLAB二者優勢互補,兼顧了程序的開發效率與執行效率;改進的八鄰域追蹤算法,在追蹤過程中自動簡化線要素,既壓縮了裂縫矢量數據的存儲空間,也提高了八鄰域追蹤算法的效率。

關鍵詞:混合編程;MATLAB;C++;八鄰域追蹤;矢柵轉換

中圖分類號:P208 文獻標識碼:A 文章編號:1006-8228(2020)07-72-04

0引言

露頭作為探索地下礦物油藏、反映地質運動的有利憑證,在地質研究中起到關鍵性作用,對露頭表面裂縫線狀要素進行自動識別與矢量化對露頭數字模型建立和露頭表面裂縫特征分析具有重要意義。MATLAB憑借其強大的數值計算能力被廣泛應用于數字圖像處理、數值分析、算法開發等眾多領域,將MATLAB應用于露頭表面裂縫識別,可大大提高開發效率。其作為一門解釋性編程語言,MATLAB也存在諸多短板,例如代碼執行效率低、源代碼保密性較差、界面開發能力較差等。而c++作為一門面向對象的程序設計語言,執行效率較高,程序開發較為靈活且易于維護,但與MATLAB相比在圖像處理算法實現上較為復雜,若算法涉及大量的工程計算,僅僅依靠c++進行算法開發顯然要繁瑣許多,不僅降低了開發效率,而且增加了出錯的風險。實際應用中,若能將c++與MATLAB二者優勢互補,將大大提高編程效率,同時也保證了程序的執行效率與靈活性。

針對以上問題,筆者提出將c++與MATLAB混合編程應用于露頭表面線狀要素識別及矢量化方法的研究。在前期研究工作中,已經利用MATLAB開發了露頭表面裂縫線狀要素識別與提取算法,本文將具體介紹如何利用c++調用MATLAB所實現的算法,提取露頭圖像中的裂縫特征,并利用c++實現一種改進的線狀要素矢量化方法完成裂縫特征的矢量化。

1C++與MATLAB混合編程實現露頭裂縫識別

本文采用的露頭裂縫識別算法,是一個在MATLAB中封裝好的函數——Beamlet函數。研究中,為了實現露頭裂縫的識別,采用c++與MATLAB混合編程的方式,將MATLAB中的Beamlet函數發布成C++函數庫,在VS2017集成開發環境中,以及OpenCV跨平臺視覺庫的支持下,通過c++調Beamlet函數。

1.1 MATLAB函數編譯成C++庫文件

(1)開發環境

本文所有試驗均在windows 10操作系統下完成。c++開發環境為Microsoft Visual Smdio 2017,Matlab編程環境為Matlab 2016b,程序中采用的OpenCV版本為3.2.0。

(2)生成C++函數庫文件

Matlab編譯器使用mcc命令能將一個M文件編譯成c++能夠調用的頭文件及其函數庫。因此,采用mcc命令將Matlab中的圖像裂縫識別函數(Beamlet函數)編譯成供C++調用的函數庫。具體過程包括:①首先在Matlab中準備裂縫識別程序,并命名為Beamlet.m,該函數的功能是對露頭表面圖像進行裂縫線狀要素識別,識別結果以柵格數據的形式輸出;②打開MATLAB軟件的命令窗口,輸入mcc命令:mex-setup,在出現的相應界面中點擊選項:mex-setupC++;③輸入編譯命令:mcc-W cpplib:Beamlet-Tlink:lib add,其中“Beamlet”表示想要生成庫文件的名稱,點擊確定,開始編譯;④提示編譯成功,即成功將M文件編譯成c++函數庫,其中Beamlet.h、Beamlet.1ib和Beamlet.dll可供c++程序訪問。

1.2調用Beamlet算法識別裂縫

(1)配置C++項目

在VS2017中配置vc++項目,為調用圖像裂縫線狀要素識別函數做準備。具體過程如下:①在VS2017中創建c++項目;②進入項目的屬性頁,配置vc++目錄中的包含目錄與庫目錄,包含目錄:[Matlab安裝目錄]kR2016a\externkinclude;庫目錄:[Matlab安裝目錄]kR2016a\extern\lib\win64kmicrosoft;③向項目中添Beamlet.h、Beamlet.1ib、Beamlet.dll這3個文件;④在項目中加載Beamlet.1ib文件,即在項目中需要調用Beamlet算法的文件頭部添加命令:#pragma comment(lib,”Beamlet.lib”),鏈接Beamlet.1ib庫文件;⑤添加c+斗頭文件,#include,運行測試,完成配置。

(2)調用Beamlet函數

下面重點說明在vc++項目中用c++語句調用MATLAB函數的具體方法,圖1為c++調用Beamlet函數方法流程圖。

流程圖中算法具體步驟如下:

步驟1c++讀取圖像。采用OpenCV中Mat類讀取圖像,存入矩陣。

string path=”E:\\data\\1.jpg”;

cv::Mat image=imread(path,1):

//實例化Mat對象image,讀取圖像存入矩陣image

步驟2設置函數兩個輸入參數a,b。double a[1]:double b[1]

//用double類型數組a、b存放兩個參數

步驟3參數c++類型轉化為MATLAB類型。MATLAB函數均是以矩陣的形式進行參數的輸入,輸出,因此,在調用函數時,需將參數轉換為mwArray類型進行傳輸。

步驟9采用cv::Mat類對象存儲Beamlet函數的處理結果。

步驟1 0函數處理結果圖像顯示。

結果如圖2所示。

2改進的八鄰域追蹤矢量化算法

如圖2所示,調用Beamlet算法識別的露頭裂縫為一張細化的二值圖像,圖中裂縫被識別為寬度為一個像素的柵格線。在柵格數據中采用緊密相連的柵格像元來表示線狀要素,而在矢量數據中只需記錄曲線折點的相應坐標便可以精確的表示線狀要素。為了精確表達裂縫特征,需要將柵格圖像轉為矢量圖形。在柵格轉矢量的過程中,若完全保留每個柵格像元的坐標,則會造成大量的冗余點,這是算法需要避免的。本文借助C++中的雙向隊列deque來存儲矢量曲線的坐標點,采用一種改進的八鄰域追蹤算法實現裂縫柵格圖像的矢量化,同時盡量壓縮矢量圖形上的定點數。

2.1八鄰域追蹤算法基本思路

當進行線狀要素追蹤時,與當前像素點相鄰的像素點則稱作該點的8個鄰接像素,如圖3所示,設定種子點P1左上角點為鄰域點1,按順時針方向將八鄰域點分別標號為①、②、…、。八鄰域追蹤算法基本思路如下:①在二值圖像中找到一個裂縫點(圖2中白色像素點)作為追蹤起點;②按照八方向搜索機制檢索相鄰裂縫點,當找到相鄰裂縫點時,記錄下來并將起點從影像中刪除(賦值為背景顏色),然后以該鄰接點為新的起點繼續搜索;③若起點的八方向均未搜索到裂縫點,則終止本次搜索,并轉入①,開始下一條線的追蹤。

2.2線狀要素矢量化實現

本文采用OpenCV中的Mat類對象存儲Beamlet函數處理結果,即讀取線狀要素柵格圖像并存入矩陣。設a(i,j)為當前柵格像素(i,j)的灰度值,像素點為白色(a(i,j)=255))或黑色(a(i,j)=0),當前像素(i,j)的3×3鄰域矩陣如圖3所示。圖中點Pl為追蹤起點,其像素值a(i,J)=255,該點的①號鄰域點P2的值a(i-1,j-1)=255,說明P2是追蹤線上的下一個點。

在八鄰域追蹤算法的基礎上,本文提出了一種改進,改進算法流程見圖4。主要步驟包括:①確定柵格影像追蹤起點;②從起點開始向八方向搜索相鄰點,搜索成功時,將該點賦值為背景色,記錄檢索方向并保存;③判斷此方向與上一點處所保存的方向是否一致,若一致,且此點不為該條線的端點,則舍棄該點繼續追蹤下一點,否則保留該點,而后將其作為新起點;④若新起點的八方向均未檢索成功,表示一條線的搜索已完成,將此線對象保存;⑤搜索另一線對象,直到全部遍歷完成。

該算法具有兩個優點:①每次成功搜索到新的鄰接點時,記錄方向,下一次搜索時會率先搜索此方向,這符合普遍規律下線條的延伸狀態,大大減少檢索的次數,提高效率;②只存儲同一條線段的首尾兩點,在保留曲線的特征點(折點)的同時實現矢量數據壓縮。

最后調用本文實現的矢量化算法將Matlab模塊提取的裂縫圖像矢量化,并輸出為Shapefile格式。如圖5所示,為矢量化的裂縫圖形與對應的露頭圖像疊加顯示的效果。

3結束語

本文提出基于c++與Matlab混合編程的露頭表面裂縫識別與矢量化方法,給出了實驗方案的總體設計、實驗思路詳細分析、算法設計及具體實現,提供了類似問題完整解決方案。實驗效果表明:借助c++與Matlab混合編程成功調用Matlab函數,參數的輸入與輸出主要依賴C++程序實現,后臺圖像數據的處理與運算主要由Matlab模塊函數實現,充分結合了c++與Matlab各自的優點,兼顧了程序的開發效率與執行效率;通過一種改進的八鄰域追蹤算法對柵格數據進行矢量化,減少在追蹤過程中的鄰近點搜索次數,提高算法效率同時減少了線狀圖形中的冗余頂點,實現了結果數據的壓縮。

主站蜘蛛池模板: 欧美激情综合| 91青青视频| 老司国产精品视频91| 青青极品在线| 丝袜久久剧情精品国产| 熟妇丰满人妻av无码区| 国产精品一老牛影视频| 亚洲视频三级| 91久久夜色精品国产网站| 国产91全国探花系列在线播放| 国产91精品久久| 国产精品美女自慰喷水| 精品无码视频在线观看| 久久久精品久久久久三级| 国产精品亚洲精品爽爽| 2021国产在线视频| 欧美日韩北条麻妃一区二区| 亚洲综合九九| 亚洲伊人天堂| 青草娱乐极品免费视频| 国产精品免费入口视频| 亚洲国产在一区二区三区| 老熟妇喷水一区二区三区| 日本成人在线不卡视频| 国产丝袜第一页| 亚洲最大福利网站| 国产亚洲视频免费播放| 色视频久久| 在线观看欧美精品二区| 国产97视频在线观看| 国产欧美精品午夜在线播放| 毛片一级在线| 亚洲AV无码乱码在线观看代蜜桃| 国产成年无码AⅤ片在线| 精品一区二区三区视频免费观看| 无码日韩人妻精品久久蜜桃| 欧美精品v欧洲精品| 乱系列中文字幕在线视频| 色有码无码视频| 99热这里只有精品免费| 成人韩免费网站| 国产亚洲视频在线观看| 中文字幕日韩欧美| 亚洲va在线∨a天堂va欧美va| 亚洲国产AV无码综合原创| 一级做a爰片久久免费| 在线观看国产精美视频| 四虎在线观看视频高清无码| 亚洲免费毛片| 国产欧美专区在线观看| 东京热高清无码精品| 国产一级视频在线观看网站| 国产精品第一区在线观看| 亚洲综合激情另类专区| 免费女人18毛片a级毛片视频| 日本欧美一二三区色视频| 一本大道香蕉高清久久| 精品国产成人a在线观看| 亚洲欧美不卡| 色婷婷啪啪| 国产青榴视频| 欧美精品亚洲精品日韩专区| 伦伦影院精品一区| 国产精品原创不卡在线| 国产在线观看成人91| 精品综合久久久久久97| 亚洲制服丝袜第一页| 中文字幕亚洲电影| 国产一二视频| 国产精品久久久久久久久久久久| 91久久夜色精品| 在线观看精品国产入口| 国产精品亚洲va在线观看| 真实国产乱子伦视频| 国产无码在线调教| 国产主播一区二区三区| 九色在线视频导航91| 日本不卡在线| 一级一级一片免费| 一级成人a做片免费| 无码AV高清毛片中国一级毛片| 亚洲欧美日韩综合二区三区|