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

基于改進種子填充算法的地物快速填充應用研究

2013-03-06 02:11:54宋華平郭鑫李晉川
城市勘測 2013年4期
關鍵詞:方向區域

宋華平,郭鑫,李晉川

(1.重慶數字城市科技有限公司,重慶 400020; 2.重慶郵電大學光纖通信重點實驗室,重慶 400065)

基于改進種子填充算法的地物快速填充應用研究

宋華平1?,郭鑫2,李晉川1

(1.重慶數字城市科技有限公司,重慶 400020; 2.重慶郵電大學光纖通信重點實驗室,重慶 400065)

地形圖向GIS數據轉換工作量巨大,在建筑物面狀化處理過程中尤為突出。本文通過對此類工作特點的總結,以傳統的種子填充法和掃描線種子填充法為理論基礎,提出一種邊搜索邊填充、先填充再根據方向滿行入棧的改進種子填充算法。通過仿真實驗,對比傳統種子填充算法,得出該算法具有解決重復出入棧問題、降低使用堆棧大小,

改進種子填充算法;區域填充;二次開發

1 引 言

建筑物面填充是GIS數據建庫很重要的步驟,其所運用的給定區域快速填充算法是計算機圖形處理中的一個重要課題。在進行圖形處理時,不僅要畫出圖形的邊界,常常還需要將邊界范圍內的所有像素單元都修改為指定的顏色。它在真實圖形生成、計算機藝術、圖像處理、高精度字體顯示等多個領域中有著重要的應用[1]。因此,區域填充算法在計算機圖形學領域地位舉足輕重。

目前,最常用的區域填充是多邊形填色,傳統的區域填充算法有兩種:一種是采用鄰接鏈表的數據結構,通過確定區域邊界的掃描線覆蓋間隔來填充的掃描線(Scan Line)算法;另一種是采用遞歸方法,從給定的位置開始填充,到指定邊界為止的種子填充(Seed Filling)算法。文獻[2]提到的掃描線算法主要用于填充由簡單邊組成的規則區域,比如圓、橢圓以及其他一些標準的多邊形,它在填充時對輪廓線的形狀有一定的要求,需要預先知道區域的邊界。在很多實際應用中,一個需要填充的復雜區域的邊界事先并不知道,因此掃描線算法在處理帶水平邊的凹拐點時不能正確填充,但其利用了掃描線上像素之間的連貫性,因此具有較高的效率。胡云等[3]提出的種子填充算法不要求事先知道待填充區域的邊界,就可解決邊界比較復雜的和填充帶有內孔的多邊形區域填充問題。其原理是只要在某個區域(邊界)內已知一個像素,并賦予填充色,以該點為起點,用4向連通方法或8向連通方法,就能從此像素出發找到區域內的所有像素點進行填充。簡單直觀的種子填充算法,由于進行大量的出入棧操作,因此效率很低,在特殊應用中填充速度就滿足不了要求。在填充較大的區域時,要求分配較大的堆棧空間,不僅浪費了內存,還會出現堆棧溢出現象[4]。

鑒于以上的問題,本文吸取了種子填充算法的某些思想,提出一種邊搜索邊填充、先填充再根據方向滿行入棧的改進種子填充算法,算法避免了堆棧大小的問題,將填充的點包括邊界輪廓都存放在Filled隊列鏈表中,用于下一步的輪廓識別。該算法通過VC++ 6.0平臺的仿真驗證,得出其進出堆棧次數遠遠低于經典的種子填充算法。在執行效率和占有棧空間大小方面也得到很好的改進。最后,利用Bentley MicroStation軟件平臺的二次開發工具,在某市勘測院GIS建庫項目中實施該改進算法,發現填充速度很快,填充效果也能滿足實際空間數據編輯管理的應用需求。

2 種子填充法及其改進思想

種子填充算法是從填充區域內部一點開始,并由此出發找到區域內的所有像素。算法從給定種子(X,Y)開始,先檢測該點的顏色,如果它與邊界色和填充色都不相同,就用填充色來填充該點,然后檢測相鄰位置,以確定它們是否是邊界色和填充色,若不是,就采用遞歸算法填充該相鄰點,直到此過程檢測完整區域邊界范圍內的所有像素為止[5]。

2.1 種子填充算法

