圖像連通域標記算法研究

搬以前寫的博客【2014-03-01 08:09】

圖像連通域標記算法研究?ConnectedComponent?Labeling? ? ? ? ? ? ? ??

最近在研究一篇復雜下背景文字檢測的論文。

“Detecting?Text?in?Natural?Scenes?with?Stroke?Width?Transform?”?CPVR?2010的文章,它主要探討利用文字內部筆畫寬度一致作為主要線索來檢測文字的一個新奇的算法,當然,我不是想討論文字檢測,論文算法實施的過程中有一步涉及到圖像連通域標記算法,在這里我遇到了一些問題,查閱了一些相關文章,所以想分享一下。

數字圖像處理中有介紹到過連通域的概念,簡單來說就是圖像中一片顏色近似一致的區域,準確說是某一片區域中的任何一個像素都與該區域的其他的一個或幾個像素8連通(或4連通),連通是指兩個像素相鄰并且某些屬性相同(狹義上是灰度值,廣義上可以像素所具備的各種屬性,我看的論文里屬性就是指像素所在筆畫的筆畫寬度),那么把這些相同的區域做上統一的標記是我們經常要做的事,研究這一類問題的算法我們就稱其連通域標記算法,連通域標記是最基本的圖像處理算法之一。

關于這一類問題,先說說我的想法。

想法一:

第一次了解這個問題的時候,看的是維基百科上關于這個的介紹,全英文嘛沒看太懂,但是看懂了一部分,于是出現了我的第一種時間效率極其差的辦法:

1.逐行掃描,對除了邊界像素的每一個像素(邊界像素特殊處理)作分析,分析它的左、左上、上、右上鄰居:

(1)如果本像素的屬性與其他四個鄰居中每一個鄰居的屬性都不同(例如都不是一個灰度級別,再如筆畫寬度不在同一個區間范圍),那么區域號加1,并把這個新的區域號標記本像素的區域號;

(2)如果只和其中某一個鄰居屬性相同,那么把鄰居的區域號標記本像素區域號

(3)如果和多個鄰居屬性相同,但是鄰居的區域號又各有不同,那么說明了不同鄰居雖然區域號不同,但是他們其實是在同一個連通域中,只不過沒有掃描到本像素之前,他們并未匯合,所以這里就要統一他們的區域號,這里需要掃描所有的已經標記過的像素,把其中標記的區域號和本像素的鄰居們區域號相同的那些像素群的區域號全部統一為其中最小的那個值,同時本像素標記也設為那個值。

2.重復1直到所有點全部掃描完成,最后可以得到一個大小和圖像一樣大的區域號map,區域號map的值是圖像中對應位置的像素所在的區域號。

這樣下來,經過一遍掃描之后,各個連通域的區域號已經設定出來,但是會出現不是區域號1,2,3,4,5。。。這樣,而可能是1,3,4,6,9。。。這樣。??時間復雜度上是O(n^2),n為圖像像素的個數。

當然這種算法跑下來時間很久,一張640*480的圖需要3分鐘(當然是matlab我內部還有許多其他的判定和執行過程)。

想法二:

當然不能就此就這樣了,我需要跑200多張圖片,一張3分鐘。。。所以得改進,重新看了維基百科和一部分介紹二值圖像連通域標記算法的論文,發現原來他們講的是掃描兩遍的思想,于是借鑒了他們的想法:

1.還是從上至下逐行掃描,如果遇到想法一里面的(1)(2)兩種情況,方法不變,如果遇到第三種情況,不像想法一中那樣傻傻的再掃描一次統一賦值,而是把這些鄰居的區域號碼作為一個對記錄到等價關系表equal中,equal(i)=【xi?yi】表明區域號為xi,yi的區域是在同一片連通域中,并且在等價表中第i行。那么這里時間復雜度是O(n),

2.把等價關系表先簡化,除去重復的部分,再從表做樹形檢索:

從表的equal(1)開始,在表中搜索滿足x1∈equal(i)或者y1∈equal(i)的i的集合,再對集合中每一個i繼續做檢索直到表中和x1,y1有等價關系的區域號全部被找到。記錄下這些區域號,把這些區域號對應的像素,全部統一,從表中刪去這些對。重復對表做這樣的樹形檢索,直到每一對都被掃描到,表最后為空,結束,這里的時間復雜度又是O(n),但是用到遞歸調用,會占據大量的空間,matlab跑竟然報out?of?memory=?=。

