欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種基于三角形的圖像輪廓匹配算法

文檔序號:6636771閱讀:587來源:國知局
一種基于三角形的圖像輪廓匹配算法
【專利摘要】本發(fā)明公開了一種基于三角形的圖像輪廓匹配算法,其包括以下步驟:在待檢索圖像的輪廓上任意選擇一點記為C;將與點C不直接相鄰的點記為A,尋找垂直AC于C點的直線,且該直線與待檢索圖像的輪廓存在交點B,構件成了對應的直角三角形ABC;如果AC大于BC,則將BC除以AC的值記為R,如果AC小于BC,則將AC除以BC的值記為R;得出最小值Rmin和最大值Rmax;預設出需要檢索圖像庫中每一個圖像的Rmin[N]的數(shù)組和Rmax[N]的數(shù)組;將待檢測圖像的最小值Rmin和最大值Rmax分別和需要檢索的圖像庫中各個圖像的Rmin[N]和Rmax[N]數(shù)組進行比對;如果同一個點的Rmin和Rmax都是匹配的,則兩幅圖像輪廓匹配。本發(fā)明的算法匹配準確度高,算法方便、簡單,計算速度快,且適用范圍廣。
【專利說明】—種基于三角形的圖像輪廓匹配算法

【技術領域】
[0001]本發(fā)明屬于圖像匹配【技術領域】,具體涉及一種基于三角形的圖像輪廓匹配算法。

【背景技術】
[0002]當人們觀察周圍環(huán)境時,首先注意到的是物體及其周圍環(huán)境的顏色、紋理、形狀和空間關系等等。形狀是物體最基本的有感覺意義的特征之一,并且具有較好的不變性。在計算機視覺的模式識別中,形狀是對目標范圍的二值圖像表示,可以看成是目標輪廓,它是用于目標識別的重要特征。在機器識別事物的過程中,經(jīng)常需要將已知圖像的輪廓與陌生圖像的輪廓全部或者部分在空間上配準,根據(jù)已知模式的形狀在一幅陌生圖像中尋找對應該模式的子形狀,這個過程就是形狀匹配。我們將已知的形狀或已知模式的形狀稱為模板,在陌生物體輪廓形狀中可能與它對應的子圖稱作該模板的潛在匹配子形狀。形狀匹配時衡量形狀見相似性的一種技術,在眾多領域得到可廣泛的應用,如文字識別、目標識別、碎片復原、基于內(nèi)容的圖像檢索和醫(yī)療診斷等。因此,開展輪廓匹配技術的研究具有重要的理論意義和實用價值。
[0003]現(xiàn)有輪廓匹配技術有以下幾種:
一、Hu 矩
Hu矩是歸一化中心矩的線性組合,其主要是使用對變換不敏感的基于區(qū)域的幾個矩。Hu.M.K在1962年提出了 7個這樣的矩,并將它們構成一組特征量,并被證明具有平移、縮放和旋轉不變性。實際上,在對圖像中物體識別的過程中,只有前兩個矩不變性保持的比較好,其他的幾個不變矩帶來的誤差比較大,有學者認為只有基于二階矩的不變矩對二維物體的描述才是真正的具有旋轉、縮放和平移不變性。由Hu矩組成的特征量對圖片進行識另O,優(yōu)點就是速度很快,缺點是識別率比較低,這一部分是由于Hu不變矩只用到低階矩(最多也就用到三階矩),對于圖像的細節(jié)未能很好的描述出來,導致對圖像的描述不夠完整。Hu不變矩一般用來識別圖像中大的物體,對于物體的形狀描述的比較好,圖像的紋理特征不能太復雜,像識別水果的形狀,或者對于車牌中的簡單字符的識別效果會相對好一些。
[0004]二、基于角點的輪廓匹配
X.C.He和Nelson.H.C.Yung提出了一種基于曲率的角點檢測方法。該方法的原理是利用圖像全局和局部的曲率特性,在提取角點時綜合考慮其影響。
[0005]由于距離和曲率具有平移、旋轉不變性,因此該方法能克服圖像間平移和旋轉的變化。但是對于不同分辨率的圖像,基于該方法提取的角點并不完全一致。這主要是由于輪廓=提取的結果難免會存在一些局部突變和毛刺現(xiàn)象,造成整個輪廓曲線的不光滑,而基于曲率的角點提取對曲線上的每一個點計算曲率,因此容易受噪聲的影響。
[0006]三、鏈碼直方圖
方向鏈碼(Freeman鏈碼)是用來表示物體輪廓的典型鏈碼表示法。一條離散曲線可以定義為Z2域內(nèi)一組數(shù)量有蒂娜的8聯(lián)通店。因此,一條數(shù)字化二值曲線可以用方向鏈碼表示相信兩像素連線的8中可能的方向值。
[0007]鏈碼法的特點:
(O計算量小,可滿足實時性要求;
(2)具有平移、尺度不變性;
(3)具有90度旋轉不變性;
(4)規(guī)格化鏈碼直方圖可以達到更好的旋轉不變性。
[0008]但鏈碼直方圖將人眼看上去相似的物體歸為一類,因此不能進行精確地識別和分類。


【發(fā)明內(nèi)容】

[0009]為了解決現(xiàn)有技術中存在的上述問題,本發(fā)明的目的是提供一種匹配準確度高,算法方便、簡單,計算速度快,且適用范圍廣的基于三角形的圖像輪廓匹配算法。
[0010]為實現(xiàn)上述目的,本發(fā)明采用的技術方案為:一種基于三角形的圖像輪廓匹配算法,其包括以下步驟:
步驟SI,在待檢索圖像的輪廓上任意選擇一點記為C ;將待檢索圖像的輪廓上任意一與點C不直接相鄰的點記為A,得到直線AC ;尋找垂直AC于C點的直線,且該直線與待檢索圖像的輪廓存在交點,將這些交點中與C點最近的點記為點B,則構件成了對應的直角三角形ABC ;如果AC大于BC,則將BC除以AC的值記為R,如果AC小于BC,則將AC除以BC的值記為R ;對于待檢測圖像輪廓上多個不同的與C不相鄰的一系列點Ai,得到對應的一系列Ri ;取出最小值Rmin和最大值Rmax ;
步驟S2,對需要檢索的圖像庫中各個圖像按照步驟SI中分方法對每一個圖像進行相同操作,圖像庫中每一個圖像得到得一個Rmin[N]的數(shù)組和Rmax[N]的數(shù)組,N為每個圖像的點數(shù);
步驟S3,將待檢測圖像的最小值Rmin和最大值Rmax分別和需要檢索的圖像庫中各個圖像的Rmin[N]和Rmax[N]數(shù)組進行比對;如果同一個點的Rmin和Rmax都是匹配的,貝Ij需要檢索的圖像庫中的該圖像與待檢測圖像中對應的直角三角形是匹配的,也即兩幅圖像輪廓匹配;如果同一個點的Rmin和Rmax不匹配,則兩幅圖像輪廓不匹配。
[0011]優(yōu)選方案,所述步驟S1、步驟S2和步驟S3為分別選擇一系列的點Ci,分別對這一系列的點Ci的R值進行匹配。采用匹配多個不同待檢測圖像的Ci和需要檢索的圖像庫中各圖像的C/點,可以進一步提高匹配的準確度。
[0012]當然,其它三角形匹配算法基本也是類似的,如果頂角不是90度,也可以選其它任意角度,如30度,45度,60度等,但90度的算法是最方便,最簡單的。
[0013]采用以上技術方案,本發(fā)明的有益效果為:
1.匹配準確度高:
因為采用的是三角形精確匹配,在不考慮實際圖像的現(xiàn)實意義,只是純圖形意義的比較情況下,對應頂點是100%完全匹配的。即使考慮這些圖像在實際生活中的各種情況,匹配精確度也在95%以上,并且可以用多點比較的辦法進一步提高匹配精確度。
[0014]2.算法復雜度低,計算和匹配速度快。
[0015]對待檢圖像的輪廓點,只需要有限幾次單重遍歷。對待庫中圖像的輪廓,只有一次雙重遍歷,而且圖像庫都是可以預先處理并保存結果數(shù)據(jù)的。而且計算直線的算法也是很簡單的兩三次乘除運算。
[0016]3.適用范圍廣:
不僅可以使用于最廣泛的日常生活圖像和視頻;也適用于大量的專業(yè)圖像如醫(yī)療圖像、衛(wèi)星圖像、遙感圖像、氣象圖像等;還實用于各種人工生成的圖像,如幾何圖形、卡通圖形,設計圖紙等等。

【專利附圖】

【附圖說明】
[0017]圖1為本發(fā)明基于三角形的圖像輪廓匹配算法的方案示意框圖。

【具體實施方式】
[0018]為使本發(fā)明的目的、技術方案和優(yōu)點更加清楚明了,下面結合【具體實施方式】并參照附圖,對本發(fā)明進一步詳細說明。應該理解,這些描述只是示例性的,而并非要限制本發(fā)明的范圍。此外,在以下說明中,省略了對公知結構和技術的描述,以避免不必要地混淆本發(fā)明的概念。
[0019]現(xiàn)在主流的計算機圖像都是像素點組成的矩陣,圖像輪廓就相當于不規(guī)則的多邊形,而多邊形在數(shù)學上可以用若干個三角形組合而成。圖像講過縮放、旋轉、鏡像等變換之后,這些組成輪廓的三角形的大小尺度可能會改變,但是其形狀和比例是不會改變的。如果我們在不同的圖像輪廓中能夠找到這些對應的形狀一致的三角形,我們認為這些對應的三角形頂點組成的輪廓是匹配的。
[0020]一種基于三角形的圖像輪廓匹配算法,其包括以下步驟:
步驟SI,運用直角三角形算法處理待檢索圖像上選擇的需要匹配的點;即在待檢索圖像的輪廓上任意選擇一點記為C;將待檢索圖像的輪廓上任意一與點C不直接相鄰的點記為A,得到直線AC ;尋找垂直AC于C點的直線,且該直線與待檢索圖像的輪廓存在交點,將這些交點中與C點最近的點記為點B,則構件成了對應的直角三角形ABC ;如果AC大于BC,則將BC除以AC的值記為R,如果AC小于BC,則將AC除以BC的值記為R ;對于待檢測圖像輪廓上多個不同的與C不相鄰的一系列點Ai,得到對應的一系列Ri ;取出最小值Rmin和最大值Rmax ;
步驟S2,運用直角三角形算法處理需要檢索的圖像庫中各個圖像的輪廓指定點;即對需要檢索的圖像庫中各個圖像按照步驟SI中分方法對每一個圖像進行相同操作,圖像庫中每一個圖像得到得一個Rmin [N]的數(shù)組和Rmax [N]的數(shù)組,N為每個圖像的點數(shù);
步驟S3,將每一個待匹配的點的Rmin和Rmax在對應的Rmin[N]和Rmax[N]數(shù)組中尋找匹配項;即將待檢測圖像的最小值Rmin和最大值Rmax分別和需要檢索的圖像庫中各個圖像的Rmin[N]和Rmax[N]數(shù)組進行比對;如果同一個點的Rmin和Rmax都是匹配的,貝Ij需要檢索的圖像庫中的該圖像與待檢測圖像中對應的直角三角形是匹配的,也即兩幅圖像輪廓匹配;如果同一個點的Rmin和Rmax不匹配,則兩幅圖像輪廓不匹配。
[0021 ] 為進一步提高匹配的準確度,所述步驟S1、步驟S2和步驟S3為分別選擇一系列的點Ci,分別對這一系列的點Ci的R值進行匹配。匹配多個不同待檢測圖像的Ci和需要檢索的圖像庫中各圖像的C/點,提高了匹配的準確度。
[0022]當然,其它三角形匹配算法基本也是類似的,如果頂角不是90度,也可以選其它任意角度,如30度,45度,60度等,但90度的算法是最方便,最簡單的。
[0023]為了進一步說明本發(fā)明,以下提供了基于標準C++的參考實現(xiàn),當然其常用的開發(fā)環(huán)境可以是:如windows平臺下的visual stud1; linux/unix平臺下的gcc/g++等都可編譯通過。而且其它編程語言和系統(tǒng)平臺也可以輕易移植。本實施例的C++詳見見下面的代碼內(nèi)容。
[0024]typedef struct _tagPhRat1
{ double rmin;
double rmax;
}PHRA1;
//交換數(shù)值,保持X〈 y
void swap (double x,double y)
{ double t;
if(x > y)
{t = y;y = x;x = t;}
}
double Distance (int xl,int yl,int x2,int y2)
{ return sqrt ((xl~x2)^(xl~x2) + (yl-y2)^(yl-y2));
}
//在輪廓圖上掃描輪廓點
int ScanEdgePoints(IMAGED img, P0INT*& edgepoints)
{ int col = 0, row = 0;
int nEdgePointCount = 0;
for (row=0; row < img->height; row++)
{ for (col=0; col< img->width; col++)
{ //判斷是否為輪廓點
if(img->imageData[row * img->widthStep + col] > 0 )
nEdgePointCount ++;

}
}
if (nEdgePointCount == 0) return 0;
edgepoints = new POINT[nEdgePointCount];
assert (edgepoints != 0x00);
int nlndex = 0;
for (row=0; row < img->height; row++)
{for (col=0; col< img->width; col++)
{if (img->imageData[row * img->widthStep + col] > 0 )

{ edgepoints [nlndex ].x = col;
edgepoints [nlndex ].y = row;
nlndex++;

}

}
}
return nEdgePointCount;
}
bool FindRat1(IMAGE* img, POINT* edgepoints, int nEdgePointsCount, intnPointCIndex, \

doubIe& rat1—min, doubIe& rat1—max)
{ int y = 0;
double ACWidth=Oj
double BCWidth=O;
double rat1_cur = 0;
for (int j=0; j<nEdgePointsCount; j++)
{if (nPointCIndex == j) continue;
ACWidth = Distance (edgepoints [nPointCIndex].x,edgepoints[nPointCIndex].y, \
edgepoints[j].x, edgepoints[j].y);
if (ACWidth <= I) continue; //忽略直接相鄰點
double k = 0;
if (edgepoints [ j].y != edgepoints [nPointCIndex].y)
k= (edgepoints[j].x - edgepoints[nPointCIndex].x) / \
(edgepoints[j].y - edgepoints[nPointCIndex].y);
//直線BC的方程
y = ο;
for (int x=edgepoints [nPointCIndex].x -1; x > 0; x—)
{y = int ( _k 木(x - edgepoints [nPointCIndex].x) - edgepoints[nPointCIndex].y);
if(y>0 I I y < -1mg ->height) continue; //超過范圍了,沒有交點
if(img->imageData[ (-y) * img->widthStep + x] > 0 )

{BCWidth = Distance (edgepoints [nPointCIndex].x, edgepoints[nPointCIndex].y, \
x, -y);

swap (ACWidth, BCWidth); // 使 ACWidth < BCWidth
rat1—cur = ACWidth / BCWidth;

if (rat1—min >= rat1_cur) rat1—min = rat1_cur;
if (rat1—max <= rat1_cur) rat1—max = rat1_cur;
break; //找到直線BC和輪廓的交點了,退出

}

}
//直線BC’的方程
y = O;
for (int X = edgepoints [nPointCIndex].x +1; x < img->width; x++)

{

y = int ( _k 木(x - edgepoints [nPointCIndex].x) - edgepoints[nPointCIndex].y);
if(y>0 I I y< -1mg->height) continue; //超過范圍了,沒有交點
if(img->imageData[ (-y) * img->widthStep + x] > 0 )

{

BCWidth = Distance (edgepoints [nPointCIndex].x, edgepoints[nPointCIndex].y, \
x, -y);
swap(ACWidth, BCWidth); // 使 ACWidth < BCWidth
rat1—cur = ACWidth / BCWidth;
if (rat1—min >= rat1_cur) rat1—min = rat1_cur;
if (rat1—max <= rat1_cur) rat1—max = rat1_cur;
break; //找到直線BC’和輪廓的交點了,退出

}

}
}
return true;
}
bool TriangleMatch(IMAGE* libimg, IMAGE* targetimg)
{
POINT* edgepoints = OxOO;
int nEdgePointCount = ScanEdgePoints(libimg, edgepoints);
if (nEdgePointCount <=0) return false;
//對圖像庫中某個圖像進行處理
PHRA1* rat1—array = new PHRA1[nEdgePointCount];
memset(rat1_array, 0,sizeof (rat1_array));
for (int i=0; i< nEdgePointCount; i++)
{ double rat1—max = 0;
double rat1—min = 10000;
if(FindRat1 (libimg, edgepoints, nEdgePointCount, i,rat1—min,
rat1—max))
{ rat1_array [i].rmin = rat1—min;
rat1_array [i].rmax = rat1—max;

}

} //對待比較圖像進行處理 POINT* edgepoints—t = OxOO;
int nEdgePointCount_t = ScanEdgePoints (targetimg,edgepoints_t);
if (nEdgePointCount—t <=0) return false;
double rat1—max_t = 0;
double rat1—min_t = 10000;
if (FindRat1(targetimg, edgepoints_t,nEdgePointCount_t, 0,rat1—min_t,rat1—max_t))
//比較rat1的值,可以比較待比較圖像上目標輪廓上的多個點已提高準確程度。
for (int k = 0; k<nEdgePointCount; k++)
{if ((abs (rat1—min_t - rat1_array [k].rmin)<=( rat1—min_t * 0.05))
&&\
(abs (rat1—max_t - rat1_array [k].rmax)<=( rat1—max_t ^0.05)))
{ delete rat1_array;
return true;

}
}
delete rat1_array;
return false;
}//TriagleMatch
應當理解的是,本發(fā)明的上述【具體實施方式】僅僅用于示例性說明或解釋本發(fā)明的原理,而不構成對本發(fā)明的限制。因此,在不偏離本發(fā)明的精神和范圍的情況下所做的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。此外,本發(fā)明所附權利要求旨在涵蓋落入所附權利要求范圍和邊界、或者這種范圍和邊界的等同形式內(nèi)的全部變化和修改例。
【權利要求】
1.一種基于三角形的圖像輪廓匹配算法,其包括以下步驟: 步驟SI,在待檢索圖像的輪廓上任意選擇一點記為C ;將待檢索圖像的輪廓上任意一與點C不直接相鄰的點記為A,得到直線AC ;尋找垂直AC于C點的直線,且該直線與待檢索圖像的輪廓存在交點,將這些交點中與C點最近的點記為點B,則構件成了對應的直角三角形ABC ;如果AC大于BC,則將BC除以AC的值記為R,如果AC小于BC,則將AC除以BC的值記為R ;對于待檢測圖像輪廓上多個不同的與C不相鄰的一系列點Ai,得到對應的一系列Ri ;取出最小值Rmin和最大值Rmax ; 步驟S2,對需要檢索的圖像庫中各個圖像按照步驟SI中分方法對每一個圖像進行相同操作,圖像庫中每一個圖像得到得一個Rmin[N]的數(shù)組和Rmax[N]的數(shù)組,N為每個圖像的點數(shù); 步驟S3,將待檢測圖像的最小值Rmin和最大值Rmax分別和需要檢索的圖像庫中各個圖像的Rmin[N]和Rmax[N]數(shù)組進行比對;如果同一個點的Rmin和Rmax都是匹配的,貝Ij需要檢索的圖像庫中的該圖像與待檢測圖像中對應的直角三角形是匹配的,也即兩幅圖像輪廓匹配;如果同一個點的Rmin和Rmax不匹配,則兩幅圖像輪廓不匹配。
2.根據(jù)權利要求1所述的一種基于三角形的圖像輪廓匹配算法,其特征在于,所述步驟S1、步驟S2和步驟S3為分別選擇一系列的點Ci,分別對這一系列的點Ci的R值進行匹配。
【文檔編號】G06T7/00GK104408726SQ201410716389
【公開日】2015年3月11日 申請日期:2014年12月2日 優(yōu)先權日:2014年12月2日
【發(fā)明者】許書華 申請人:上海許書華電子科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
织金县| 奉贤区| 富宁县| 卓资县| 灵台县| 罗定市| 玉溪市| 盐山县| 北安市| 沛县| 绍兴市| 玛曲县| 岳普湖县| 天气| 鄂托克前旗| 信宜市| 东山县| 泸溪县| 临沂市| 夏津县| 宜良县| 闻喜县| 宜都市| 黄大仙区| 攀枝花市| 翼城县| 凤台县| 沛县| 鲜城| 阿图什市| 页游| 钟祥市| 永和县| 滁州市| 呼玛县| 合川市| 赤水市| 平顶山市| 北辰区| 庆阳市| 灵山县|