複製鏈接
請複製以下鏈接發送給好友

鏈碼

鎖定
鏈碼(又稱為freeman碼)是用曲線起始點的座標和邊界點方向代碼來描述曲線或邊界的方法,常被用來在圖像處理、計算機圖形學、模式識別等領域中表示曲線和區域邊界。
中文名
鏈碼
外文名
freeman code
又    稱
freeman碼
定    義
用曲線起始點的座標和邊界點方向代碼來描述曲線或邊界的方法
分    類
原鏈碼、歸一化鏈碼
應    用
圖像處理、計算機圖形學、模式識別
類    型
計算機術語

鏈碼簡介

常用的鏈碼按照中心像素點鄰接方向個數的不同,分為4連通鏈碼和8連通鏈碼。4連通鏈碼的鄰接點有4個,分別在中心點的上、下、左和右。8連通鏈碼比4連通鏈碼增加了4個斜方向,因為任意一個像素周圍均有8個鄰接點,而8連通鏈碼正好與像素點的實際情況相符,能夠準確地描述中心像素點與其鄰接點的信息。因此,8連通鏈碼的使用相對較多 [1] 
4鏈碼和8鏈碼 4鏈碼和8鏈碼

鏈碼定義

按照水平垂直和兩條對角線方向,可以為相鄰的兩個像素點定義4個方向符:0、1、2、3,分別表示0度、90度、180度和270度四個方向。同樣,也可以定義8個方向符:0、1、2、3、4、5、6、7。鏈碼就是用線段的起點加上由這幾個方向符所構成的一組數列,通常稱之為Freeman鏈碼。用Freeman鏈碼錶示曲線時需要曲線的起點,對8鏈碼而言,奇數碼和偶數碼的對應線段長度不等,規定偶數碼單位長度為1,奇數碼的單位長度為

鏈碼分類

鏈碼1、原鏈碼

邊界(曲線)起點S開始,按順時針方向觀察每一線段走向,並用相應的指向符表示,結果就形成表示該邊界(曲線)的數碼序列,稱為原鏈碼。

鏈碼2、歸一化鏈碼

原鏈碼具有平移不變性(平移時不改變指向符),但當改變起點S時,會得到不同的鏈碼錶示,即不具備唯一性。為此可引入歸一化鏈碼,其方法是:對於閉合邊界,任選一起點S得到原鏈碼,將鏈碼看作由各方向數構成的n位自然數,將該碼按一個方向循環,使其構成的n位自然數最小,此時就形成起點唯一的鏈碼,稱為歸一化鏈碼,也稱為規格化鏈碼。
給定一個從任意點開始得到的鏈碼,把它看作一個由各方向數構成的自然數。將這些方向數依一個方向循環,以使它們所構成的自然數的值最小。我們將這樣轉換後所對應的鏈碼起點作為這個邊界的歸—化鏈碼的起點。

鏈碼MATLAB應用

用鏈碼後,對象只要用起點座標周長(邊界點數)、鏈碼、對象編號,就可以描述。鏈碼一般用於一幅圖像中有多個對象的情況,對單個對象不適用。
Matlab圖像處理工具箱中,提供了專門的bwlabel( )函數,對二值圖像的進行連通分支標記(非鏈碼) [1]  。其調用格式如下:L = bwlabel(BW,n)。該函數返回一個和輸入的二值圖像BW大小相同的L矩陣,包含了標記了BW中每個連通區域的類別標籤,這些標籤的值為1、2、n(連通區域的個數)。n的值為4或8,表示是按4連通尋找區域還是8連通尋找,如果參數省略,則默認為8。
8連通邊界的鏈碼生成程序 [2] 
function out=chaincode8(image)
%功能:實現8連通鏈碼
%輸入: 二值圖像
%輸出:鏈碼的結果
n=[0 1;-1 1;-1 0;-1 -1;0 -1;1 -1;1 0;1 1];
%設置標誌
flag=1;
%初始輸出的鏈碼串為空
cc=[];
%找到起始點
[x y]=find(image==1);
x=min(x);
imx=image(x,:);
y=min(find(imx==1));
first=[x y];
dir=7;
while flag==1
tt=zeros(1,8);
newdir=mod(dir+7-mod(dir,2),8);
for i=0:7
j=mod(newdir+i,8)+1;
tt(i+1)=image(x+n(j,1),y+n(j,2));
end
d=min(find(tt==1));
dir=mod(newdir+d-1,8);
%找到下一個像素點的方向碼後補充在鏈碼的後面
cc=[cc,dir];
x=x+n(dir+1,1);y=y+n(dir+1,2);
%判別鏈碼的結束標誌
if x==first(1)&&y==first(2)
flag=0;
end
end
out=cc;
參考資料
  • 1.    劉勇奎. Freeman鏈碼壓縮算法的研究[J]. 計算機學報, 2001, 24(12):1294-1298.
  • 2.    李富裕, 李言俊, 張科. 鏈碼技術在景象圖像特徵提取中的應用[J]. 中國圖象圖形學報, 2008, 13(1):119-123.