想法三:

http://www.cnblogs.com/tiandsp/archive/2012/12/06/2804922.html

這個是網上看到的,同樣是兩步計算,大同小異,但是比傳統的兩步標記簡單一些,不是等價對,而是等價序列,遞歸的過程更簡單清楚,里面關于算法里面并查集?的介紹很好

想法四:

C:http://blog.stevenwang.name/connected-component-labeling-rg-545001.html

Matlab:http://www.cnblogs.com/tiandsp/archive/2012/12/06/2805276.html

同樣是這位老兄推薦的別人的方法,區域生長法,簡單高效,O(n)復雜度,實測很快

最后還是借鑒的想法四的思想,畢竟速度快,看來以后得多看一些算法方面的書了。

轉載于:https://www.cnblogs.com/jugg1024/p/4204970.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259544.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259544.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259544.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

lightoj 1214

lightoj 1214 Large Division (大數除法) 鏈接:http://www.lightoj.com/volume_showproblem.php?problem1214 題意:給定 a, b 兩個數,判斷 a 是否整除 b 。(a 為 大數) 思路&#…

二階振蕩衰減 matlab,基于Matlab/Simulink的二階控制系統仿真研究

1 二階控制系統模型本文引用地址:http://www.eepw.com.cn/article/201612/328597.htm能夠用二階微分方程描述的系統稱為二階控制系統。在控制工程實踐中,二階控制系統十分常見,例如,電樞控制的直流電動機,RLC網絡和彈簧…

CCF201409-5 拼圖(30分)

試題編號: 201409-5 試題名稱: 拼圖 時間限制: 3.0s 內存限制: 256.0MB 問題描述: 問題描述給出一個nm的方格圖,現在要用如下L型的積木拼到這個圖中,使得方格圖正好被拼滿,請問總共有…

歐幾里得算法(即輾轉相除法)的時間復雜度

本文是參考新浪博客而寫。 歐幾里得算法, 又稱輾轉相除法, 用于求兩個自然數的最大公約數. 算法的思想很簡單, 基于下面的數論等式 gcd(a, b) gcd(b, a mod b) 其中gcd(a, b)表示a和b的最大公約數, mod是模運算, 即求a除以b的余數. 代碼如下: #include <iostream> #i…

UIImageJPEGRepresentation和UIImagePNGRepresentation

在Iphone上有兩種讀取圖片數據的簡單方法: UIImageJPEGRepresentation和UIImagePNGRepresentation. UIImageJPEGRepresentation函數需要兩個參數:圖片的引用和壓縮系數.而UIImagePNGRepresentation只需要圖片引用作為參數.通過在實際使用過程中,比較發現: UIImagePNGRepresenta…

C++ 0x

轉載于:https://www.cnblogs.com/iiiDragon/p/3230006.html

系列文章----.Net程序員學用Oracle系列

.Net程序員學用Oracle系列(18)&#xff1a;PLSQL Developer 攻略.Net程序員學用Oracle系列(17)&#xff1a;數據庫管理工具(SQL Plus).Net程序員學用Oracle系列(16)&#xff1a;訪問數據庫(ODP.NET).Net程序員學用Oracle系列(15)&#xff1a;DUAL、ROWID、NULL.Net程序員學用Or…

Github for Windows使用介紹

Git已經變得非常流行&#xff0c;連Codeplex現在也已經主推Git。Github上更是充斥著各種高質量的開源項目&#xff0c;比如ruby on rails&#xff0c;cocos2d等等。對于習慣Windows圖形界面的程序員來講&#xff0c;Github的使用是需要點時間和耐心的&#xff0c;然而最近Githu…

matlab中udt函數,《MATLAB信號處理超級學習手冊》——2.5 離散時間信號中的運算...

本節書摘來自異步社區《MATLAB信號處理超級學習手冊》一書中的第2章&#xff0c;第2.5節&#xff0c;作者&#xff1a;MATLAB技術聯盟 , 史潔玉著&#xff0c;更多章節內容可以訪問云棲社區“異步社區”公眾號查看2.5 離散時間信號中的運算MATLAB信號處理超級學習手冊2.5.1 離散…

iOS 將16進制顏色轉換成UIColor

