纵切碎纸片复原的简单实现

2013 年全国大学生数学建模竞赛(CUMCM)B题:碎纸片的拼接复原 【问题一】

问题思路

对处于纸条边缘的像素点进行取值,分割出边缘部分的像素点的值,再将不同的碎纸片的边缘灰度值相减,求出方差。通过比较方差确定纸片的匹配度,将匹配度高的组合到一起。简单解决

匹配度计算效果

代码实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
%{
dirs:碎纸图类型 <19x1 struct>
Atc:碎纸图存储,三维数组 <1980x72x19 uint8>
LengthFiles:碎纸图数量
Atc_l Atc_r:左右列向量,二维数组 <1980x19 uint8>
fzz:19*19标准差矩阵 <19x19 double>
fc_2:排列前相对最适匹配图,一维数组 <1x19 double>
fd:排列好的图,一维数组 <1x19 double>
x y:中间变量
%}

function ans = mytest(~)
dirName ='B\附件1\';
dirs=dir(strcat(dirName,'*.bmp'));

LengthFiles = length(dirs);
for x = 1:LengthFiles;
Atc(:,:,x) = imread(strcat(dirName,dirs(x).name));
y = Atc(:,:,x);
Atc_r(:,x) = y(:,1:1);
Atc_l(:,x) = y(:,end:end);
end
for x = 1:LengthFiles;
for y = 1:LengthFiles;
fzz(x,y) = std2(Atc_r(:,x)-Atc_l(:,y));
end
end
fzz(fzz==0)=100;
y=fzz';
[x,fc_2] = min(fzz);
[y,x] = min(y);
[x,fd(1)] = max(y);
for x = 2:LengthFiles;
fd(x) = fc_2(fd(x-1));
end
ans = [];
for x = 1:LengthFiles;
ans = [ans Atc(:,:,fd(x))];
end
%hold on;
imshow(ans);
end

拼接效果

拼接前

拼接后

文章目录
  1. 1. 问题思路
  2. 2. 匹配度计算效果
  3. 3. 代码实现
  4. 4. 拼接效果

20160423-matlab-1/

本页二维码