生活随笔
收集整理的這篇文章主要介紹了
图元识别
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
圖元就是一個(gè)二值圖形中的連通域,圖元識(shí)別就是尋找圖像中的連通域。
求解策略:
通過(guò)掃描像素來(lái)識(shí)別圖元。掃描方式是逐行掃描。當(dāng)掃描到一個(gè)未標(biāo)記的圖元像素時(shí),給它一個(gè)圖元標(biāo)記。然后把這個(gè)圖元像素作為一個(gè)新圖元的種子,通過(guò)識(shí)別和標(biāo)記所有與該種子相鄰的圖元像素,來(lái)尋找新圖元剩余的像素。
由于需要用1表示未做標(biāo)記的圖元像素,所以我們采用2,3,4,5……來(lái)做圖元標(biāo)記。
void labelComponents()
{
position offset[
4];
offset[
0]
.row=
0;offset[
0]
.col=
1;
offset[
1]
.row=
1;offset[
1]
.col=
0;
offset[
2]
.row=
0;offset[
2]
.col=-
1;
offset[
3]
.row=-
1;offset[
3]
.col=
0;
for(
int i=
0;i<=size+
1;i++)
{pixel[
0][i]=pixel[size+
1][i]=
0;pixel[i][
0]=pixel[i][size+
1]=
0;
}
int numOfNbrs=
4;
arrayQueue<position>q;
position here,nbr;
int id=
1;
for(
int r=
1;r<=size;r++)
for(
int c=
1;c<=size;c++)
if(pixel[r][c]==
1){pixel[r][c]=++
id;here
.row=r;here
.col=c;
while(
true){
for(
int i=
0;i<numOfNbrs;i++){nbr
.row=here
.row+offset[i]
.row;nbr
.row=here
.row+offset[i]
.row;
if(pixel[nbr
.row][nbr
.col]==
1){pixel[nbr
.row][nbr
.col]=
id;q
.push[nbr]}}
if(q
.empty())
break;here=q
.front();q
.pop();}}
}
和之前的最短距離代碼很像。
總結(jié)
以上是生活随笔為你收集整理的图元识别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。