摘 要 當遇到一張完整的圖片被切分為多個部分,一不知曉其排列順序,二又需要做復原拼接任務時,可以利用本算法來實現(xiàn)簡單的碎圖片排序和拼接,從而實現(xiàn)整張圖片的復原。因為本代碼是基于Matlab環(huán)境,所以首先你需要擁有Matlab軟件,建議使用較新版本(2010版本以上較好),本文主要用到灰度算法,來尋找兩圖之間的匹配度,具體算法思想將在正文中較為詳細的講述。
關鍵詞 Matlab 圖片拼接 灰度算法 碎圖片
一、對圖片獲取數據
假設文件夾下有19張相關聯(lián)的碎圖片,圖片格式是bmp,這19張圖片是從一張完整的圖片上切分下來的,現(xiàn)在寫出拼接代碼如下:編寫習慣好的話,我們首先都會用clc和clear來清理一下結果區(qū)。清理后我們就可以載入我們所需要的碎圖片了。首先載入每張圖的灰度數據I0=imread('000.bmp');I1=imread('001.bmp');I2=imread('002.bmp')……I16=imread('016.bmp');I17=imread('017.bmp');I18=imread('018.bmp');P={I0,I1,I2,I3,I4,I5,I6,I7,I8,I9,I10,I11,I12,I13,I14,I15,I16,I17,I18};這里總共有19張圖片,把他們存入一個數組中,方便整體引用。
二、對圖片數據的處理
考慮到圖片數據較少,可以進行少量的人為干涉,因為很容易找出第一和最后一張,所以只需要記錄一邊。首先我們記錄ar8=I8(1:end,72)第一張和a6=I6(1:end,1)最后一張,下面首先記錄剩下的所有左邊數據。a=I0(1:end,1);a1=I1(1:end,1)……a18=I18(1:end,1);a8=I8(1:end,1);下面記錄右邊所有數據ar=I0(1:end,72);ar1=I1(1:end,72)……ar18=I18(1:end,72);ar6=I6(1:end,72)然后同樣把他們分別存入對應的數組中。這樣方便調用。bl=[a,a1,a2,a3,a4,a5,a6,a7,a8,a9,a10,a11,a12,a13,a14,a15,a16,a17,a18];br=[ar,ar1,ar2,ar3,ar4,ar5,ar6,ar7,ar8,ar9,ar10,ar11,ar12,ar13,ar14,ar15,ar16,ar17,ar18];N=19;N是指的是多少張碎圖片。圖片數據處理,主要是要取出有用數據,避免過多無用的數據也別調用了。
三、核心匹配算法
核心算法的主要作用就是匹配,匹配出兩張本是相鄰的圖片。只要進行N次循環(huán),進行匹配,兩遍只差結果的絕對值之和小于一個誤差值,匹配成功,然后開啟一個記錄順序的空間,只要記錄,插入到數組中,記錄滿足條件的圖的序號,再更新最新的右邊信。然后讓首位順序排好,再多次循環(huán)匹配。for i=1:N進行N次循環(huán)對比,進行匹配。
g=double(y)-double(bl(:,i));
if(sum(abs(g))<35000)
上兩行是匹配的公式代碼;兩遍只差結果的絕對值之和小于一個誤差值,這個誤差值是可以改變的。為了記錄我們的結果,我們可以把結果寫到excel文件里,方便保存和查看。首先定義文件xlswrite('data.xls',s),在定義大小f = figure('Position',[200 200 1100 150]);接著初始化參數。
cnames = {'1','2','3','4','5','6','7','8','9','10','11','12','13','14','15','16','17','18','19'};
rnames = {'復原后順序'};
t = uitable('Parent',f,'Data',s,'ColumnName',cnames,'RowName',rnames,'Position',[20 20 1000 100])再把他們代入就可以得到結果。循環(huán)19次得到最終結果S{i}=P{s(i)+1}和M = cell2mat(S);
最后再得到的數據figure(2)和imshow(M)顯現(xiàn)成直觀二維圖,就可以對數據一目了然了。
四、算法分析
由于圖片邊緣可能存在空白和幾度相識的情況,此算法遇到這些情況是會有誤差的。所以次算法只適合,少數據單邊緣的圖片拼接處理,是不適合多邊,大數量的圖片邊緣匹配工作的。
參考文獻:
[1]任文杰.圖像邊緣檢測方法的研究[D].山東大學, 2008.
[2]宋芳莉.圖像邊緣檢測中的方法研究[D].西北大學, 2002.
[3]甘金來.圖像邊緣檢測算法的比較研究[D].電子科技大學, 2005.
[4]張晶.圖像邊緣檢測算法的研究[D].山東大學, 2006.