小图拼接大图MATLAB实现
小图拼接大图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实现的更多相关文章
- jquery层居中,点击小图查看大图,弹出层居中代码,顶部层固定不动,滚动条滚动情况
		jquery层居中,点击小图查看大图,弹出层居中代码 http://www.cnblogs.com/simpledev/p/3566280.html 见第一版,发现一个情况,如果页面内容多出一屏的情况 ... 
- 点击小图查看大图jQuery插件FancyBox魔幻灯箱
		今日发现一个不错的JQuery插件FancyBox,也许早就有这个插件了,但是没名字,我就暂且叫他魔幻灯箱吧,采用Mac系统的样式.网传主要有以下功能:■弹出的窗口有很漂亮的阴影效果.■关联的对象(就 ... 
- JQuery鼠标移到小图显示大图效果的方法
		JQuery鼠标移到小图显示大图效果的方法 本文实例讲述了JQuery鼠标移到小图显示大图效果的方法.分享给大家供大家参考.具体分析如下: 这里的显示大图功能类似上一篇<JQuery实现超链接鼠 ... 
- PHP将多张小图拼接成一张大图
		<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> < ... 
- 移动端利用iscroll实现小图变大图
		大图界面,使用iscroll,定义如下: var myScroll; function loaded(){ myScroll = new iScroll('wrapper', { zoom:true, ... 
- 2018.7.6  js实现点击事件---点击小图出现大图---时间定时器----注册表单验证
		<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8&quo ... 
- jquery层居中,点击小图查看大图,弹出层居中代码
		1.层居中 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w ... 
- html点小图看大图最快捷的方法
		方法一: <td> <a href="{$vo.show_img}" target="_blank"><img style=&qu ... 
- TexturePacker大图还原成小图工具带源码
		TexturePacker是一个把好多小图打成大图的软件,生成的是大图以及小图在大图位置的.plist描述文件,但是不支持把大图还原成小图.网上偷的图一般都是大图和plist,想得到小图比较麻烦,于是 ... 
随机推荐
- 使用Windows Live Writer开始发布cnblogs日志的方法
			1.下载Windows Live Writer http://www.microsoft.com/zh-cn/download/confirmation.aspx?id=8621 2.安装Window ... 
- SQL表操作习题5 26~35题
- linux 服务器信息查看
			写项目总结报告,需要统计需要系统的配合 1.# uname -a (Linux查看版本当前操作系统内核信息) Linux localhost.localdomain 2.4.20-8 #1 Thu ... 
- Linux守护进程的启动方法(转)
			作者: 阮一峰 日期: 2016年2月28日 "守护进程"(daemon)就是一直在后台运行的进程(daemon). 本文介绍如何将一个 Web 应用,启动为守护进程. 一.问题的 ... 
- sqlite db-journal文件产生原因及说明
			今天在Android中将sqlite的数据库文件生成在SD卡上的过程中,发现生成的.db文件的旁边 生成了一个大小为0的与数据库文件同名的.db-journal文件,不明白此文件的用途,于是 goog ... 
- [Java] 实验8
			[Java] 实验7參考代码,代码已更新.感兴趣的同学能够去学习. 1. default package问题可參考实验6 2. for, if, while等.后面包括多条语句时,须要用花括号括起来 ... 
- ASP.NET MVC学习---(一)ORM框架,EF实体数据模型简介
			现如今 对象关系映射(ORM)框架 被大量的使用于企业级应用的开发 为什么要使用ORM? ADO.NET操作数据库不好吗? 我们可以仔细想想 当我们使用ADO.NET操作数据库的时候 我们需要先获取连 ... 
- modal html
			<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- 快速构建大数据存储分析平台-ELK平台安装
			一.概述 ELK是由Elastic公司开发的Elasticsearch.Logstash.Kibana三款开源软件的缩写(但不限于这三款软件). 为什么使用ELK? 在目前流行的微服务架构中,一个大型 ... 
- Linux(Centos)——下升级python3.3
			CentOS下的Python版本一般都比较低,很多应用都需要升级python来完成.我装的centOS的默认的python版本是V2.4.3,但运行node.js需要的版本是2.5以上. 1.下载py ... 