很多地方我們都使用16進制顏色&#xff0c;但iPhone使用的是UIColor對象&#xff0c;不直接支持16進制顏色&#xff0c;為此&#xff0c;需要我們手動將16進制顏色轉換為UIColor - (UIColor *) hexStringToColor: (NSString *) stringToConvert {NSString *cString [[stringTo…

OBJ 文件格式

OBJ文件是一種標準的3D模型文件格式&#xff0c;很適合用于3D軟件模型之間的互導。比如在3dsMax或LightWave中建了一個模型&#xff0c;想把它調到Maya里面渲染或動畫&#xff0c;導出OBJ文件就是一種很好的選擇。目前幾乎所有知名的3D軟件都支持OBJ文件的讀寫&#xff0c;不過…

構建Docker鏡像(三)

作者:李曉輝聯系方式:Xiaohui_lifoxmail.comQQ:939958092一、建立Dockerfile1、準備文件新建一個目錄和一個 Dockerfilemkdir /steventouch /steven/Dockerfile2、更新Dockerfile這個步驟是在設計鏡像&#xff0c;如果你需要在鏡像內包含什么軟件&#xff0c;將來開放哪些端口&…

centos 配置php開發環境變量配置,CentOS中配置PHP和Nginx環境變量

搜索熱詞一、摘要在Linux CentOS系統上 安裝完PHP和Nginx后&#xff0c;一般需要執行查看版本命令’PHP -v’和’Nginx -v’,確認是否安裝成功,如果在沒有添加到環境變量之前&#xff0c;執行“PHP -v”命令查看當前PHP版本信息時&#xff0c;則會提示命令不存在的錯誤&#xf…

你必須很努力,才能看上去毫不費力

世上沒有一件工作不辛苦&#xff0c;沒有一處人事不復雜。 從今天起&#xff0c;每天微笑吧&#xff0c; 世上除了生死&#xff0c;都是小事。 不管遇到了什么煩心事&#xff0c;都不要自己為難自己&#xff1b; 無論今天發生多么糟糕的事&#xff0c;都不應該感到悲傷。 今天是…

HDU 4631 Sad Love Story 平面內最近點對

http://acm.hdu.edu.cn/showproblem.php?pid4631 題意: 在平面內依次加點,求每次加點后最近點對距離平方的和 因為是找平面最近點對...所以加點以后這個最短距離一定是遞減的...所以最后會形成這樣一個函數圖像 所以我們只要從后往前依次刪點即可... 15秒驚險水過...不過我最小…

c++三/五法則

如果這個類需要一個析構函數&#xff0c;我們幾乎可以肯定它也需要一個拷貝構造函數和一個拷貝賦值運算符。 如果一個類需要拷貝構造函數&#xff0c;幾乎可以肯定它也需要一個拷貝賦值運算符&#xff0c;反之亦然。 然而&#xff0c;無論是需要拷貝構造函數還是需要拷貝賦值運…

itoa的用法

功能&#xff1a;將任意類型的整數轉換為字符串。在<stdlib.h>中與之有相反功能的函數是atoi。 用法&#xff1a;char*itoa(int value,char*string,int radix); int value 被轉換的整數&#xff0c;char *string 轉換后儲存的字符數組&#xff0c;int radix 轉換進制數…

Tomcat與Gzip與緩存

國內私募機構九鼎控股打造APP&#xff0c;來就送 20元現金領取地址&#xff1a;http://jdb.jiudingcapital.com/phone.html內部邀請碼&#xff1a;C8E245J &#xff08;不寫邀請碼&#xff0c;沒有現金送&#xff09;國內私募機構九鼎控股打造&#xff0c;九鼎投資是在全國股份…

java豎向菜單,垂直滑動菜單

www.lanrentuku.comtd {font-size: 12px;}width"200" />height9 src"images/bit05.gif" width8alignabsMiddle> href"javascript:void(null)">文管產品 src"images/bit06.gif" width8 alignabsMiddle> href"http://w…

作為IT從業者,你是如何做好個人職業規劃?

前言 寫這篇文章的原因是因為你前端時間看到朋友在公眾號&#xff08;Marno&#xff09;發的一篇文章《27歲程序員職業生涯的“中年危機”》有感而發&#xff0c;談談自己對IT從業人員的一些職業規劃上的想法。本篇文章是我在坐地鐵的時候在手機上碼出來的&#xff0c;寫的不好…