Matlab之图片拼接

功能:可以自定义行列数拼接图片,拼接同时可以自定义对每张图片进行增(减)白边处理。

1.使用Matlab建立.m文件,具体如何建立见文章:
Matlab基础之.m文件创建及使用
2.我写了两份代码可供参考
代码一

%图片合并,可以实现将一组图片变为统一规格尺寸(默认第一张图的尺寸)
%可以自定义行列数拼合成一整张图片,若图片数不足行列乘积数则用等尺寸白色图片代替
%可以设置为每一张图片增加或减少白边

clear;
%设置行列数
row=3;%输入组合图片行数
column=3;%输入组合图片列数

%增白边
h1=10;%上下宽度

%去白边
c1=0;%上白边宽度
c2=0;%下白边宽度
c3=0;%左白边宽度
c4=0;%右白边宽度

%将图片录入数组
pictures=dir('*.jpg');%读取文件,录入结构体数组
num1=row*column;
num2=size(pictures,1);%读取图片数量
[high,wide,a]=size(imread(pictures(1).name));%读取第一张图片的尺寸
F=255*ones(high,wide,3);%创建空白图片F
for i=1:num1%将所有图片设置为与第一张图片的尺寸相同并导入四维矩阵pic
    if i<=num2
    pic(:,:,:,i)=imresize(imread(pictures(i).name),[high,wide]);
    else%若图片数目小于行列乘积数则插入空白图片F
    pic(:,:,:,i)=F;
    end
end

%增加白边
if h1~=0
top1=255*ones(h1,wide,3,num1);
right1=255*ones(high+2*h1,h1,3,num1);
pic=cat(1,top1,pic,top1);
pic=cat(2,right1,pic,right1);
end

%去除白边
cut =[c1 c2 c3 c4]; %上下左右四边需要切边的尺寸
pic=pic(cut(1)+1:end-cut(2),cut(3)+1:end-cut(4),:,:);%开始裁剪  

%合并图片
P=cell(row,column);
for i=1:num1
    P{i}=pic(:,:,:,i);
end
C=cell2mat(P);

%再增加外白边
top2=255*ones(h1,(wide+2*h1-c3-c4)*column,3);
right2=255*ones((high+2*h1-c1-c2)*row+2*h1,h1,3);
C=cat(1,top2,C,top2);
C=cat(2,right2,C,right2);

%输出图像
C=uint8(C);
imwrite(C,[int2str(cputime) '.png']);
imshow(C)

代码二

%图片合并,可以实现将一组图片变为统一规格尺寸(默认第一张图的尺寸)
%可以自定义行列数拼合成一整张图片,若图片数不足行列乘积数则用等尺寸白色图片代替
%可以设置为每一张图片增加或减少白边

clear;
clc;
%设置行列数
row=3;%输入组合图片行数
column=3;%输入组合图片列数

%设置全局变量
global h1 high wide column row c1 c2 c3 c4

%增白边
h1=0;%白边宽度

%去白边
c1=0;%上白边宽度
c2=0;%下白边宽度
c3=0;%左白边宽度
c4=0;%右白边宽度

%将图片录入元胞数组
pictures=dir('*.jpg');%读取文件,录入结构体数组
num1=row*column;
num2=size(pictures,1);%读取图片数量
[high,wide,~]=size(imread(pictures(1).name));%读取第一张图片的尺寸
F=uint8(255*ones(high,wide,3));%创建空白图片F
P=cell(row,column);
for i=1:num1
    if i<=num2
    P{i}=imresize(imread(pictures(i).name),[high,wide]);
    else%若图片数目小于行列乘积数则插入空白图片F
    P{i}=F;
    end
end

%增白边
if h1 ~= 0
    for i=1:num1
    P{i}=ADD1(P{i});
    end
end

%去白边
if c1 ~= 0 | c2 ~= 0 | c3 ~= 0 | c4 ~= 0
    for i=1:num1
    P{i}=SUB(P{i});
    end
end

%合并图片
C=cell2mat(P);

%再增加外白边
if h1 ~= 0
   C=ADD2(C);
end

%输出图像
C=uint8(C);
imwrite(C,[int2str(cputime) '.png']);
imshow(C)

%下列自定义函数可以另建.m文件存放
%自定义增白边函数1
function a2=ADD1(a)
  global h1 high wide
  top1=255*ones(h1,wide,3);
  right1=255*ones(high+2*h1,h1,3);
  a1=cat(1,top1,a,top1);
  a2=cat(2,right1,a1,right1);
end

%自定义增白边函数2
function b2=ADD2(b)
  global h1 high wide column row c1 c2 c3 c4
  top2=255*ones(h1,(wide+2*h1-c3-c4)*column,3);
  right2=255*ones((high+2*h1-c1-c2)*row+2*h1,h1,3);
  b1=cat(1,top2,b,top2);
  b2=cat(2,right2,b1,right2);
end

%自定义去白边函数
function s=SUB(a)
  global c1 c2 c3 c4
  cut =[c1 c2 c3 c4]; %上下左右四边需要切边的尺寸
  s=a(cut(1)+1:end-cut(2),cut(3)+1:end-cut(4),:,:);%开始裁剪
end

处理前
Matlab之图片拼接_第1张图片
处理后 增白边0,减白边0

处理后 增白边10,减白边0

处理后 增白边0,减白边20
Matlab之图片拼接_第2张图片
对于图片分块可见文章:Matlab之图片分块

你可能感兴趣的:(Matlab)