裁剪与复原

目录

模型假设

模型建立

模型求解


        通过建立匹配模型实现对破碎文件的拼接复原


模型假设


裁剪与复原_第1张图片


模型建立


        首先对每个图片按像素值进行二值化量化,可以得到19个1980*72的矩阵,再提取每个举证最左和最右的像素值采用绝对距离法建立像素匹配模型。

二值化是图像处理的基本技术,目的是将图像增强结果转化为黑白二值图像,从而更好地得到边缘特征线。

其原理是将所有灰度大于或者等于阈值的像素判定为特殊物体,灰度值用1表示,否者灰度值用0表示。

裁剪与复原_第2张图片


模型求解


        对英文图片进行拼接。

BW = im2bw(I,level) 将灰度图像 I 转换为二值图像 BW,方法是将输入图像中亮度大于 level 的所有像素替换为值 1(白色),将所有其他像素替换为值 0(黑色)。

此范围与图像的类的可能信号级别相关。因此,0.5 的 level 值对应于类的最小值和最大值之间的中等强度值。

BW = im2bw(X,cmap,level) 使用颜色图 cmap 将索引图像 X 转换为二值图像。

BW = im2bw(RGB,level) 将真彩色图像 RGB 转换为二值图像。

double 是 MATLAB® 中的默认数值数据类型(类),它可为大多数计算任务提供足够的精度。数值变量自动存储为 64 位(8 字节)双精度浮点值。

Y = double(X) 将 X 中的值转换为双精度。

clear
clc

%图像导入
for i=1:19
    if(i<11)
        F(:,:,i)=imread(['00',num2str(i-1),'.bmp']);
    else
        F(:,:,i)=imread(['0',num2str(i-1),'.bmp']);
    end
    %二值化
    B(:,:,i)=im2bw(F(:,:,i),250/255);
    %取首位列
    Q(:,1,i)=B(:,1,i);
    Q(:,2,i)=B(:,72,i);
end
%结果
result=zeros(19,1);

%生成全255矩阵
y=ones(1980,1);
%y=y.*255;
%找首列
% Q(:,1,i)==y
for i=1:19
    if(Q(:,1,i)==y)
        result(1)=i;%记录序号
    end
end


%找尾列

for i=1:19
    if(Q(:,2,i)==y)
        result(19)=i;%记录序号
    end
end


% 中间(17张)匹配,从首至尾的方向
 for i=1:17
     %可能情况,人为干预
%      may=zeros(19,1);
%      n=1;
     d=ones(19,1);
     d=d.*(-1);
     for j=1:19
         fg=0;
         for t=1:19
            if(j==result(t))
                fg=1;
            end
         end
         if(fg==0)
             if(i==17)
                result(i+1)=j;
                break;
             end
             r=0;%和
             for k=1:1980
                 r=r+(double(Q(k,2,result(i)))-double(Q(k,1,j)))^2;
             end
	  %欧氏距离
             d(j)=sqrt(double(r));
         end
     end
     %最小距离
     if(i~=17)
         dmax=max(d);
         for k=1:19
             if(d(k)==(-1))
                 d(k)=dmax;
             end
         end
         dmin=min(d);
         for k=1:19
             if(d(k)==dmin)
                 result(i+1)=k;
                 break;
             end
         end
     end
 end

disp('最后碎片正确序列:');
result

%图片的保存和显示
picture=[];
for i=1:19
    picture=[picture,F(:,:,result(i))];
end
imshow(picture)

裁剪与复原_第3张图片

你可能感兴趣的:(数学建模,matlab)