根據填充區域的特性,種子填充法可分為4向連通和8向連通兩種。4向連通區域是指從區域中任意一點出發,在不越出區域邊界的前提下,通過上、下、左、右4個方向的移動組合,搜索到達區域內的任意像素,這種填充方法就稱為“4-連通算法”。8向連通區域是指從區域中某一點出發,在不越出區域邊界的前提下,通過上、下、左、右、左上、左下、右上和右下全部8個方向到達區域內的任意像素,這種填充方法就稱為“8-連通算法”。基于應用需要,本文只分析“4-連通算法”。

圖1 連通方向示意圖

如圖1所示,假設中心的黃色點是當前處理的點,如果是“4-聯通算法”,則只搜索處理周圍紅色標識的4個點,如果是“8-聯通算法”則除了處理上、下、左、右4個紅色標識的點,還搜索處理4個藍色標識的點,但有時會出現越出邊界的問題。

2.2 改進種子填充算法思想

為了使算法適用于任意復雜圖形,并且具有較快的填充速度,本文采用邊搜索邊填充、先填充再滿行入棧的方法。在入棧之前要判斷行像素點是否已被填充,若已被填充才入棧,否則不予考慮。這樣將會減少入棧的冗余像素,即每一個像素行只入棧一次。為此,種子填充算法改進如下:建立一個隊列Filled和一個標志數組Flag來實現區域填充。

為了存儲對每個新的子區域進行搜索填充的起始位置以及搜索填充的方向,定義一個堆棧,其存儲結構體如下:

struct node{

int Xl;//當前掃描行填充區間的左邊界X坐標intXr;//當前掃描行填充區間的右邊界X坐標int Y;//當前掃描行Y

int Direction_4;//搜索填充的方向{-1,0}向左搜索,{1,0}向右搜索,{0,1}向上搜索,{0,-1}向下搜索

}

Link_Stack;

在算法的實現過程中我們可用for循環遍歷定義好的方向即可實現遞歸搜索。

Direction_8[]={{-1,0},{-1,1},{0,1},{1,1},{1,0},{1,-1},{0,-1},{-1,-1}};//8個連通方向

Direction_4[]={{-1,0},{0,1},{1,0},{0,-1}};//4個連通方向

算法步驟如下:

①找出該區域內部任意一點,作為填充種子。Flag[Y]標志掃描第Y行是否全部填充過,若是,則Flag[Y]=true,否則Flag[Y]=false。對Y行進行掃描時,先檢查Flag[Y],當Flag[Y]=false時才填充該點。

②對Y行進行左、右方向搜索,并把填充后種子點存入隊列Filled。Xl[Y]和Xr[Y]分別表示Y行最左端點和最右端點,這樣掃描的種子像素時范圍僅限于Xl[Y]≤x≤Xr[Y](x∈Filled),此時滿足Flag[Y] =true。

③將{{Xl[Y],Xr[Y]},Y,{0,1}}和{{Xl[Y],Xr[Y]},Y,{0,-1}}分別壓入堆棧,作為向上搜索填充和向下搜索填充的起始信息。其中{Xl[Y],Xr [Y]}為搜索區間,Y為搜索指定行,{0,1}和{0,-1}分別表示向上、向下的搜索方向。

④若堆棧為空,則填充過程完成,程序結束。否則繼續執行以下步驟:

⑤棧頂元素出棧,將出棧信息作為新區域搜索和填充的起始信息。保留起始信息的左右端點至Xpl和Xpr中,根據起始信息中記錄的方向在區間[Xpl,Xpr]內搜索下一條掃描行,若搜索到未填充點,則以其為種子點,重復②步驟。若在區間[Xpl,Xpr]內所有點都為邊界像素或已填充像素,則說明當前連續區域已填充完畢,轉步驟③。

圖2 改進種子填充算法流程圖

改進的掃描行種子填充算法如圖2所示,對上述搜索上方掃描行未填充的像素作為種子像素點入棧的操作進行細化,算法描述如下:

InitStack()//初始化棧,并使它為空;

Setpixel()//給指定像素點賦色

Filledpoint()//存儲已填充點

StackEmpty()//棧的判空函數

//算法開始:

while(!StackEmpty())

point=Pop();

if(Flag[Y]==false)

if(point的最左點不為填充色也不為邊界色)

{Setpixel(point的最左點);Filledpoint(point的最左點);}

if(point的最右點不為填充色也不為邊界色)

{Setpixel(point的最右點);Filledpoint(point的最右點);}

else

Push({{Xl[Y],Xr[Y]},Y,{0,1}});

Push({{Xl[Y],Xr[Y]},Y,{0,-1}});

