生活随笔
收集整理的這篇文章主要介紹了
图元识别
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
圖元就是一個二值圖形中的連通域,圖元識別就是尋找圖像中的連通域。
求解策略:
通過掃描像素來識別圖元。掃描方式是逐行掃描。當掃描到一個未標記的圖元像素時,給它一個圖元標記。然后把這個圖元像素作為一個新圖元的種子,通過識別和標記所有與該種子相鄰的圖元像素,來尋找新圖元剩余的像素。
由于需要用1表示未做標記的圖元像素,所以我們采用2,3,4,5……來做圖元標記。
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();}}
}
和之前的最短距離代碼很像。
總結
以上是生活随笔為你收集整理的图元识别的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。