【数学建模】碎纸片的拼接复原

2013高教社杯全国大学生数学建模竞赛B题

问题一

已知 d i d_i di为第 i i i张图片图片的像素矩阵

已知 d i d_i di都是 n ∗ m n*m n∗m二维矩阵

假设有 N N N张图片

模型一

我们认为对应位置像素匹配为
d i [ j ] [ 1 ] = d k [ j ] [ m ] d_i[j][1]=d_k[j][m] di[j][1]=dk[j][m]

那么就有

图片之间匹配度数组
A [ i ] [ k ] = ∑ j = 1 m d i [ j ] [ 1 ] = d k [ j ] [ m ] A[i][k] = \displaystyle\sum_{j=1}^m d_i[j][1]=d_k[j][m] A[i][k]=j=1∑mdi[j][1]=dk[j][m]

其中 A [ i ] [ k ] A[i][k] A[i][k]表示第 i i i张图片放在第 k k k图片后面 的匹配度

建立模型:

目标是总匹配度最大

设立0/1变量 x i j = 1 x_{ij}=1 xij=1表示选择第 i i i张在第 j j j张后面,并且 A [ i ] [ j ] A[i][j] A[i][j]表示为 A i j A_{ij} Aij

已知起始图片为 a a a,终止图片为 b b b
{ max ⁡ ∑ i = 1 N ∑ j = 1 N x i j A i j ∑ j = 1 N x i j = 1 , i = a , i = j ∑ i = 1 N x i j = 1 , j = b , j = i i = 1 , . . . , N , j = 1 , . . . , N \begin{cases} \max \displaystyle\sum_{i=1}^N \displaystyle\sum_{j=1}^N x_{ij}A_{ij}\\ \displaystyle\sum_{j=1}^N x_{ij} = 1 , i \cancel{=} a , i \cancel{=} j \\ \displaystyle\sum_{i=1}^N x_{ij} = 1 , j \cancel{=} b , j \cancel{=} i \\ i = 1,...,N , j = 1,...,N \end{cases} ⎩ ⎨ ⎧maxi=1∑Nj=1∑NxijAijj=1∑Nxij=1,i= a,i= ji=1∑Nxij=1,j= b,j= ii=1,...,N,j=1,...,N

模型二

我们认为对应位置像素匹配不成功的差异为
∣ d i [ j ] [ 1 ] − d k [ j ] [ m ] ∣ |d_i[j][1]-d_k[j][m]| ∣di[j][1]−dk[j][m]∣

那么就有

图片之间差异度数组
A [ i ] [ k ] = ∑ j = 1 m ∣ d i [ j ] [ 1 ] − d k [ j ] [ m ] ∣ A[i][k] = \displaystyle\sum_{j=1}^m |d_i[j][1]-d_k[j][m]| A[i][k]=j=1∑m∣di[j][1]−dk[j][m]∣

其中 A [ i ] [ k ] A[i][k] A[i][k]表示第 k k k张图片放在第 i i i图片后面 的差异度

建立模型:

目标是总差异度最小

设立0/1变量 x i j = 1 x_{ij}=1 xij=1表示选择第 j j j张在第 i i i张后面,并且 A [ i ] [ j ] A[i][j] A[i][j]表示为 A i j A_{ij} Aij

已知起始图片为 a a a,终止图片为 b b b

得到目标 min ⁡ ∑ i = 1 N ∑ j = 1 N x i j A i j \min \displaystyle\sum_{i=1}^N \displaystyle\sum_{j=1}^N x_{ij}A_{ij} mini=1∑Nj=1∑NxijAij

要保证除开起始图片,每个图片都有前一张与其对应
∑ i = 1 N x i j = 1 , j = a \displaystyle\sum_{i=1}^N x_{ij} = 1 , j \cancel{=} a i=1∑Nxij=1,j= a

同时除开终止图片也是,要有后一张与其对应
∑ j = 1 N x i j = 1 , i = b \displaystyle\sum_{j=1}^N x_{ij} = 1 , i \cancel{=} b j=1∑Nxij=1,i= b

条件设立思路

将其看作类似最短路问题

已知起点 a a a,终点为 b b b,图中每个节点都与其他节点有边,求从起点到终点的最短路问题,并且需要经过每一个节点!

目标依旧不变。
min ⁡ ∑ i = 1 N ∑ j = 1 N x i j A i j \min \displaystyle\sum_{i=1}^N \displaystyle\sum_{j=1}^N x_{ij}A_{ij} mini=1∑Nj=1∑NxijAij

要保证除开起始图片,每个图片都有前一张与其对应,实际上是除开起点,每个节点的入度都为1

\\displaystyle\\sum_{i=1}\^N x_{ij} = 1 , j \\cancel{=} a

同理除开终点每个节点出度为1
∑ j = 1 N x i j = 1 , i = b \displaystyle\sum_{j=1}^N x_{ij} = 1 , i \cancel{=} b j=1∑Nxij=1,i= b

避开自环存在
x i i = 0 , i = 1 , . . , N x_{ii} = 0 ,i=1,..,N xii=0,i=1,..,N

现在唯一的问题就是可能会出现,起点连几个点就到终点,其他点连成环。

目前解决办法,多次运行,如果出现上述情况,手动排除

假设 3 − > 4 − > 5 − > 6 − > 3 3->4->5->6->3 3−>4−>5−>6−>3成环了

那么 x 34 + x 45 + x 56 + x 63 = 4 x_{34}+x_{45}+x_{56}+x_{63}\cancel{=} 4 x34+x45+x56+x63= 4

所以模型如下:
A [ i ] [ k ] = ∑ j = 1 m ∣ d i [ j ] [ 1 ] − d k [ j ] [ m ] ∣ A[i][k] = \displaystyle\sum_{j=1}^m |d_i[j][1]-d_k[j][m]| A[i][k]=j=1∑m∣di[j][1]−dk[j][m]∣
{ min ⁡ ∑ i = 1 N ∑ j = 1 N x i j A i j ∑ i = 1 N x i j = 1 , j = a ∑ j = 1 N x i j = 1 , i = b i = 1 , . . . , N , j = 1 , . . . , N \begin{cases} \min \displaystyle\sum_{i=1}^N \displaystyle\sum_{j=1}^N x_{ij}A_{ij}\\ \displaystyle\sum_{i=1}^N x_{ij} = 1 , j \cancel{=} a \\ \displaystyle\sum_{j=1}^N x_{ij} = 1 , i \cancel{=} b \\ i = 1,...,N , j = 1,...,N \end{cases} ⎩ ⎨ ⎧mini=1∑Nj=1∑NxijAiji=1∑Nxij=1,j= aj=1∑Nxij=1,i= bi=1,...,N,j=1,...,N

问题求解

数据处理:

MATLAB

matlab 复制代码
d =cell(1,19);
for i = 1:19
    imageName=strcat(num2str(i-1,'%03d'),'.bmp');
    d{i}=imread(imageName);
end
a = cell(19,19);
for i = 1:19
    for j = 1:19
        sum = 0;
        for jj = 1:1980
            sum = sum + abs( double(d{i}(jj,72))-double(d{j}(jj,1)) );% j在i后面的差值
        end
        a{i,j} = sum; % 顺序是 i j
    end
end
xlswrite('D:\homewrok\建模\纸片\201391394826489\2013年全国大学生数学建模竞赛B题附件\附件1\a.xls', a);

lingo

lingo 复制代码
sets:
 aa/1..19/:;
 cc(aa,aa):x,d;
endsets
data:
 a = 9;
 b = 7;
 d = @ole('D:\homewrok\建模\纸片\201391394826489\2013年全国大学生数学建模竞赛B题附件\附件1\a.xls','A1:S19');
enddata
min = @sum(cc(i,j):x(i,j)*d(i,j));
@for(aa(i)|(i#ne#b):@sum(aa(j):x(i,j))=1);
@for(aa(j)|(j#ne#a):@sum(aa(i):x(i,j))=1);
@for(cc(i,j)|(i#eq#j):x(i,j)=0);
@for(cc(i,j):@bin(x(i,j)));

@for(aa(j):x(b,j)=0);
@for(aa(i):x(i,a)=0);

第一次

text 复制代码
                       X( 1, 7)        1.000000            25661.00
                       X( 2, 5)        1.000000            33616.00
                      X( 3, 17)        1.000000            14639.00
                      X( 4, 11)        1.000000            31383.00
                       X( 5, 6)        1.000000            22300.00
                      X( 6, 10)        1.000000            24650.00
                      X( 8, 18)        1.000000            33594.00
                      X( 9, 15)        1.000000            27544.00
                     X( 10, 14)        1.000000            26131.00
                      X( 11, 3)        1.000000            22137.00
                      X( 12, 8)        1.000000            21828.00
                     X( 13, 16)        1.000000            12228.00
                     X( 14, 19)        1.000000            21352.00
                     X( 15, 13)        1.000000            18222.00
                      X( 16, 4)        1.000000            24331.00
                      X( 17, 2)        1.000000            29574.00
                      X( 18, 1)        1.000000            26993.00
                     X( 19, 12)        1.000000            27268.00

发现没有出现上面担心的问题

MATLAB

matlab 复制代码
d =cell(1,19);
for i = 1:19
    imageName=strcat(num2str(i-1,'%03d'),'.bmp');
    d{i}=imread(imageName);
end
ansd = [d{9},d{15},d{13},d{16},d{4},d{11},d{3},d{17},d{2},d{5},d{6},d{10},d{14},d{19},d{12},d{8},d{18},d{1},d{7}];
imshow(ansd);

同理做附件二:

matlab 复制代码
d =cell(1,19);
for i = 1:19
    imageName=strcat(num2str(i-1,'%03d'),'.bmp');
    d{i}=imread(imageName);
end
ansd = [d{4},d{7},d{3},d{8},d{16},d{19},d{12},d{1},d{6},d{2},d{10},d{14},d{11},d{9},d{13},d{15},d{18},d{17},d{5}];
imshow(ansd);
相关推荐
AI科技星8 小时前
《基于 1 的 N 维分形与对称统一理论》
人工智能·算法·机器学习·数学建模·数据挖掘
AI科技星11 小时前
《全域数学》第一部 数术本源 全10卷1-4级完整目录(出版定稿)
人工智能·机器学习·数学建模·数据挖掘·量子计算
AI科技星11 小时前
《全域数学》第一部·数术本源
算法·机器学习·数学建模·数据挖掘·量子计算
数模竞赛Paid answer20 小时前
2024年亚太杯APMCM数学建模大赛A题复杂场景下水下图像增强研究解题全过程文档及程序
数学建模·数据分析·亚太杯
数模竞赛Paid answer2 天前
2025年MathorCup数学建模A题汽车风阻预测解题文档与程序
算法·数学建模·mathorcup
AI科技星2 天前
人类首张【全域数学公理体系】黑洞内部结构图—基于「0-1-∞」三元本源的全维深度解析
人工智能·算法·机器学习·数学建模·数据挖掘·量子计算
数模竞赛Paid answer2 天前
2024年华数杯数学建模A题机器臂关节角路径的优化设计解题全过程文档及程序
数学建模·数据分析·华数杯
酿情师2 天前
数学建模入门:从零开始了解数学建模(保姆级入门指南)
数学建模
做cv的小昊2 天前
【TJU】应用统计学——第一周作业(1.1 数理统计的基本内容、1.2 数理统计的基本概念)
人工智能·笔记·考研·机器学习·数学建模·概率论
smppbzyc3 天前
2026华中杯数学建模A题【城市绿色物流配送调度】原创论文分享
数学建模·华中杯·2026华中杯·2026华中杯a题·华中杯数学建模竞赛·2026华中杯数学建模竞赛