小图拼接大图MATLAB实现

1.实现效果图

原图

效果图

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)
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. 总结不足

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

小图拼接大图MATLAB实现的更多相关文章

  1. jquery层居中,点击小图查看大图,弹出层居中代码,顶部层固定不动,滚动条滚动情况

    jquery层居中,点击小图查看大图,弹出层居中代码 http://www.cnblogs.com/simpledev/p/3566280.html 见第一版,发现一个情况,如果页面内容多出一屏的情况 ...

  2. 点击小图查看大图jQuery插件FancyBox魔幻灯箱

    今日发现一个不错的JQuery插件FancyBox,也许早就有这个插件了,但是没名字,我就暂且叫他魔幻灯箱吧,采用Mac系统的样式.网传主要有以下功能:■弹出的窗口有很漂亮的阴影效果.■关联的对象(就 ...

  3. JQuery鼠标移到小图显示大图效果的方法

    JQuery鼠标移到小图显示大图效果的方法 本文实例讲述了JQuery鼠标移到小图显示大图效果的方法.分享给大家供大家参考.具体分析如下: 这里的显示大图功能类似上一篇<JQuery实现超链接鼠 ...

  4. PHP将多张小图拼接成一张大图

    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < ...

  5. 移动端利用iscroll实现小图变大图

    大图界面,使用iscroll,定义如下: var myScroll; function loaded(){ myScroll = new iScroll('wrapper', { zoom:true, ...

  6. 2018.7.6 js实现点击事件---点击小图出现大图---时间定时器----注册表单验证

    <!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ...

  7. jquery层居中,点击小图查看大图,弹出层居中代码

    1.层居中 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ...

  8. html点小图看大图最快捷的方法

    方法一: <td> <a href="{$vo.show_img}" target="_blank"><img style=&qu ...

  9. TexturePacker大图还原成小图工具带源码

    TexturePacker是一个把好多小图打成大图的软件,生成的是大图以及小图在大图位置的.plist描述文件,但是不支持把大图还原成小图.网上偷的图一般都是大图和plist,想得到小图比较麻烦,于是 ...

随机推荐

  1. 六. 异常处理7.throw:异常的抛出

    到目前为止,你只是获取了被Java运行时系统抛出的异常.然而,程序可以用throw语句抛出明确的异常.Throw语句的通常形式如下:    throw ThrowableInstance;这里,Thr ...

  2. Delphi 实现窗体自适应调整尺寸以适应不同屏幕分辩率的显示问题

    给你一段代码,网上转的:unit uMyClassHelpers;//实现窗体自适应调整尺寸以适应不同屏幕分辩率的显示问题.//        陈小斌,2012年3月5日 interface Uses ...

  3. mtd-utils 工具的使用

    mtd_debug [root@xmos /root]# mtd_debugusage: mtd_debug info <device>       mtd_debug read < ...

  4. 最新IP地址数据库Dat格式-高性能高并发版(2019年3月)

    最新IP地址数据库->Dat  二进制文件 高性能高并发-qqzeng-ip.dat 格式 全球IP数据库-20190301-Dat 版                国内IP数据库-20190 ...

  5. paho-mqtt

    mqtt 参考: https://pypi.org/project/paho-mqtt/ https://github.com/eclipse/paho.mqtt.python #服务端 [root@ ...

  6. python 实现创建文件夹和创建日志文件

    一.实现创建文件夹和日志 #!/usr/bin/env python # -*- coding:utf-8 -*- # Author: nulige import os import datetime ...

  7. PV、UV

    1.什么是PV值 PV(page view)即页面浏览量或点击量,是衡量一个网站或网页用户访问量.具体的说,PV值就是所有访问者在24小时(0点到24点)内看了某个网站多少个页面或某个网页多少次.PV ...

  8. CentOS 7.2通过yum安装zabbix

    环境说明 系统版本    CentOS 7.2 x86_64 软件版本    yum安装zabbix 3.0.18 首先准备一台纯净的CentOS 7.2系统 1.配置zabbix源 [root@za ...

  9. Ubuntu 查看网关地址方法

    Ubuntu 查看网关地址方法 2017年01月10日 09:03:02 阅读数:3527 1. ip route show 2.route -n or netstat -rn 3.tracerout ...

  10. ITIL,是否已是昨日黄花

    首先声明自己不是ITIL方面的专家,特别是具体的规范细节,后面论述如有不当,请指正.但我为什么会提起它?主要是因为它和运维(IT服务管理)相关性太大了.早起的运维完全就是以ITIL来蓝本构建的,在当时 ...