本發(fā)明涉及圖像處理技術(shù)領(lǐng)域,尤其涉及對(duì)目標(biāo)區(qū)域求取最大內(nèi)接矩形的算法及裝置。
背景技術(shù):
在機(jī)器視覺中,對(duì)目標(biāo)區(qū)域求取最大內(nèi)接矩形在工業(yè)上有越來越廣泛的應(yīng)用,開發(fā)出一種適用性廣,準(zhǔn)確率高的求最大水平內(nèi)接矩形圖像處理算法對(duì)于工業(yè)應(yīng)用意義重大。
現(xiàn)有的算法中,主要針對(duì)規(guī)則形狀求感興趣區(qū)域最大水平內(nèi)接矩,或針對(duì)非規(guī)則形狀求感興趣區(qū)域最大水平內(nèi)接矩。
對(duì)于規(guī)則形狀求水平內(nèi)接矩形比較簡(jiǎn)單,通常有數(shù)學(xué)公式可循,如圓形、十字形等。對(duì)于非規(guī)則的感興趣區(qū)域或者任意形狀感興趣區(qū)域求內(nèi)接矩形則一直是視覺領(lǐng)域一大研究難點(diǎn),現(xiàn)有算法主要針對(duì)的是凸多邊形求內(nèi)接矩形,對(duì)于凹多邊形并含有孔洞狀態(tài)下的任意多邊形求內(nèi)接矩形算法在國(guó)內(nèi)還很罕見。而工業(yè)應(yīng)用中,對(duì)有孔狀態(tài)下任意多邊形求最大內(nèi)接矩形是十分常見的應(yīng)用,如材料切割等領(lǐng)域。
現(xiàn)有常用的算法包括遍歷法及中心擴(kuò)散法,其中,遍歷法雖然對(duì)噪聲具有很強(qiáng)的魯棒性,但其適用范圍比較窄,對(duì)于凹多邊形以及帶有孔洞的多邊形無法正確求出最大內(nèi)接矩形;中心擴(kuò)散法與遍歷法相比,雖然適用范圍更廣,但其準(zhǔn)確率不高,穩(wěn)定性比較差,同時(shí),這種算法無法針對(duì)所有的凹凸多邊形,以及帶孔洞的多邊形正確求出最大內(nèi)接矩形。因此研發(fā)針對(duì)有孔狀態(tài)下的任意多邊形求最大水平內(nèi)接矩形算法是非常有必要的。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)的上述缺陷,本發(fā)明提供一種基于行程編碼的任意連通域的水平內(nèi)接矩形算法及裝置,能夠求解帶孔洞的任意多邊形的最大水平內(nèi)接矩形。
本發(fā)明所提供基于行程編碼的任意連通域的水平內(nèi)接矩形算法包括:
獲取圖像的感興趣區(qū)域;
對(duì)圖像感興趣區(qū)域進(jìn)行行程編碼;
求取編碼后感興趣區(qū)域的最大水平內(nèi)接矩形。
進(jìn)一步地,所述行程為同一行或同一列中連續(xù)像素點(diǎn)組成的一段區(qū)域,包括行行程及列行程,所述行行程以行程所在行號(hào)、行程內(nèi)連續(xù)像素點(diǎn)的起始列及終止列標(biāo)示,所述列行程以行程所在列號(hào)、行程內(nèi)連續(xù)像素點(diǎn)的起始行及終止行標(biāo)示。
進(jìn)一步地,所述對(duì)圖像感興趣區(qū)域進(jìn)行行程編碼的步驟包括:自感興趣區(qū)域的最小行最小列像素點(diǎn)開始,逐行逐列取區(qū)域內(nèi)各行程的行號(hào)、起始列及終止列,并對(duì)其進(jìn)行記錄,所述行程按照行順序依次進(jìn)行記錄,每行按照列順序依次進(jìn)行記錄;
或者,自感興趣區(qū)域的最小行最小列像素點(diǎn)開始,逐列逐行取區(qū)域內(nèi)各行程的列號(hào)、起始行及終止行,并對(duì)其進(jìn)行記錄,所述行程按照列順序依次進(jìn)行記錄,每列按照行順序依次進(jìn)行記錄。
進(jìn)一步地,所述遍歷行程,求取編碼后感興趣區(qū)域的最大水平內(nèi)接矩形的步驟包括:
取任意兩個(gè)行行程組成行程對(duì),在列方向求交,獲得列方向的交集為候選矩形的寬,兩行行程的行差為候選矩形的高;
遍歷該行程對(duì)之間的所有行行程,若候選矩形中間存在孔洞,則修正候選矩形的寬使其避開孔洞,保持候選矩形的高不變,求得修正后候選矩形的面積并保存;
窮盡所有行程對(duì),對(duì)所獲得候選矩形的面積進(jìn)行對(duì)比,取其中面積最大的一個(gè)為感興趣區(qū)域的最大水平內(nèi)接矩形;
或者:
取任意兩個(gè)列行程組成行程對(duì),在行方向求交,獲得行方向的交集為候選矩形的高,兩列行程的列差為候選矩形的寬;
遍歷該行程對(duì)之間的所有列行程,若候選矩形中間存在孔洞,則修正候選矩形的高使其避開孔洞,保持候選矩形的寬不變,求得修正后候選矩形的面積并保存;
窮盡所有行程對(duì),對(duì)所獲得候選矩形的面積進(jìn)行對(duì)比,取其中面積最大的一個(gè)為感興趣區(qū)域的最大水平內(nèi)接矩形。
進(jìn)一步地,該算法還包括步驟:
在計(jì)算機(jī)中開辟一段內(nèi)存用于對(duì)各行程進(jìn)行記錄;
若記錄過程中,所述內(nèi)存容量不夠,則重新開辟一段大于原容量的內(nèi)存;
將原有內(nèi)存中的數(shù)據(jù)復(fù)制至此段內(nèi)存中,釋放原有內(nèi)存。
本發(fā)明所提供的基于行程編碼的任意連通域的水平內(nèi)接矩形裝置,包括:
區(qū)域分割模塊,用于獲取圖像的感興趣區(qū)域;
行程編碼模塊,用于對(duì)圖像感興趣區(qū)域進(jìn)行行程編碼;
內(nèi)接矩形求取模塊,用于遍歷行程,求取編碼后感興趣區(qū)域的最大水平內(nèi)接矩形。
進(jìn)一步地,所述行程為同一行或同一列中連續(xù)像素點(diǎn)組成的一段區(qū)域,包括行行程及列行程,所述行行程以行程所在行號(hào)、行程內(nèi)連續(xù)像素點(diǎn)的起始列及終止列標(biāo)示,所述列行程以行程所在列號(hào)、行程內(nèi)連續(xù)像素點(diǎn)的起始行及終止行標(biāo)示。
進(jìn)一步地,所述行程編碼模塊自感興趣區(qū)域的最小行最小列像素點(diǎn)開始,逐行逐列取區(qū)域內(nèi)各行程的行號(hào)、起始列及終止列,并對(duì)其進(jìn)行記錄,所述行程按照行順序依次進(jìn)行記錄,每行按照列順序依次進(jìn)行記錄;或者,所述行程編碼模塊自感興趣區(qū)域的最小行最小列像素點(diǎn)開始,逐列逐行取區(qū)域內(nèi)各行程的列號(hào)、起始行及終止行,并對(duì)其進(jìn)行記錄,所述行程按照列順序依次進(jìn)行記錄,每列按照行順序依次進(jìn)行記錄。
進(jìn)一步地,所述內(nèi)接矩形求取模塊包括候選矩形求取模塊、候選矩形修復(fù)模塊及候選矩形對(duì)比模塊,其中:
所述候選矩形求取模塊,用于取任意兩個(gè)行行程組成行程對(duì),在列方向求交,獲得列方向的交集為候選矩形的寬,兩行行程的行差為候選矩形的高;
所述候選矩形修復(fù)模塊,用于遍歷該行程對(duì)之間的所有行行程,若候選矩形中間存在孔洞,則修正候選矩形的寬使其避開孔洞,保持候選矩形的高不變,求得修正后候選矩形的面積并保存;
所述候選矩形對(duì)比模塊,用于窮盡所有行程對(duì),對(duì)所獲得候選矩形的面積進(jìn)行對(duì)比,取其中面積最大的一個(gè)為感興趣區(qū)域的最大水平內(nèi)接矩形;
或者:
所述候選矩形求取模塊,用于取任意兩個(gè)列行程組成行程對(duì),在行方向求交,獲得行方向的交集為候選矩形的高,兩列行程的列差為候選矩形的寬;
所述候選矩形修復(fù)模塊,用于遍歷該行程對(duì)之間的所有列行程,若候選矩形中間存在孔洞,則修正候選矩形的高使其避開孔洞,保持候選矩形的寬不變,求得修正后候選矩形的面積并保存;
所述候選矩形對(duì)比模塊,用于窮盡所有行程對(duì),對(duì)所獲得候選矩形的面積進(jìn)行對(duì)比,取其中面積最大的一個(gè)為感興趣區(qū)域的最大水平內(nèi)接矩形。
進(jìn)一步地,所述用于對(duì)行程進(jìn)行記錄的存儲(chǔ)空間為計(jì)算機(jī)的內(nèi)存。
本發(fā)明通過對(duì)圖像的感興趣區(qū)域采用行程編碼數(shù)據(jù)結(jié)構(gòu),減少了對(duì)計(jì)算機(jī)內(nèi)存的占用量、加快了程序運(yùn)行速度;通過對(duì)感興趣區(qū)域取行程對(duì)求交集、并根據(jù)感興趣區(qū)域內(nèi)部是否存在孔洞修正該交集的方式,可以獲取具有凹、凸邊或帶有孔洞的感興趣區(qū)域內(nèi)所有可能存在的內(nèi)接矩形,通過對(duì)上述內(nèi)接矩形的對(duì)比即可獲得感興趣區(qū)域的最大內(nèi)接矩形,在工業(yè)應(yīng)用中更具有實(shí)際意義。
附圖說明
圖1是本發(fā)明對(duì)感興趣區(qū)域進(jìn)行行程編碼示意圖;
圖2(a)是本發(fā)明求取候選矩形示意圖;
圖2(b)是本發(fā)明修正候選矩形示意圖;
圖3是本發(fā)明算法流程圖;
圖4是本發(fā)明裝置示意圖。
具體實(shí)施方式
以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行詳細(xì)說明。
本發(fā)明基于行程編碼的任意連通域的水平內(nèi)接矩形算法包括以下步驟:
獲取圖像的感興趣區(qū)域;
對(duì)圖像感興趣區(qū)域進(jìn)行行程編碼;
遍歷行程,求取編碼后感興趣區(qū)域的最大水平內(nèi)接矩形。
不同灰度值的像素點(diǎn)組合在一起構(gòu)成圖像,由于像素點(diǎn)灰度值的不同使得圖像呈現(xiàn)出不同的圖案。圖像處理中一般先采用閾值分割等方法對(duì)圖像進(jìn)行分割以獲得其感興趣區(qū)域,再對(duì)感興趣區(qū)域進(jìn)行描述?,F(xiàn)有算法中對(duì)感興趣區(qū)域通常直接用像素點(diǎn)表示,如開源庫(kù)OpenCV的ROI,以8位深度的灰度圖來說,若一片感興趣區(qū)域含30萬個(gè)像素點(diǎn),則其內(nèi)存占用量為300000byte,約292KB,因此用像素點(diǎn)表示感興趣區(qū)域存在內(nèi)存占用大的弊端。而采用行程編碼方式,內(nèi)存占用量可能低至3KB,二者相差近一百倍,可見行程編碼圖像對(duì)減少程序資源的占用是非常有效的。
為了減少內(nèi)存的占用量,本發(fā)明采用行程編碼的方式來表示感興趣區(qū)域。如圖1所示,圖中每一個(gè)方格代表一個(gè)像素點(diǎn),感興趣區(qū)域100的每一行或每一列中連續(xù)像素點(diǎn)組成的一段區(qū)域?yàn)橐粋€(gè)行程,每一行或每一列均可能包含若干個(gè)行程,行程分為行行程與列行程,例如圖中的111、112分別為第一行行程、第二行行程,121為第一列行程。行行程結(jié)構(gòu)包含行程所在行號(hào)、行程內(nèi)連續(xù)像素點(diǎn)的起始列與終止列;列行程包含行程所在列號(hào)、行程內(nèi)連續(xù)像素點(diǎn)的起始行與終止行。唯一標(biāo)示一個(gè)行程需提供其行號(hào)、起始列與終止列,或列號(hào)、起始行與終止行。一個(gè)行程內(nèi)所包含像素的點(diǎn)數(shù)沒有限制,若上述行號(hào)、列號(hào)等每個(gè)分量分別用兩個(gè)字節(jié)表示,則一個(gè)行程占用6個(gè)字節(jié),每一片感興趣區(qū)域由有限個(gè)行程組成,行程數(shù)量遠(yuǎn)小于像素點(diǎn)數(shù),因此,采用行程編碼的方式表示圖像感興趣區(qū)域所占用的內(nèi)存要遠(yuǎn)低于用像素點(diǎn)表示的方式。
對(duì)圖像感興趣區(qū)域進(jìn)行行程編碼的過程,就是將感興趣區(qū)域劃分為多個(gè)行程、并對(duì)各行程予以記錄的過程,感興趣區(qū)域可以劃分為多個(gè)行行程,也可以劃分為多個(gè)列行程。參考圖3,以其劃分為多個(gè)行行程為例,該過程具體包括以下步驟:
在計(jì)算機(jī)中開辟一片內(nèi)存用以對(duì)各行程進(jìn)行記錄;
自感興趣區(qū)域的最小行最小列像素點(diǎn)開始,逐行逐列取區(qū)域內(nèi)各行程的行號(hào)、起始列及終止列,并將其保存在所開辟的內(nèi)存中;
記錄過程中,若所開辟內(nèi)存容量不夠,則重新開辟一段大于原容量的內(nèi)存,將原有內(nèi)存中的數(shù)據(jù)復(fù)制至此段內(nèi)存中,釋放原有內(nèi)存。
其中,所有行程按照行順序依次進(jìn)行記錄,每行的所有行程又按照列順序依次進(jìn)行記錄。
當(dāng)感興趣區(qū)域劃分為多個(gè)列行程時(shí),則自感興趣區(qū)域的最小行最小列像素點(diǎn)開始,逐列逐行取區(qū)域內(nèi)各行程的列號(hào)、起始行及終止行,并對(duì)其進(jìn)行記錄。其中,所有行程按照列順序依次進(jìn)行記錄,每列行程又按照行順序依次進(jìn)行記錄。
經(jīng)過上述步驟,圖像感興趣區(qū)域被編碼為行程表示方式,接下來就要通過遍歷行程的方式,對(duì)經(jīng)過行程編碼后的感興趣區(qū)域求取最大內(nèi)接矩形。以感興趣區(qū)域被劃分為多個(gè)行行程為例,求取其最大水平內(nèi)接矩形的步驟包括:
如圖2(a)所示,取任意兩個(gè)行行程113、114組成行程對(duì),對(duì)兩行行程在列方向求交,獲得列方向的交集為候選矩形的寬W1,兩行行程的行差為候選矩形的高H;
遍歷該行程對(duì)之間的所有行行程,若候選矩形中間存在孔洞,則修正候選矩形的寬為W2,如圖2(b)所示,使候選矩形避開孔洞,保持候選矩形的高不變,求得修正后候選矩形的面積并保存;
窮盡所有行程對(duì),獲得所有可能存在的候選矩形,對(duì)比其面積,取其中面積最大的一個(gè)即為感興趣區(qū)域的最大水平內(nèi)接矩形。
當(dāng)感興趣區(qū)域劃分為多個(gè)列行程時(shí),則取任意兩個(gè)列行程組成行程對(duì),對(duì)兩列行程在行方向求交,獲得行方向的交集為候選矩形的高,兩列行程的列差為候選矩形的寬;
遍歷該行程對(duì)之間的所有列行程,若候選矩形中間存在孔洞,則修正候選矩形的高,使候選矩形避開孔洞,保持候選矩形的寬不變,求得修正后候選矩形的面積并保存。
窮盡候選矩形,對(duì)其其面積,最終獲得最大水平內(nèi)接矩形。
如圖4所示,本發(fā)明基于行程編碼的任意連通域的水平內(nèi)接矩形裝置,包括:
區(qū)域分割模塊,用于獲取圖像的感興趣區(qū)域;
行程編碼模塊,用于對(duì)圖像感興趣區(qū)域進(jìn)行行程編碼;
內(nèi)接矩形求取模塊,用于遍歷行程,求取編碼后感興趣區(qū)域的最大水平內(nèi)接矩形。
其中,行程編碼模塊自感興趣區(qū)域的最小行最小列像素點(diǎn)開始,逐行逐列取區(qū)域內(nèi)各行程的行號(hào)、起始列及終止列,并對(duì)其進(jìn)行記錄,行程按照行順序依次進(jìn)行記錄,每行按照列順序依次進(jìn)行記錄;或者,行程編碼模塊自感興趣區(qū)域的最小行最小列像素點(diǎn)開始,逐列逐行取區(qū)域內(nèi)各行程的列號(hào)、起始行及終止行,并對(duì)其進(jìn)行記錄,行程按照列順序依次進(jìn)行記錄,每列按照行順序依次進(jìn)行記錄。
其中,用于對(duì)行程進(jìn)行記錄的存儲(chǔ)空間為計(jì)算機(jī)的內(nèi)存。
內(nèi)接矩形求取模塊包括候選矩形求取模塊、候選矩形修復(fù)模塊及候選矩形對(duì)比模塊,其中:
候選矩形求取模塊,用于取任意兩個(gè)行行程組成行程對(duì),對(duì)兩行行程在列方向求交,獲得列方向的交集為候選矩形的寬,兩行行程的行差為候選矩形的高;
候選矩形修復(fù)模塊,用于遍歷該行程對(duì)之間的所有行行程,若候選矩形中間存在孔洞,則修正候選矩形的寬,使候選矩形避開孔洞,保持候選矩形的高不變,求得修正后候選矩形的面積并保存;
候選矩形對(duì)比模塊,用于窮盡所有行程對(duì),獲得所有可能存在的候選矩形,對(duì)比其面積,取其中面積最大的一個(gè)為感興趣區(qū)域的最大水平內(nèi)接矩形。
或者:
候選矩形求取模塊,用于取任意兩個(gè)列行程組成行程對(duì),對(duì)兩列行程在行方向求交,獲得行方向交集為候選矩形的高,兩列行程的列差為候選矩形的寬;
候選矩形修復(fù)模塊,用于遍歷該行程對(duì)之間的所有列行程,若候選矩形中間存在孔洞,則修正候選矩形的高,使候選矩形避開孔洞,保持候選矩形的寬不變,求得修正后候選矩形的面積并保存;
候選矩形對(duì)比模塊,用于窮盡所有行程對(duì),獲得所有可能存在的候選矩形,對(duì)比其面積,取其中面積最大的一個(gè)為感興趣區(qū)域的最大水平內(nèi)接矩形。
本發(fā)明中圖像感興趣區(qū)域經(jīng)行程編碼后,表示圖像的最小單位為行程,每個(gè)行程可包含的像素點(diǎn)數(shù)無限制,因此感興趣區(qū)域的行程數(shù)必然比像素點(diǎn)數(shù)目少,與現(xiàn)有技術(shù)通過遍歷所有像素點(diǎn)獲得其最大水平內(nèi)接矩形相比,遍歷行程則變得更簡(jiǎn)單,執(zhí)行算法耗時(shí)也將減少。同時(shí),如前所述,進(jìn)行行程編碼后,內(nèi)存占用少,使得該算法更適用于對(duì)資源有一定限制的嵌入式平臺(tái)。
本發(fā)明通過對(duì)感興趣區(qū)域取行程對(duì)求交集、并根據(jù)感興趣區(qū)域內(nèi)部是否存在孔洞修正該交集、最終獲得感興趣區(qū)域內(nèi)所有可能存在的內(nèi)接矩形,并對(duì)比得出感興趣區(qū)域的最大水平內(nèi)接矩形,對(duì)于規(guī)則、凸、凹、存在孔洞等任意多邊形均能夠準(zhǔn)確求取最大水平內(nèi)接矩,解決了現(xiàn)有算法無法適用于存在孔洞的任意多邊形內(nèi)接矩形求取,應(yīng)用單一的問題,穩(wěn)定性高,能夠滿足工業(yè)現(xiàn)場(chǎng)的各種需求,促進(jìn)相關(guān)工業(yè)領(lǐng)域的智能化發(fā)展。