數學建模 碎紙片的拼接復原 灰色關聯算法


第一問:

采用灰色關聯分析(完美解決~~哈哈,調試出來了)

clc; clear; % 第一問代碼 文件名:Qusetion1.m filename = 'E:\數學建模論文\暑假數模培訓\暑假作業\2013年B題碎紙片\附件1\*.bmp' files = dir(filename); %批量載入圖像 image = cell(1, size(files, 1)) ; % 定義一個元組 for n=1:numel(files) image{n} = imread(['E:\數學建模論文\暑假數模培訓\暑假作業\2013年B題碎紙片\附件1\', files(n).name]); end [h,z] = size(image{1,1}); % 計算一張圖片矩陣的大小(行,列) % 只取最左和最右列進行灰色關聯分析 % byz 存放 n 張圖片的,最左列 (1980行, n列) for k=1:n byz(:, k) = image{1, k}(: , 1); % 將第k張圖片的最左邊一列放入矩陣byz的第k列 byy(:, k) = image{1, k}(: , z); % 將第k張圖片的最右邊一列放入矩陣byy的第k列 end %利用頁邊距尋找第一張圖片 for i=1:n % 遍歷附件1的所有圖片 sum=0; for j=1:h % 遍歷 圖片最左列 的所有行 if byz(j,i) == 255 % 計算255的個數 sum=sum+1; else break; end end if sum==h % 如果 最左列255個數和行數一樣,說明他屬於第一張圖片 f=i; end end paixu=zeros(1,n); % 定義 n列向量,用來排序 index=1; paixu(index) = f; % 選擇第一張圖片 i = f; guanliandu = ones(n, 1); rho = 0.45; % 分辨系數 while index <= n - 1 cankao = byy(:, i); byz(:, i)= nan; t = repmat(cankao, [1, n]) - byz(:,:) ; mmin = min(min(t)); mmax = max(max(t)); xishu = (mmin + rho .* mmax) ./ (t +rho .* mmax); guanliandu = mean(xishu); [gsort, ind] = sort(guanliandu, 'descend'); i = ind(1); index = index + 1; paixu(index) = i; end % 通過 系數的排序進行合成圖片,在此之前,無論用什么方法,只需要求出關於關聯系數的排序就好了 temp = image{ paixu(1) }; for i=2:n temp=[temp image{ paixu(i)} ]; %將排序好的圖片存放與temp end imshow(temp) %完整顯示整張紙片

 

方案二:采用貪心思想解決

% 第一問代碼 文件名:Qusetion1.m files = dir('E:\數學建模論文\暑假數模培訓\暑假作業\2013年B題碎紙片\附件1\*.bmp'); %批量載入圖像 image = cell(1, size(files, 1)) % 定義一個元組 for n=1:numel(files) image{n} = imread(['E:\數學建模論文\暑假數模培訓\暑假作業\2013年B題碎紙片\附件1\', files(n).name]); end [h,z] = size(image{1,1}); % 計算一張圖片矩陣的大小(行,列) % 只取最左和最右列進行灰色關聯分析 % byz 存放 n 張圖片的,最左列 (1980行, n列) for k=1:n byz(:, k) = image{1, k}(: , 1); % 將第k張圖片的最左邊一列放入矩陣byz的第k列 byy(:, k) = image{1, k}(: , z); % 將第k張圖片的最右邊一列放入矩陣byy的第k列 end %利用頁邊距尋找第一張圖片 for i=1:n % 遍歷附件1的所有圖片 sum=0; for j=1:h % 遍歷 圖片最左列 的所有行 if byz(j,i) == 255 % 計算255的個數 sum=sum+1; else break; end end if sum==h % 如果 最左列255個數和行數一樣,說明他屬於第一張圖片 f=i; end end paixu=zeros(1,n); % 定義 n列向量,用來排序 index=1; paixu(index) = f; % 選擇第一張圖片 %依據連續性模型需找匹配點 for i=2:n % n - 1 張圖片 max=0; for j=1:n % n 張圖片 sumofbp = 0; % 選取非白色點進行匹配,匹配過程中,非白色點的總數記為sumofb xishu = 0; % 用來計算 灰色關聯系數 (最大匹配率) for k = 2 : h-1 % 一張圖片(2, h-1)行 if byy(k, paixu(index)) ~= 255 %最右一列(第k行, 當前一張圖片0~18) != 255 ==> 非白色 if byz(k,j) < 255 || byz(k-1,j) < 255 || byz(k+1, j) < 255 % 最左一列(k附近三行, j張圖片) => 非白色 xishu = xishu+1; else xishu = xishu; end; end end if xishu > max max = xishu; signal = j; end end index=index+1; paixu(index)=signal; %存放排好序的圖片序號 end temp = image{ paixu(1) }; for i=2:n temp=[temp image{ paixu(i)}]; %將排序好的圖片存放與temp end imshow(temp) %完整顯示整張紙片

 

(中英文都可以復原)

第二問:(等待實現).....

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM