纵向切开的纸片的拼接

2013 CUMCM_B

%% paper_cutting.m
clear, close all
clc
%% import pictures, and save into images{img_num}
[images, img_num, vertical_border] = import_data('.\img_data\pic1\'); % 批量读入图片, 在上上篇中写到.'
%% 求出任意一纸片的左侧和另一任意纸片的右侧的距离roads roads = zeros(img_num);
header = 0;
tailer = 0;
for i = 1 : img_num
for j = 1 : img_num
if i == j
roads(i, j) = 1000;
continue
end
roads(i, j) = sum(abs(images{i}(:, end) - images{j}(:, 1)));
if roads(i, j) == 0
header = j;
tailer = i;
end
end
end
fraction_idx = zeros(img_num, 1);
fraction_idx(1) = header;
fraction_idx(end) = tailer;
for i = 1 : img_num
if count_white_chunk(images, i, 50)
fraction_idx(2) = i;
end
end %% xiongyali method:
c = roads;
[h, w] = size(c);
c = c'; c = c(:);
Aeq = zeros(h+w, h*w);
for i = 1 : h
Aeq(i, (i-1) * w + 1 : w*i) = 1;
end
for i=1 : w
Aeq(h + i, i : w : h*w) = 1;
end
beq = ones(h+w, 1);
A = []; b = [];
[x,fval] = bintprog(c, A, b, Aeq, beq);
X = reshape(x, w, h)'; %% Get the order.
for i = 2 : img_num-1
fraction_idx(i) = find(X(fraction_idx(i-1), :) ~= 0);
end %% connect the fractions and show it.
for i = 1 : img_num
if i == 1
connected_img = images{fraction_idx(i)};
else
connected_img = [connected_img, images{fraction_idx(i)}];
end
end
figure(1);
imshow(connected_img);
imwrite(connected_img, 'saved1.png', 'png');
title('Connected fractions.');

MATLAB匹配按列碎开的纸片的更多相关文章

  1. matlab 按照某列以行为单位进行排序

    a=[2 1 3 21 44 3] 然后按照第一列进行排序 sortrows(a,1) ans = 1 4 2 1 3 2 4 3 如要逆序,可以逆序读矩阵即可

  2. Mysql正则匹配某列是否含有手机号

    SELECT COUNT(1) FROM t_user WHERE user_name REGEXP ".[1][35678][0-9]{9}."; 解释: 正则中 .的意思是所有 ...

  3. 【matlab】生成列是0-255渐变的图像

    图像大小:640×512 8位灰度图 %% 生成图像 %大小:* %类型:灰度图 %灰度值:列按照0-255渐变,故命名为column shade. clc,clear all,close all; ...

  4. oracle两表中的两列进行模糊匹配的方法

    SELECT T2.列名,T1.列名  FROM 主表 T1, 匹配表 T2    WHERE  T1.匹配列  LIKE CONCAT('%',concat(T2.匹配列,'%')); 注意:  a ...

  5. C++ 微信多开

    应用是如何判断多开 一.通过查找窗口标题或者类名来判断程序是否正在运行. 二.通过互斥对象确定程序是否运行,大多数软件都是使用CreateMutexW 判断多开的. 三.内存映射物理文件,控制多开. ...

  6. 我说MySQL联合索引遵循最左前缀匹配原则,面试官让我回去等通知

    面试官: 我看你的简历上写着精通MySQL,问你个简单的问题,MySQL联合索引有什么特性? 心想,这还不简单,这不是问到我手心里了吗? 听我给你背一遍八股文! 我: MySQL联合索引遵循最左前缀匹 ...

  7. python、matlab、c++的括号增加次序,以及图片存储方式

    1 增加次序: python:(同c++多维数组) np.zeros([2,3,4]),先是按照内存空间均分为2份,每份又均分3份,最终再细分4份            2最大份,先按左分 例子:re ...

  8. matlab学习笔记(一)单元数组

    matlab学习笔记(一)单元数组 1.floor(x) :取最小的整数 floor(3.18)=3,floor(3.98)=3 ceil(x)  :取最大的整数 ceil(3.18)=4,ceil( ...

  9. (hdu step 6.3.5)Card Game Cheater(匹配的最大数:a与b打牌,问b赢a多少次)

    称号: Card Game Cheater Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...

随机推荐

  1. 揭开Socket编程的面纱(留着自己慢慢看)

    对TCP/IP.UDP.Socket编程这些词你不会很陌生吧?随着网络技术的发展,这些词充斥着我们的耳朵.那么我想问: 1. 什么是TCP/IP.UDP?2. Socket在哪里呢?3. Socket ...

  2. (转载)IQ 16.0 SP02起支持从压缩文件直接装载数据到表中

    参考文档: http://m.blog.chinaunix.net/uid-16765068-id-4405877.htmlhttp://www.cnblogs.com/lichmama/p/4103 ...

  3. 谈谈关于PHP的代码安全相关的一些致命知识

    谈谈关于PHP的代码安全相关的一些致命知识 目标 本教程讲解如何防御最常见的安全威胁:SQL 注入.操纵 GET 和 POST 变量.缓冲区溢出攻击.跨站点脚本攻击.浏览器内的数据操纵和远程表单提交. ...

  4. Eclipse 修改 创建的Jsp的默认格式

    Eclipse 的jsp模板修改 打开 eclipse  选择 Window -- Preferences

  5. Java8 in action(1) 通过行为参数化传递代码--lambda代替策略模式

    [TOC] 猪脚:以下内容参考<Java 8 in Action> 需求 果农需要筛选苹果,可能想要绿色的,也可能想要红色的,可能想要大苹果(>150g),也可能需要红的大苹果.基于 ...

  6. POJ 2342 Anniversary party / HDU 1520 Anniversary party / URAL 1039 Anniversary party(树型动态规划)

    POJ 2342 Anniversary party / HDU 1520 Anniversary party / URAL 1039 Anniversary party(树型动态规划) Descri ...

  7. vue路由跳转时判断用户是否登录功能

    通过判断该用户是否登录过,如果没有登录则跳转到login登录路由,如果登录则正常跳转. 一丶首先在用户登录前后分别给出一个状态来标识此用户是否登录(建议用vuex): 简单用vuex表示一下,不会可以 ...

  8. 深入分析Java的内置日志API(java.util.logging)(一)

    简介   任何的软件系统,日志都是非常重要的一部分.良好统一的日志规范会大大提高应用程序的可维护性.可靠性,并进而提高开发效率,指导业务.在早期,Java工程师往往都是利用 System.err.pr ...

  9. 【WeX5学习】 后端服务之访问数据库表

    WeX5是跨段移动开发框架,将H5的标签封装成组件,实现可视化.组件化快速开发.实现一次开发,多端(iOS.安卓和微信)运行.WeX5的IDE基于Eclipse,提供了一个完全可视化.组件化.拖拽式开 ...

  10. hdu_3746: Cyclic Nacklace

    题目链接 给出一个字符串,你可以通过在首尾加入字符使其变成一个具有周期T(T>=2)的字符串,求所需加入的最少字符数. 所考察算法仍然是对next数组含义的理解 #include<cstd ...