matlab拼大图,小图拼接大图MATLAB实现

小图拼接大图MATLAB实现

1.实现效果图

原图

17e22f80756ee09b8908ee3b0a399197.png

效果图

69eda5d4403ceb2290acd3b9b93fd346.png

2.代码

files = dir(fullfile('D:\document\GitHub\homework\digital image processing\image_spider\animation\','*.jpg'));

target=imread('D:\document\GitHub\homework\digital image processing\image_spider\target.jpg');

lengthFiles = length(files);

error=0;

data=[];

for i = 1:lengthFiles;

try

Img = imread(strcat('D:\document\GitHub\homework\digital image processing\image_spider\animation\',files(i).name));%文件所在路径

%改变大小

newimg=imresize(Img,[10,10]);

%获取三分量

imager=newimg(:,:,1);

imageg=newimg(:,:,2);

imageb=newimg(:,:,3);

%统计平均值

image_r=0;

image_g=0;

image_b=0;

for m=1:10

for j=1:10

image_r=int32(image_r)+int32(imager(m,j));

image_g=int32(image_g)+int32(imager(m,j));

image_b=int32(image_b)+int32(imager(m,j));

%fprintf('i is %d image_r is %d image_g is %d image_b is %d\n',i,image_r,image_g,image_b)

end

end

fprintf('i is %d image_r is %d image_g is %d image_b is %d\n',i,image_r,image_g,image_b)

image_r=image_r/100;

image_g=image_g/100;

image_b=image_b/100;

data=[data image_r image_g image_b];

%disp(strcat('D:\document\GitHub\homework\digital image processing\image_spider\animation\',files(i).name)) %打印文件路径

%imshow(Img)

catch

disp(strcat('D:\document\GitHub\homework\digital image processing\image_spider\animation\',files(i).name)) %打印文件路径

error=error+1;

end

end

sizetarget=size(target);

x=sizetarget(1,1);

y=sizetarget(1,2);

t_image_r=0;

t_image_g=0;

t_image_b=0;

for i=1:10:x

for j=1:10:y

if (i+9>x||j+9>y)

continue;

end

for m=i:i+9

for n=j:j+9

t_image_r=int32(t_image_r)+int32(target(m,n,1));

t_image_g=int32(t_image_g)+int32(target(m,n,2));

t_image_b=int32(t_image_b)+int32(target(m,n,3));

end

end

t_image_r=t_image_r/100;

t_image_g=t_image_g/100;

t_image_b=t_image_b/100;

%fprintf('r is %d g is %d b is %d\n',t_image_r,t_image_g,t_image_b)

cha=765;

mini=1;

sizedata=size(data);

for q=1:3:sizedata(1,2)

cha1=abs(t_image_r-data(q))+abs(t_image_g-data(q+1))+abs(t_image_b-data(q+2));

if(cha1

cha=cha1;

mini=floor(q/3)+1;

end

end

%disp(mini)

Img = imread(strcat('D:\document\GitHub\homework\digital image processing\image_spider\animation\',files(mini).name));%文件所在路径

newimg=imresize(Img,[10,10]);

for q=0:9

for p=0:9

target(i+q,j+p,1)=newimg(q+1,p+1,1);

target(i+q,j+p,2)=newimg(q+1,p+1,2);

target(i+q,j+p,3)=newimg(q+1,p+1,3);

end

end

fprintf('x is %d y is %d\n',i,j)

end

end

imwrite(target,'target.jpg');

3.思路分析

第二部分思路很简单,其实就是某块像素区域rgb分量相近的图片去替换原图片中对应像素点即可。在上述代码中,我选择将其他图片先转化为10*10大小的图片,分别计算rgb三个分类的平均值,之后,用10 * 10大小的核扫描原图像,计算该块内rgb分量平均值,随后计算|r-t_r|+|g-t_g|+|b-t_b|之和,统计最小的数值,选取对应的图片像素替换原位置像素值。

4. 总结不足

从效果图中我们可以发现,其实有很多地方的颜色并不是很匹配,这个原因有两个,其中一个是备选图像库比较少,颜色单调,我的图像备选库大小是八百,从网上爬取的一个类型图片,所以可能颜色大体都是那么几种。第二个原因就是核大小的选择,选择小一点,就能显示得更像一个图像。其次,这份代码其实有点过于暴力,完全匹配每张图片耗时有点多,尤其是在备选图库非常大的时候,之后有时间再做修改~也欢迎补充建议

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值