該算法中,對種子所在掃描行分上下兩個方向進行分別逐行掃描,取標志數組和左右端點的數組.增加一個全局的結構體用以區分掃描方向,如此又可以減少對每條掃描行判定是否掃描過的步驟,提高效率。

上述算法的難點在于找到掃描行Y的未被填色的最左端點Xl和最右端點Xr后對其填色。可以分析的情形有三種,如圖3所示:包括行單區間連續(圖3之a);行多區間連續(圖3之b);行多區間不連續(圖3之c)。采用兩端逼近的算法來解決,最終解決的時間復雜度都為O(n)。

圖3 掃描行端點區間分類情況

3 算法比較

為了驗證上述改進算法棧空間大小、進出棧次數、算法執行時間方面的改進,我們在計算機上進行了實驗,該實驗是在配置為Pentium4 1.4GHz/512MB/Windows XP/VC++6.0的虛擬機環境下完成的。具體實驗數據如表1所示。

運行結果對比表 表1

由表1可以看出:①在棧所用空間大小方面,改進算法的棧空間大小大概是傳統種子填充算法的棧空間大小的20%左右;②從進出棧的次數來看,傳統種子填充算法的進出棧次數是改進算法的2.5倍;③利用改進算法對區域進行填充,可以大大加快填充速度,提高效率。

4 示范應用

隨著GIS應用領域的不斷擴大,應用功能的不斷增強,系統對空間數據的要求也越來越高。在GIS數據建庫的過程中,必須充分考慮成果的低成本、數據的真實性、建庫的高效性等特點。本文算法在某市勘測院的地圖整理編制應用過程中,利用Bentley MicroStation軟件平臺的二次開發功能[6],很好地解決了建筑輪廓查找與構面的問題。其基本思想為:首先查找到建筑物結構的關鍵字(如“磚”、“砼”等),然后以關鍵字為基礎,搜索包含此文字的最小外接多邊形,應用改進種子填充算法,將建筑物輪廓圍合而成區域構成建筑物的面。如圖4所示,填充粉色為一般建筑物,填充淺綠色為棚屋建筑物。

圖4 算法實例效果圖

利用查找建筑物結構關鍵字和改進的種子填充算法的建筑物構面過程,驗證了改進種子填充算法的完整性和高效性,此方法大大地提高了大比例尺地形圖建筑物構面的工作效率,也為大比例尺地形圖中建筑物建庫工作提供另一種可行技術手段。

5 結 論

市場經濟的發展和行業的激烈競爭要求我們以“服務”的理念和姿態做事,這種服務也必須與時俱進、動態變化。這使得地理信息數據建庫的方式、管理的過程都亟待變革,基于改進種子填充算法的GIS數據建筑物構面建庫處理方式具有高效率、高精度、低成本等優點,彌補了傳統AutoCAD建庫方面的不足,大大減少了人機交互工作,所得成果令人滿意。但我們在建庫過程中也發現了一些不足,如程序處理對原始測繪數據要求較高,成果中有漏填充或錯誤填充現象。未來,我們將進一步優化該建筑物填充方法,以便將該方法更好的應用于GIS建庫。

[1] Chang Fu,Chen Chunjen,Lu Chijen.A linear time component labehng algorithm using contour tracing technique[J]. Computer Vision and Image Understanding,2004,93(2): 206~220.

[2] 施一軍.基于GIS技術建立地圖數據庫的構想和實現[J].測繪通報,2011(11):71~73.

[3] 胡云,李盤榮.一種改進的種子填充算法[J].無錫市廣播電視大學學報,2008(2);31~34.

[4] 孫家廣,楊長貴.計算機圖形學[M].北京:清華大學出版社,2003:234~247.

[5] 秦曉薇.區域填充算法的研究[J].赤峰學院學報:自然科學版,2011(6):47~49.

[6] Winters.學習MicroStation VBA[M].北京:中國水利水電出版社,2007:194~231.

App lication research ofmodified Seed Filling Algorithm in the Fast Filling Process for Ground Object Data

Song Huaping1,Guo Xin2,Li Jinchuan1
(1.Chongqing Cybercity Sci-tech Co.,Ltd.Chongqing 400020,China; 2.Key Laboratory of Optical Fiber Communication Technology,Chongqing University of Posts and Telecommunications,Chongqing 400065,China)

