精华内容
下载资源
问答
  • 仿射定理
    2021-04-18 08:44:26

    【例】使用imtransform函数实现图像平面扭曲功能 transformtype = 'affine'; % 仿射变换 transformmatrix = [0.5 0 0; 0.5 1 0; 0 0 1]; % 仿射变换......

    使用 MATLAB 实现随机分形树模拟尤鸿霞 (南通纺织职业技术学院,南通,226007) ...主要技术有相似变换及仿射变换。相似变换可放大缩小甚至旋转,但 不变形;仿射变换......

    基于仿射变换的人脸对齐的实现方法_IT/计算机_专业资料。为了将人脸库中的人脸进...

    给出如下一组IFS码14】. 笔者利用MATLAB工具及这些IFS码,实现了IFS树的模拟.如表1所示. 笔者在丁永胜等人13I的研究结果的基础上,采用不同于丁永胜等人的变换......

    基于空间几何变换的人脸对齐(Matlab 内置函数实 现) 1.仿射变换在人脸对齐中, 常常会将图像进行空间几何变换, 仿射变换是其中最常用的一种空 间变换形式。可以用......

    该参数实现多次调用tformfwd功能 - 12 2.2 图像的几何变换 【例】使用imtransform函数实现图像平面扭曲功能 transformtype = 'affine'; % 仿射变换 transformmatrix......

    (3,2)=40为y方向平移距离 仿射变换平移 比例 错切 旋转 变换矩阵 示例...

    韧仿射变换 一、将坐标进行伸缩变换,实现化椭为圆 仿射变换定理一:若经过椭圆的对称中心的直线构成的直径三角形,则两条弦的斜率乘积 kAC kBC b2 a2 . 仿射变换......

    空间数据坐标变换 a0、 a1、 a2、 b0、 b1 、 b2 要实现仿射变换,需要知道不在同一直线上的3对控制点的数字化坐 标及其理论坐标值,可求得上述的6个待定参数......

    提出了一种由仿射变换关系到线性回归的3D人脸空间姿态估计方法.即跟踪到人脸特征点后,根据仿射变换关系得到人脸姿态的粗估计值,以这个粗估计值作为人脸姿态的初始值,......

    Matlab 仿真实现李 丹, 张梁斌 , 梁世斌 315100 ) ( 浙江万里学院 , 浙江 ...[3],通过图像分块方法 ,以局部的仿射变换代替全局的仿射变换 ,此即为目前分形......

    Matrix为相应的仿射变换矩阵。 A=imread('nir.bmp'); [height,width,dim]=...Canny边缘检测算法 Matlab实现 1)、基于梯度算子的边缘检测 BW=edge(I,type,......

    2009. 13. 034 基于 MATLAB 的数码相机定位研究及...为了对相机 进行标定 , 根据仿 射变换理 论 , ...41 双目定位 ; 仿射理论 ; 最小二 乘法 ; A ......

    部变 ’差按 检测 精度 和较快 的计 算速 度,是,但 这些 方法 的运 用 换两种(1 。根据实验,里采用仿射变换 的方 表)这 都涉及相 关阈值的 确定 ......

    Matrix为相应的仿射变换矩阵。 A=imread('nir.bmp'); [height,width,dim]=...Canny边缘检测算法 Matlab实现 1)、基于梯度算子的边缘检测 BW=edge(I,type,......

    基本上归一化思想是利用图像的不变矩寻找一组参数使其能够消除其他变换函数对图 像变换的影响。也就是转换成唯一的标准形式以抵抗仿射变换 图像归一化使得图像可以......

    Matrix为相应的仿射变换矩阵。 A=imread('nir.bmp'); [height,width,dim]=...Canny边缘检测算法 Matlab实现 1)、基于梯度算子的边缘检测 BW=edge(I,type,......

    Matlab7.x 图像处理 ch2_1_1:查看直方图(§2.1...(§3.2.4) ch3_2_4:生成和应用仿射变换(§3....法实现降噪 (§5.2.2) winner 滤波法实现降噪 (......

    生成和应用仿射变换(§3.2.5) ch3_2_5:findbounds 函数的...

    matlab 图像处理为什么要归一化和如何归一化 一、为什么归一化 1. 基本上归一化思想是利用图像的不变矩寻找一组参数使其能够消除其他变换函数对图像变换的影响。也......

    更多相关内容
  • Lecture.仿射函数(仿射变换).doc
  • 研究了一类具有仿射扰动性的混合单调算子,证明了不动点的存在性和唯一性,并将其应用到非线性积分方程中.
  • 即使已知非仿射非线性系统的逆存在, 利用隐函数定理求解该显式逆仍然非常困难. 为此, 针对一类不确 定块控非仿射系统, 将动态反馈、反演、神经网络和反馈线性化技术相结合, 提出一种自适应鲁棒控制器的设计方...
  • 空间仿射坐标系的平行投影问题在计算机图形识别、跟踪目标及三维实体重建中具有重要意义。通过分析广义投影公式指出了各种投影之间的内在联系,并由广义投影...应用上述充要条件可以导出其它公式及定理,如高斯定理等。
  • 针对一类单输入单输出非仿射非...利用Lyapunov稳定性定理证明运用所设计的控制器可以保证系统跟踪误差收敛,同时证明了该方案相比已有方案系统跟踪误差具有更快的收敛速度。仿真结果验证了所提控制器设计方案的有效性。
  • 得到两个全局性隐函数定理:定理1设D_1是第一可数的拓扑空间E_1的开子集.D_2是Banach空间E_2的开子集.映象f:(?)_1×(?)_2→Y(?)E关于第一变元连续且满足条件:1°|f(x,y_1)-f(x,y_2)|≤L(x)|y_2-y_1|.Ax∈(?)_1.y_1.y_...
  • 针对一类多输入多输出非仿射非线性系统,基于神经网络设计了一种自适应控制方案。该系统隐含控制输入,利用隐函数定理和伪控制概念提出了控制运算法则,采用Lyapunov方法证明了系统的稳定性。该方案采用神经网络补偿...
  • 系统的可逆性判别是非线性控制的逆系统...文中给出了仿射非线性系统可逆的秩判据定理与证明过程,提出了一种具体的求逆算法,最后,举例对算法进行了验证,通过与微分几何法和逆系统方法的比较说明了秩判据法的有效性。
  • 仿射密码(原理+代码)

    千次阅读 2022-03-15 23:11:28
    仿射密码 原理+代码

    仿射密码

    目录

    1、原理:

    2、流程图

    3、编程实现

    4、总结


    1、原理:

            仿射密码是一种单表代换的对称密码。明文中所有字母对应成数值,经过加密函数加密成新的数值,再对应到相应的字母,组成密文, 密文和明文一样经过解密函数恢复成明文。


            加密函数:E(x)=(ax+b)\mod m


            解密函数:D(x)=a^{-1}(x-b)\mod m


            其中,a与m互质,a^{-1}是a在Z_{m}群中的乘法逆元

    2、流程图

    3、编程实现

            需要解决的难点:如何编程实现求 乘法逆元 视频介绍的非常清楚。

            方法一:简单凑数

    int cnt = 26, a = 0, ainv = 0;
    cin >> a;
    int i = 1;
    while (1) {
        int temp = a * i;
        if (temp % cnt == 1) {
            ainv = i;
            break;
        }
        i++;
    }

            方法二:费马小定理

                    当m为质数时有:a^{m-1}\equiv 1\mod m   ,即有 a*a^{m-2}\equiv 1\mod m

                    所以求a的乘法逆元就是求a的m-2次方,可以通过快速幂得到,当然这种方法只能在m为质数的时候使用。

    typedef long long ll;
    ll fastPow(ll a, ll p, ll m) {
        ll ans = 1;
        a %= m;
        while (p) {
            if (p & 1)ans = (ans * a) % m;
            a = (a * a) % m;
            p >>= 1;
        }
        return ans;
    }
    ll getInv(ll a, ll m) {
        return fastPow(a, m - 2, m);
    }   

            方法三:扩展欧几里得算法

    int x, y;
    int gcd(int a, int b,int &x,int &y) {
        if (b == 0) {
            x = 1;
            y = 0;
            return a;
        }
        int g = gcd(b, a % b, x, y);
        int temp = x;
        x = y;
        y = temp - (a / b) * y;
        return g;
    }
    int getInv(int a, int m) {
        gcd(a, m, x, y);
        return (x % m + m) % m;
    }

            方法四:线性求逆元

                    这种方法同样只适用于当m为质数的情况,但是可以快速地求出从1到n(n<m)模m的乘法逆元

    int inv[MAXN];
    int getInv(int a, int m) {
        inv[1] = 1;
        for (int i = 2; i <= a; i++) {
            inv[i] = -(m / i) * inv[m % i];
            inv[i] = (inv[i] % m + m) % m;
        }
        return inv[a];
    }

            难点完美解决了,接下来开始写代码。

            具体代码如下:

            输入的明文默认小写英文字母,密文默认大写英文字母

            主函数:

    #include"affine.h"
    
    int main() {
    	while (1) {
    		show();		//菜单界面
    		keyDown();	//按键处理
    		system("pause");
    		system("cls");		
    	}
    }

            头文件affine.h

    #pragma once
    #include<cstdio>
    #include<iostream>
    #include<cstring>
    #include<Windows.h>
    using namespace std;
    void init();
    void show();
    void keyDown();
    void readFile();
    void saveFile();
    void encrypt();
    void decrypt();
    int gcd(int a, int b,int &x,int &y);
    int getInv(int a, int m);

            affine.h 的具体实现 affine.cpp

    #include "affine.h"
    string fileStr="";
    string finalStr = "";
    int a, b;
    int x, y;
    int itable[26] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25 };
    char Ctable[26] = { 'A','B','C','D','E','F','G','H','I','J','K','L','M','N' ,'O','P','Q','R','S','T' ,'U','V','W','X','Y','Z' };
    char ctable[26] = { 'a','b','c','d','e','f','g','h','i','j','k','l','m','n' ,'o','p','q','r','s','t' ,'u','v','w','x','y','z' };
    void init()//初始化
    {
    	a = 0;
    	b = 0;
    	fileStr = "";
    	finalStr = "";
    	x = 0;
    	y = 0;
    }
    void show()
    {
    	cout << "*****************仿射密码*****************" << endl;
    	cout << "\t\t1.加密文件" << endl;
    	cout << "\t\t2.解密文件" << endl;
    	cout << "\t\t3.退出" << endl;
    	cout << "******************************************" << endl;
    
    }
    
    void keyDown()//按键处理
    {
    	int userkey = 0;
    	cin >> userkey;
    	switch (userkey) {
    	case 1:
    		cout << "-----------------加密文件-----------------" << endl;
    		readFile();
    		encrypt();
    		saveFile();
    		init();
    		break;
    	case 2:
    		cout << "-----------------解密文件-----------------" << endl;
    		readFile();
    		decrypt();
    		saveFile();
    		init();
    		break;
    	case 3:
    		exit(0);
    		break;
    	}
    }
    
    void readFile()//读取文件
    {
    	cout << "请输入文件名:" << endl;
    	string fileName ;
    	cin >> fileName;
    	FILE* fp = fopen(fileName.c_str(), "r+");
    	if (fp == nullptr) {
    		cout << "未找到相关文件" << endl;
    		return;
    	}
    	else {
    		cout << "成功打开文件" << endl;
    	}
    	char ch;
    	int pos = 0;
    	while ((ch = fgetc(fp)) != EOF) {
    		fileStr+=ch;
    	}
    	cout << endl << "待处理的文件为:" << endl;
    	cout << fileStr << endl;
    	fclose(fp);
    }
    
    
    
    void saveFile()//保存文件
    {
    	string fileName;
    	cout << endl << "请输入要保存信息的文件名:" << endl;
    	cin >> fileName;
    	FILE* fp = fopen(fileName.c_str(), "w+");
    	if (fp == nullptr) {
    		cout << endl << "保存文件失败" << endl;
    		return;
    	}
    	else {
    		cout << endl << "保存成功" << endl;
    	}
    	fprintf(fp, "%s", finalStr.c_str());
    	fclose(fp);
    	
    }
    
    void encrypt()//加密文件
    {
    	cout << endl << "请输入密钥(a,b):" << endl;
    	cin >> a >> b;
    	cout << endl << "按下任意键进行加密" << endl;
    	char ch = getchar(); ch = getchar();
    	for (char ch : fileStr) {
    		if (ch == ' ') {
    			finalStr += ' ';
    		}
    		else {
    			int temp = (a * itable[ch - 'a'] + b) % 26;
    			finalStr += Ctable[temp];
    		}
    	}
    	cout << endl << "得到的密文为:" << endl;
    	cout << finalStr << endl;
    }
    
    void decrypt()//解密文件
    {
    	cout << endl << "请输入密钥(a,b):" << endl;
    	cin >> a >> b;
    	int ainv = getInv(a, 26);
    	cout << endl << a << "的乘法逆元为:" << ainv << endl;
    	cout << endl << "按下任意键进行解密" << endl;
    	char ch = getchar(); ch = getchar();
    	for (char ch : fileStr) {	
    		if (ch == ' ') {
    			finalStr += ' ';
    			continue;
    		}
    		else {
    			int temp = ainv * (itable[ch - 'A'] - b) % 26;
    			temp = (temp % 26 + 26) % 26;
    			finalStr += ctable[temp];
    		}
    	}
    
    	cout << endl << "得到的明文为:" << endl;
    	cout << finalStr << endl;
    }
    
    int gcd(int a, int b, int& x, int& y)//求最大公约数
    {
    	if (b == 0) {
    		x = 1;
    		y = 0;
    		return a;
    	}
    	int g = gcd(b, a % b, x, y);
    	int temp = x;
    	x = y;
    	y = temp - (a / b) * y;
    	return g;
    }
    
    int getInv(int a, int m)//求乘法逆元
    {
    	gcd(a, m, x, y);
    	return (x % m + m) % m;
    }

    4、总结

            仿射密码是一种比较简单的密码,明文空间一般为26个英文字母,任意两个不同的字母加密或解密后对应不用的字母,相同的字母加密或解密后对应相同的字母,所有仿射密码可以使用频率分析法破解。

            当密钥a=1时,即为凯撒密码。对于26个英文字母来说,由于要满足a与m互质,而由于\varphi (26)=12,所以对于仿射密码来说,密钥空间大小只有12*26=312,应该是比较小的。以上就是个人对仿射密码的理解。

    展开全文
  • 针对一类具有内部动态和外部扰动未知以及非对称...基于Lyapunov稳定性定理证明了闭环系统的所有信号有界且跟踪误差可渐近收敛到原点的任意小邻域内.仿真比较结果验证了所提出方法的有效性,体现了一定的工程应用价值.
  • 交错的仿射Kac模块

    2020-03-29 23:06:15
    这项工作涉及分数级仿射李代数A1... 我们还获得了Verma模块分解中出现的所有不可约A1(1)-字符的显式表达式,重新检查了Malikov-Feigin-Fuchs向量的构造,并将Fuchs-Astashkevich定理从Virasoro代数扩展到A1(1 )。
  • 仿射变换与加密

    2021-04-17 09:00:19
    前言:摘抄自wiki的关于仿射变换的定义:仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。一个对向量平移,与旋转放大缩小的仿射映射为 【1】1、移位...

    前言:

    摘抄自wiki的关于仿射变换的定义:

    仿射变换,又称仿射映射,是指在几何中,一个向量空间进行一次线性变换并接上一个平移,变换为另一个向量空间。

    一个对向量

    5477045e11b8e82fa297bdeb80a2dc03.png 平移

    3db47830111c224c9a7ee7a59a92529e.png,与旋转放大缩小

    7fc56270e7a70fa81a5935b72eacbe29.png 的仿射映射为

    d62f058e830c31d7875bc3e56f28e0d4.png 

    【1】

    1、移位加密:

    比方说:把字母表全部向右循环移1位,也就是A变成B,B变成C,... ,

    Z变成A。

    用数学一点的术语我觉得所谓“移位”就是映射吧。

    那么我们可以写出通解公式,——现在是已知明文和加密步骤,进行加密,也就是求密文。

    New = (Old + k) (mod table)

    【2】

    注释:

    New:要求的密文

    Old  :明文

    k :移位的位数

    table:这张表有多大,比方说字母表就是26个字母,table就是26.

    2、仿射变换:

    移位加密和仿射变换有啥关系呢?

    额 ,因为移位加密就是一种放射变换。。。

    首先我们在1里面的变量命名现在改一下,以便更好地认识,变成:

    y

    = (x + b)(mod m) 【3】

    是不是和【1】很像啦,可惜我们的x没有系数。。

    但是没关系,我们完全可以自己加上一个系数,把【3】变成:

    y

    = (ax + b)(mod m)   a,b为整数; 【4】

    这样已经很像了,只不过【1】里面的自变量是向量。

    但是,我们这里讨论的是一维的变换,所以不用用到2维及其以上的向量。(一维数字标记的向量就是普通的数嘛……)

    3、知道了1、2这些,我们现在的目标就是——

    "当知道一个一维的仿射变换的加密,

    a. 怎么把明文加密

    b.

    怎么把密文解密 "

    对于"a.

    怎么把明文加密",我们已经解决了,就是【4】那个公式。

    对于"b.

    怎么把密文解密"嘛,其实也不复杂。待我不快不慢地说来。

    首先由【4】我们可以得到什么?

    没错!就是 y

    ≡ (ax + b)(mod m) —— 这是明显的事实不用证明了。

    然后正视一下题目是什么:我们现在已知a,b,y,m,要求x。

    1). 左右移位一下 ,变为y-b

    ≡ (ax)(mod m) 【5】

    {为啥【5】是对的?

    首先同余式可以相加,

    即 若 a ≡ b (mod m),c ≡ d (mod m), 【*】

    那么(a +

    c) ≡ (b + d)(mod m) .

    ——同余式可以相加的证明用同余的定义就好……

    然后  y ≡ (ax +

    b)(mod m)

    -b ≡ -b (mod

    m)

    所以……

    }

    2). 已知y-b

    ≡ (ax)(mod m),x未知,求x.

    现在已知ax ≡(y-b) (mod

    m);

    {首先我们要知道 同余式可以相乘,若【*】,则 ac

    ≡ bd (mod m) .证明同样可以基于同余定义。}

    这时候我们就脑补了,如果有一个c能使得

    cax ≡ x ≡ c(y-b) (mod m)就好了!

    也就是说这个c如果能使得ca = 1或者 更宽一点的:ca ≡ 1(mod

    m).那么就解决了!

    3). 于是问题变成了:找一个c使得,ca ≡ 1(mod

    m)

    于是很容易联系到费马小定理、欧拉定理一类的。

    但是费马小定理要求m一定要是素数,这样和我们题目不符。

    所以看看欧拉定理,对 gcd(a,m) =

    1(m>1),有aΦ(m)≡ 1 (mod m)

    {Φ(m) 为欧拉函数,就是小于等于m的与m互素的正整数个数。如Φ(2) = 1

    ,Φ(6) = 2——6与{1,5}互素。}

    所以如果ca

    = aΦ(m),那么就有ca ≡ 1(mod m)。

    于是c

    = aΦ(m)-1. 但是gcd(a,m) = 1,这一点不能漏。

    4、综上,我们发现了,当c

    = aΦ(m)-1时 ;

    cax ≡c(y-b) (mod m)

    化为 x ≡c(y-b) (mod m) {现在要附加gcd(a,m)=1这个条件了!}

    5、那么对于仿射变换,

    我们知道变化规则[即位移b]后,如何把密文[y]翻译成明文[x]呢?

    结论是:

    step

    1.  求 c

    = aΦ(m)-1

    step 2.  x ≡c(y-b) (mod m)

    番外小剧场:

    窝:你在2里面为啥要改名字?该问题纯属好奇!

    big窝:此中原因有2——

    1. 如文中所说,为了更直观地比较。

    2.

    也是最根本的原因——变量命名如此之平凡,根本不是我的feel!OK?

    窝:......

    窝:第二个问题——你怎么知道同余式符合相加相乘原理?你怎么想到的?

    big窝:

    首先"同余式符合相加相乘原理"这个结论在数论里就像是实数有相加相乘的运算一样自然,如果想不到那么你需要找一本数论的书看看,不需要看完这就足以变成你的常识。至于怎么想到的,如果给你一堆数,你能想到的最基本的运算就是做加减乘除了吧?

    窝:恩……好像是的……

    big窝:那不就得了,说了同余式符合相加相乘原理是同余式的基本运算。

    窝:……哦……

    原文:http://www.cnblogs.com/PeanutPrince/p/3543723.html

    展开全文
  • 今天学习了仿射变换,将一张图片放置到另一张图片,感觉十分有趣,所以写了这篇博客,与大家一起分享一下! 一、仿射变换 1.什么是仿射变换 2.alpha通道 3.仿射变换的求解 二、仿射变换的实现 1.主函数 2....

    今天学习了仿射变换,将一张图片放置到另一张图片,感觉十分有趣,所以写了这篇博客,与大家一起分享一下!

    一、仿射变换

    1.什么是仿射变换

    2.alpha通道

    3.仿射变换的求解

    二、仿射变换的实现

    1.主函数

    2.主要函数的介绍

    一、仿射变换

    1.什么是仿射变换

    (1)放射变换的定义

    仿射变换是将一个平面的点映射到另一个平面内的二维投影。仿射变换保持了二维图形的“平直性”,即原来是直线的地方还是直线。仿射变换具有很强的实用性,比如图像配准、图像纠正和纹理纠正,以及创建全景图像等。仿射变换的效果如下图所示:

    (2)仿射变换的数学表示

    仿射变换是一种二维坐标(x, y)到二维坐标(u, v)的线性变换,其数学表达式形式如下:

    对应的齐次坐标矩阵表示形式为:

    其中,取\bg_white h_2_0\bg_white h_2_1为0,\bg_white h_2_2为1。

    坐标变换:

    实现将一张图片放置到另一张图片上去,其实就是已知XH,而H中的3个变量已知,我们只需求另外6个变量即可。

    (3)仿射变换的几何意义

    仿射变换可以理解成一系列的原子变换复合实现的,具体暴扣:平移、旋转、尺度变换等。

    a.平移

    数学形式:

    矩阵形式:

    平移变换包含两个未知量,即t_xt_y。计算两个图形的平移量,其实就是求这两个未知量。

    b.旋转

    矩阵形式:

     

    c.尺度变换

    矩阵形式:

    d.刚体运动:旋转平移缩放

    矩阵形式:

    2.alpha通道

    alpha用来衡量一个像素或图像的透明度。在非压缩的32位RGB图像中,每个像素是由四个部分组成:一个alpha通道和三个颜色分量(R、G和B)。当Alpha值为0时,该像素是完全透明的,而当Alpha值为255时,则该像素是完全不透明。 

    alpha用于图像m1经过仿射变换后,将图像m1放置到图像m2时,只有alpha大于0的区域才能放置到图像m2上,alpha为0的区域在融合的时候就变成透明了。

    3.仿射变换的求解

    (1)流程

    a.输入两张图像m1和m2

    b.设置所需要放置的区域矩阵tp

    c.获取m1的宽m和高n,并设置原图区域矩阵为fp

    d.根据fp和tp计算仿射变换参数矩阵H

    e.将m1放置到m2上去

    (2)仿射变换参数矩阵H的求解

    放射变换求解的关键就是H的求解,我们已知原图区域矩阵fp和需要放置的tp,需要求得仿射变换参数矩阵H。

    我们利用最小二乘法求解H,其基本步骤如下:

    a.检查tp和fp大小是否一致,若不一致则报错

    b.对fp进行归一化

    c.对tp进行归一化

    d.利用SVD进行奇异值分解,剔除异常值,求得H

    二、仿射变换的实现

    1.主函数:

     # -*- coding: utf-8 -*-
    from PCV.geometry import warp, homography
    from PIL import  Image
    from pylab import *
    from scipy import ndimage
    
    # im1仿射到im2的例子
    #打开两张图片
    im1 = array(Image.open('D:/test/beatles.jpg').convert('L')) 
    im2 = array(Image.open('D:/test/billboard_for_rent.jpg').convert('L'))
    # 选定一些目标点,数组tp表示目标区域,三行分别代表y、x和齐次,其中区域按从左上角逆时针旋转,
    tp = array([[120,260,260,120],[16,16,305,305],[1,1,1,1]])#将一些目标点存储到数组中
    im3 = warp.image_in_image(im1,im2,tp) #使用仿射变换将m1放置到m2
    figure()
    gray()
    subplot(141)
    axis('off')
    imshow(im1)
    subplot(132)
    axis('off')
    imshow(im2)
    subplot(133)
    axis('off')
    imshow(im3)
    show()
    

    2.主要函数的介绍:

    (1)wrap.image_in_image(im1,im2,tp)

    函数的意义是通过方式变换将图像m1放置到图像m2的指定区域tp中

    def image_in_image(im1,im2,tp):
        """使用仿射变换将m1放置到m2,使得m1图像的角和tp尽可能的靠近。
            tp是齐次表示的,并且按照从左上角逆时针计算的"""
        
        # 扭曲的点
        m,n = im1.shape[:2]#获取m1的高m宽n
        fp = array([[0,m,m,0],[0,0,n,n],[1,1,1,1]])
        
        #计算仿射变换,并且将其应用于图像im1
        H = homography.Haffine_from_points(tp,fp)#返回给定点对的最优仿射变换求H
        im1_t = ndimage.affine_transform(im1,H[:2,:2],
                        (H[0,2],H[1,2]),im2.shape[:2])#图像扭曲
        alpha = (im1_t > 0)
        
        return (1-alpha)*im2 + alpha*im1_t

    (2)homography.Haffine_from_points(tp,fp)

    函数的意义是通过原图像矩阵fp和仿射变换后的图像矩阵tp求得H

    def Haffine_from_points(fp,tp):
        """计算H,仿射变换,使得tp是fp经过仿射变换H得到的"""
        
        if fp.shape != tp.shape:
            raise RuntimeError('number of points do not match')
            
        # 对点进行归一化
        # 映射起始点
        m = mean(fp[:2], axis=1)#取fp的前两行,压缩列求平均值
        maxstd = max(std(fp[:2], axis=1)) + 1e-9 #取fp的前两行,压缩列求标准差,取最大值
        C1 = diag([1/maxstd, 1/maxstd, 1]) 
        C1[0][2] = -m[0]/maxstd
        C1[1][2] = -m[1]/maxstd
        fp_cond = dot(C1,fp)
        
        # 映射对应点
        m = mean(tp[:2], axis=1)
        C2 = C1.copy() #两个点集,必须都进行相同的缩放
        C2[0][2] = -m[0]/maxstd
        C2[1][2] = -m[1]/maxstd
        tp_cond = dot(C2,tp)
        
        #因为归一化后点的均值为0,因此平移为0
        A = concatenate((fp_cond[:2],tp_cond[:2]), axis=0)#数组拼接
        U,S,V = linalg.svd(A.T)#奇异值分解,用小的多的数据集来表示原始数据集
        
        #创建B和C矩阵
        tmp = V[:2].T
        B = tmp[:2]
        C = tmp[2:4]
    
        #B的伪逆矩阵和C逐元素相乘,与zero(2,1)拼接
        tmp2 = concatenate((dot(C,linalg.pinv(B)),zeros((2,1))), axis=1) 
        H = vstack((tmp2,[0,0,1]))#数组合并
        
        # 反归一化
        H = dot(linalg.inv(C2),dot(H,C1))
        
        return H / H[2,2]

    效果如下图所示:

    左边为图像m1,中间为图像m2,右边为仿射变换后的效果图。我们可以清楚的看到m1放到了m2的指定区域,实现了两张图片的融合。

    展开全文
  • 为了消除离散广义分段仿射系统的非正则性和非因果性对控制系统性能的不利影响,研究了一类具有参数不确定离散广义分段仿射系统的鲁棒静态输出反馈控制问题,基于分段Lyapunov函数、投影定理和几个基本引理,提出了两...
  • 仿射变换(Affine Transformation)原理及应用(1)

    万次阅读 多人点赞 2019-08-09 17:35:59
    文章目录1 什么是仿射变换2 仿射变换数学表达3 仿射变换理解3.1 平移变换3.2 反射变换3.3 旋转变换3.4 opencv中的仿射矩阵 1 什么是仿射变换 仿射变换(Affine Transformation)其实是另外两种简单变换的叠加...
  • 为了讨论一类非仿射非线性系统自适应模糊控制问题,利用有关隐函数定理和泰勒公式,将系统由非仿射型转变为仿射型,基于滑模控制原理,并运用模糊逻辑系统对未知函数进行在线逼近,提出了一种具有监督器的自适应模糊...
  • 在伪正交标架下,研究了仿射平移Weingarten曲面.首先,根据微分几何中的基本知识,得到了该种度量形式下的平移曲面的第一、第二基本形式以及高斯曲率和平均曲率:然后,主要利用高斯曲率和平均曲率之间的线性关系和...
  • 利用一般顶点代数构造定理,构造了相应于仿射GNW代数的顶点代数,该顶点代数在中心元作用非零的条件下是一个顶点算子代数.
  • 仿射变换的原理

    千次阅读 2017-11-29 16:07:31
    其实以上三个操作都是同一类型的变化,称作仿射变化。可以把这3次图像运算合并成一次,从而优化运算时间。如何合并这三次运算,需要从仿射变换的原理说起。 举个例子,我们需要对以下图像(蓝色)顺时针旋转90...
  • 密码学基础--仿射密码

    千次阅读 2019-10-06 17:33:51
    仿射密码中,加密函数定义为...为了能对密文进行解密,必须保证所选用的仿射函数是一个单射函数。换句话说,对任意的Y∈Z,如下同余方程: ax+b≡y(mod26) 有唯一解。上述同余方程等价于 ax≡y-b(mod26) 当y遍历Z~...
  • 本文补充证明[1]中有向仿射k-单形定向的定理
  • 线性代数之 向量空间几何学(1)前言仿射组合 前言 本章是线性代数最后一节内容,向量空间与几何学。 仿射组合 定义仿射组合:对于RnR^nRn中的向量v⃗1,v⃗2…,v⃗n\vec v_1, \vec v_2\dots,\vec v_nv1​,v2​…,vn...
  • Hahn-Banach 定理1.1. 几何形式的Hahn-Banach定理:凸集的分离2. Banach 闭值域定理 1. Hahn-Banach 定理 实向量空间中: X是实向量空间,p是X上的 次线性泛函 ,即一个满足 $p(\alpha x) = \alpha p(x) \forall a&...
  • 几何定理机器证明

    2021-06-28 11:07:24
    jihe dingli jiqi zhengming 几何定理机器证明 mechanical theorem-proving in geometry 用计算机自动证明某一类型几何定理,甚至某一种几何全部定理的原理和方法。从理论角度看,几何定理的机器证明要经历公理化、...
  • 作者: 谢彦麟 出版社: 哈尔滨工业大学出版社 ... 数学中的小问题大定理(第6辑) (共8册), 这套丛书还有 《我们周围的概率》,《无穷小量的求和》,《数论三角形》,《易学与数学奥林匹克》,《数学归纳法》 等。
  • 5.仿射加密

    2020-06-26 23:10:32
    仿射密码也是一般单表替代密码的一个特例,是一种线性变换。 仿射密码的明文空间和密文空间与移位密码相同,但密钥空间为 K={(k1,k2)| k1,k2∈Z26,gcd(k1,26)=1} 对任意m∈M,c∈C,k = (k1,k2)∈K, 定义加密...
  • 椭圆内接四边形四极点调和分割定理是椭圆内接四边形的一个重要性质(可以推广至圆锥曲线)。本人整理了一下思路,将证明过程简洁化,顺便加入了一些自己的想法。。(好吧事实上并不需要引理/滑稽)定理:椭圆上给定四个...
  • 用迭代法求解Newton-like法中的方程,T.J.Ypma提出Newton-like-iterative方法。在其早期的文章中,不精确牛顿法...与以往方法不同,今提出用不精确Newton-like法做相关的收敛性分析,所得定理更加简单,同时具有仿射不变性。
  • 仿射函数与线性变换的区别

    千次阅读 2020-10-04 18:29:30
    用勾股定理计算一下。三角形的顶点会变成 (22,22)(\frac{\sqrt2}{2},\frac{\sqrt2}{2})(22 ​​,22 ​​)。这个看起来比较麻烦。但是如果你明白矩阵乘法是怎么算的,那很容易理解为什么一个旋转矩阵会是这样的: ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,383
精华内容 953
关键字:

仿射定理