摘 要 一張完整的圖片被平整地切分為多個大小一樣的部分,例如碎紙機切割后碎紙片圖,在不知曉其排列順序,又需要做復(fù)原拼接任務(wù)時,可以利用本算法半自動來實現(xiàn)邊緣信息較多的碎圖片排序和拼接,從而實現(xiàn)整張圖片的復(fù)原。因為本代碼是基于Matlab環(huán)境,所以首先你需要擁有Matlab軟件,建議使用較新版本(2010版本以上較好),本文主要用到灰度算法,來尋找兩圖之間的匹配度,具體算法思想將在正文中較為詳細的講述。
關(guān)鍵詞 Matlab 平整邊緣 碎圖片拼接 灰度算法 碎紙機 碎紙片
一、自動讀取圖片信息
編寫習(xí)慣好的話,我們首先都會用clc和clear來清理一下結(jié)果區(qū)。清理后我們就可以載入我們所需要的碎圖片了。首先載入每張圖的灰度數(shù)據(jù),灰度數(shù)據(jù)在圖片處理中是很重要和經(jīng)常用到的數(shù)據(jù)。imname = dir('.\*.bmp')來讀入文件夾下的全部圖像,length(imname)是取出圖片的個數(shù),我們可以定義一下文件夾中圖像的個數(shù)。imread(imname(1).name,'bmp')來讀入第一幅圖像,如果需要可以單獨讀取任意一張圖片。下面的代碼是自動讀入全部圖像數(shù)據(jù)for a = 1:length(imname),DB(:,:,a) = imread(imname(a).name,'bmp')是用來讀取圖像數(shù)據(jù)。對數(shù)據(jù)的處理,首先我們需要完整無誤的取出,存入緩沖中,再進行處理。
二、處理每張圖邊緣數(shù)據(jù)
拼接原理主要是要邊緣匹配,我們首先要記錄每一張的最左邊邊上點的位置,再記錄每張最右邊邊上點的位置。所謂的位置指的是這一點上的灰度值,圖片取進來,會處理成點陣圖,相當(dāng)于bmp圖一樣,像素是由一個個點組成。那么我們可以先要知道邊上共有多少個點依次循環(huán)進行判斷,這樣我們就可以知道點位置的情況再記錄下來。如下面的代碼:
for j=1:im_num
n=[];
for i=1:180
if(abs(double(DB(i,1,j))-255)>1)
對邊緣每一點進行窮舉判斷,因為灰度越接近255顏色就越白,0就是黑色,這個判別式可以找出哪些點上有數(shù)據(jù)。然后n=cat(2,n,i)來記錄此點的位置ml{1,j}=n;接下來記錄每一張的右邊點位置,如下面的代碼:
for j=1:im_num
for i=1:180
if(abs(double(DB(i,end,j))-255)>1)
n=cat(2,n,i);%記錄此點的位置
end
end
mr{1,j}=n;
end
三、核心匹配算法
flength=length(f);
for i=1:N
for j=1:N
文件下第一張圖與后面每一張圖進行匹配
sum=(flength+length(ml{1,j}))/2;%計算兩邊數(shù)據(jù)點和的平均值
if(length(intersect(f,ml{1,j}))/sum>=0.75)
兩邊交集除以sum求出匹配程度,intersect是求出兩數(shù)組中的相同元素,length是求出元素個數(shù);如果兩邊相同位置處出現(xiàn)的數(shù)據(jù)情況超過一定的百分比,就可以認為兩圖匹配成功。然后記錄下圖片序號s=cat(2,s,str2num(imname(j).name(1:3)));
F=cat(2,F(xiàn),imread(imname(j).name,'bmp'));cat是連接命令,圖片數(shù)據(jù)是以矩陣排列,所以連接了兩個矩陣,就連接了兩張圖片。xlswrite('data.xls',s)是生成xls文檔記錄起復(fù)原順序,在Matlab中顯示部分拼接好的圖用imshow(F)。imwrite(uint8(F),'0.bmp');把拼接好的后的圖,保存在當(dāng)前文件夾下,這里需要進行人工干涉,后面有創(chuàng)建文件夾的代碼,需要把生成的圖片和匹配好的圖片全部剪貼到這個文件夾下,方便進行下一次的匹配。最后dirname=['首' num2str(s(1)) '尾' num2str(s(end))];新的文件夾名記錄了拼接后的首位圖片序號,方便整理a=['mkdir ' dirname];%創(chuàng)建命令system(a); %創(chuàng)建文件夾。
參考文獻:
[1]羅智中.基于線段掃描的碎紙片邊界檢測算法研究[J].儀器儀表學(xué)報, 2011(02).
[2]劉金根,吳志鵬,劉上乾,殷世民.一種基于特征區(qū)域分割的圖像拼接算法[J].西安電子科技大學(xué)學(xué)報. 2002(06).
[3]任文杰.圖像邊緣檢測方法的研究[D].山東大學(xué), 2008.
[4]甘金來.圖像邊緣檢測算法的比較研究[D]. 電子科技大學(xué), 2005.
[5]張晶.圖像邊緣檢測算法的研究[D]. 山東大學(xué), 2006.