跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

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

处理前

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

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

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

对于图片分块可见文章: Matlab之图片分块

相关文章