The data conversion from topographicmaps to GIShas a hugeworkload,especially in the process of building Poindirtize.According to a summary of the characteristics of this type ofworks and the theoretical basis of traditional Seed Filling Algorithm and Scan-Line Seed Filling Algorithm,this paper proposes a modified Seed Filling Algorithm which can realize searching and filling simultaneously and firstly filling then full row accessing the stack according to the direction.By comparing with traditional Seed Filling Algorithm,simulation results show that the new algorithm has the ability to solve the problem of repeated accessing stack.What’smore,new algorithm can reduce the number of requiring stacks,and speed up the building(ground object filling)process.Finally,this paper uses Bentley MicroStation software platform secondary development tool to realize the fast library setting bymodified Seed Filling Algorithm.

modified seed filling algorithm;region filling;secondary development

1672-8262(2013)04-49-04

P208.2,P209

B

2012—10—07

宋華平(1979—),男,助理工程師,主要從事地理信息系統開發及數據處理等工作。

加快地物building填充速度等優點。最后,利用Bentley MicroStation軟件平臺二次開發工具,實現了改進種子填充算法對建筑物的快速建庫處理。

猜你喜歡
方向區域
2022年組稿方向
計算機應用(2022年2期)2022-03-01 12:33:42
2022年組稿方向
計算機應用(2022年1期)2022-02-26 06:57:42
永久基本農田集中區域“禁廢”
今日農業(2021年9期)2021-11-26 07:41:24
2021年組稿方向
計算機應用(2021年4期)2021-04-20 14:06:36
分割區域
2021年組稿方向
計算機應用(2021年3期)2021-03-18 13:44:48
2021年組稿方向
計算機應用(2021年1期)2021-01-21 03:22:38
關于四色猜想
分區域
基于嚴重區域的多PCC點暫降頻次估計
電測與儀表(2015年5期)2015-04-09 11:30:52
主站蜘蛛池模板: 国产美女视频黄a视频全免费网站| 欧美亚洲一二三区| a级毛片网| 伊人久久婷婷| 国内毛片视频| 少妇极品熟妇人妻专区视频| 国产自产视频一区二区三区| 国产网站一区二区三区| 久久精品人妻中文系列| 久久天天躁夜夜躁狠狠| 欧美激情视频二区| 在线无码九区| 91久久偷偷做嫩草影院电| 国产在线无码av完整版在线观看| 98超碰在线观看| 国产一级裸网站| 综合社区亚洲熟妇p| 伊人色天堂| 91人人妻人人做人人爽男同| 91精品专区国产盗摄| a在线亚洲男人的天堂试看| 久久久久人妻一区精品色奶水| 欧美午夜网站| 欧美国产日产一区二区| 久热中文字幕在线观看| 国产精品手机在线播放| 26uuu国产精品视频| 久久香蕉国产线看观| 亚洲精品第一页不卡| 国产特级毛片aaaaaaa高清| 精品视频一区二区三区在线播| 国产真实乱人视频| 日韩专区欧美| 伊人中文网| 情侣午夜国产在线一区无码| 人妻一区二区三区无码精品一区 | 国产精品va免费视频| 国产精品午夜电影| 熟妇丰满人妻| 91www在线观看| 2020国产精品视频| 999福利激情视频| 日韩av电影一区二区三区四区| 国产精品永久免费嫩草研究院| 综合亚洲网| 国产精品漂亮美女在线观看| 成人免费一级片| 欧美一级在线看| 精品一区国产精品| 日韩成人在线视频| 性激烈欧美三级在线播放| 色综合天天娱乐综合网| 18禁高潮出水呻吟娇喘蜜芽| 一级毛片a女人刺激视频免费| 99青青青精品视频在线| 欧美在线视频不卡| 视频二区中文无码| 57pao国产成视频免费播放| 欧美亚洲香蕉| 免费观看精品视频999| 国产第一页亚洲| 97se亚洲综合| 在线中文字幕日韩| 成人福利在线视频| 日韩无码视频专区| 91精品国产一区| 国产欧美日韩va| 国国产a国产片免费麻豆| 亚洲国产av无码综合原创国产| 日本成人精品视频| 啪啪免费视频一区二区| 色悠久久久久久久综合网伊人| 亚洲成人黄色网址| 免费日韩在线视频| 呦女亚洲一区精品| 欧美在线免费| 国产成人亚洲无吗淙合青草| 少妇精品久久久一区二区三区| 国产久操视频| 伊人久久大香线蕉综合影视| 色婷婷亚洲综合五月| 亚洲精品无码AⅤ片青青在线观看|