矩阵

数字图像基本处理——几何变换(geometry operation)

▼魔方 西西 提交于 2020-03-24 15:33:38
本节我们总结一下数字图像的几何变换,区别于前面几种操作(白平衡,灰度变换,空间滤波)针对于像素强度,几何变换主要针对像素的位置。 对空间的操作主要包括仿射(线性)变换(平移,旋转,伸缩,剪切)和投影变换。每种变换方法的具体细节不展开阐述,就是把对像素(变量)的操作提取出来作为变换矩阵(其实也就是线性代数中的线性变换,推荐B站从空间几何的角度理解线性代数: https://b23.tv/BV1ys411472E/p1 )。每个矩阵对应一种变换空间,如果进行多种叠加操作就是对应矩阵不断左乘,多个线性空间不断作用的结果。 仿射变换 平移,旋转,伸缩是严格的2D线性变换,是刚体变换(本身的形态不发生变换),剪切可以保证图中的平行线不变。2D线性变换中的变量有6个,也就是自由度DOF=6。 2D线性变换通项如下: 具体来说: (图中的旋转对应逆时针旋转) 投影变换 (投影变换中不保证平行线仍然平行)投影变换对应原来的线性变换再除以一个线性变换,投影变换矩阵中前两行对应线性变换中的参数,这样可以用该3 X 3的矩阵统一线性变换及投影变换,当最后一行为[0 0 1]时就是线性变换。 图像插值 由图像几何变换带来一个问题就是变换之后的像素值可能不是一个整数,而我们所使用的像素值一般是整数,所以需要近似来解决。插值的关键思想就是保证变换后的像素点和最近的邻居最相似,最远的邻居最不相似,考虑的邻居越多

C# 练习题 数组结构

天大地大妈咪最大 提交于 2020-03-24 14:19:38
排序问题 上午 复习 ---------------------------------------------------- 1.复习:冒泡排序 问题:有一组数据,排序之前: -1 10 - 20 -30 要求按从小到大的顺序排序 --------------------------------------------------- 解答: 1) 排序过程: 第一轮:3次,最大值,冒到最后 10 1) -1 10 不交换 -1 10 - 20 -30 2)10 -20 交换 -1 -20 10 -30 3)10 -30 交换 -1 -20 -30 10 ------------------------------------------------- 注:第一轮之后,数组变为: -1 -20 -30 10 ----------------------------------------------- 第二轮:2次, -1 -20 -30 1)-1>-20 -20 -1 -30 2) -1>--30 -20 -30 -1 ------------------------------------------------ 注:第一轮之后,数组变为: -20 -30 -1 10 ----------------------------------------------- 第三轮:

深度学习笔记10-词嵌入和word2vec-第2部分(NLP领域)

拥有回忆 提交于 2020-03-24 12:33:08
分析步骤: 第一步:将one-hot形式分词结果作为输入([0,1,0....,0]的列向量的V*1维词向量),与投影矩阵C(D*V维度)相乘,得到D*1维的向量 第2步:将第一步的输出结果做拼接,作为隐藏层的输入。 第3步:经过一个全连接的神经网络,经过激励层,再softmax,得到该词出现的概率矩阵和互熵损失。不断训练输出结果,改善权重矩阵C(可以发现C的列向量就是该词的词向量表现形式) 来源: https://www.cnblogs.com/luckyplj/p/12558047.html

python gdal 读取栅格数据

被刻印的时光 ゝ 提交于 2020-03-24 05:51:34
1.gdal包简介 gdal是空间数据处理的开源包,其支持超过100种栅格数据类型,涵盖所有主流GIS与RS数据格式,包括Arc/Info ASCII Grid(asc),GeoTiff (tiff),Erdas Imagine Images(img),ASCII DEM(dem) 等格式。 2.安装gdal包 (1)通过此链接查找并下载gdal包: https://www.lfd.uci.edu/~gohlke/pythonlibs/#pygame (根据自己的系统及python版本选择对应的gdal包) (2)在dos命令行下切换到包所在的文件夹,并运行pip install 包名进行安装。 3.读取栅格数据 #导入gdal包 from osgeo import gdal #导入numpy包(支持高维数组和矩阵运算,也提供了许多数组和矩阵运算的函数) import numpy as np #打开文件 dataset=gdal.Open("fdem.tif") #栅格矩阵的列数 im_width = dataset.RasterXSize #栅格矩阵的行数 im_height = dataset.RasterYSize #波段数 im_bands = dataset.RasterCount #仿射矩阵,左上角像素的大地坐标和像素分辨率。 #共有六个参数,分表代表左上角x坐标

C#(二维数组/集合)

狂风中的少年 提交于 2020-03-24 05:00:13
一、二维数组 int [,] array = new int[5,3];//有五个一维数组,每一个一维数组有3个元素 /打印出来一个“王”这个字string[,] wang = new string[,]{ {" ","■","■","■","■","■"," "}, {" "," "," ","■"," "," "," "}, {" "," "," ","■"," "," "," "}, {" "," ","■","■","■"," "," "}, {" "," "," ","■"," "," "," "}, {" "," "," ","■"," "," "," "}, {"■","■","■","■","■","■","■"} }; for (int i = 0; i < 7; i++) { for (int j = 0; j < 7; j++) { Console.Write(wang[i,j]); } Console.WriteLine(); } 输入班级人数,输入每个人的语数英成绩,求语文的总分,数学的平均分,英语的最高分和最低分 Console.Write("请输入班级人数:"); int n = int.Parse(Console.ReadLine()); double sum1= 0; double sum2 = 0; double[,] a = new

推荐算法入门

空扰寡人 提交于 2020-03-24 01:21:31
推荐算法概览(一) 为推荐系统选择正确的推荐算法非常重要,而可用的算法很多,想要找到最适合所处理问题的算法还是很有难度的。这些算法每种都各有优劣,也各有局限,因此在作出决策前我们应当对其做以衡量。在实践中,我们很可能需要测试多种算法,以便找出最适合用户的那种;了解这些算法的概念以及工作原理,对它们有个直观印象将会很有帮助。 推荐算法通常是在 推荐模型 中实现的,而推荐模型会负责收集诸如用户偏好、物品描述这些可用作推荐凭借的数据,据此预测特定用户组可能感兴趣的物品。 主要的推荐算法系列有四个(表格1-4): 协同过滤(Collaborative Filtering)的推荐算法 基于内容过滤(Content-based Filtering)的推荐算法 混合型推荐算法 流行度推荐算法 此外,还有很多高级或非传统的方式,可参见表格5。 本文是系列文中的第一篇,将会以表格形式来介绍推荐算法的主要分类,包括算法简介、典型的输入内容、常见的形式及其优劣。在系列文的第二与第三篇中,我们将会更详细地介绍各种算法的不同,以便让大家更深入地理解其工作原理。本文的某些内容是基于一篇2014年的推荐算法2014教程 《推荐问题再探(Recommender Problem Revisited)》 来撰写的,该文的作者是 Xavier Amatriain 。 表格一:协同过滤推荐算法概览 表格二

Java基础--二维数组

独自空忆成欢 提交于 2020-03-23 21:02:40
1.二维数组的定义 二维数组表示行列二维结构,在栈空间中的二维数组的地址指向堆空间中的一维数组,堆空间中的一维数组的地址又指向一维数组所在的内存空间。 2.二维数组的声明 二维数组声明有3种方式,推荐使用第三种命名方式。 2.1命名方式1 1 import java.util.Arrays; 2 public class Test05{ 3 public static void main(String[] args){ 4 5 // 二维数组 6 //int[] 7 // (int[]) [] 8 // 【1】声明 9 int[][] arr; 10 // 【2】初始化一个能存3个一维数组的二维数组 11 arr = new int[3][]; 12 // 【3】赋值 13 int[] arr1 = {1,3,4,5}; 14 int[] arr2 = {1,3,4}; 15 int[] arr3 = {2,1,6,4}; 16 arr[0] = arr1; 17 arr[1] = arr2; 18 arr[2] = arr3; 19 System.out.println(arr); 20 System.out.println(Arrays.toString(arr)); 21 } 22 } 2.2命名方式2(用于声明规则的二维数组) 1 import java.util

java基础 ---- 二维数组

不想你离开。 提交于 2020-03-23 21:02:10
---恢复内容开始--- -------- 多维数组 之二维数组 三维以上的就很少使用了主要使用的就是二维数组,从j内存的分配原理角度来讲只有一位数组 ------- 二维数组 一维数组的就是用下标标识数组元素的位置 二维数组实际上就是一个一维数组,他的每一个元素又是一个一维数组 --- 存储分布 ---------- 二维数组定义并赋值 两种写法 one: int[][] scores = new int [][] { {23,12,66,77,88},{44,222,33,44,22},{55,33,22,33}} two: int[][] scores = { {23,12,66,77,88},{44,222,33,44,22},{55,33,22,33}} ------ 遍历二维数组 1 import java.util.Scanner; 2 3 /** 4 * 有5个班各5名学生某门课程的成绩,计算5个班各自的总成绩 5 * */ 6 public class FiveTotal { 7 public static void main(String[] args) { 8 Scanner input=new Scanner(System.in); 9 int [][] array = new int[5][5]; //5个班的成绩 10 //i:班级 j:各班级的学生

判断输入的矩阵是否是单位矩阵

社会主义新天地 提交于 2020-03-22 23:44:40
判断输入的矩阵是否是单位矩阵 #include<iostream> using namespace std; #define N 3 bool judge(int(*arr)[10]) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { if (i == j && arr[i][j] != 1) { return false; } if (i != j && arr[i][j] != 0) { return false; } } return true; } } int main() { int arr[10][10]; for (int i = 0; i < N; i++) { cout << "请输入第" << i << "行的数字" << endl; for (int j = 0; j < N; j++) { cin >> arr[i][j]; } } if (judge(arr)) { cout << "是单位矩阵" << endl; } else { cout << "不是单位矩阵" << endl; } system("pause"); } 来源: https://www.cnblogs.com/readlearn/p/10806544.html

返回二维数组最大联通子数组的和

那年仲夏 提交于 2020-03-22 04:43:47
题目:返回二维数组最大联通子数组的和 设计思路:首先,利用文件读入读出流,读取二维数组,再利用降维的思想,求每一行的最大子数组块,遍历所有行,再将各行的最大子数组块进行判断合并。 代码: #include<iostream> #include<fstream> using namespace std; # define N 100 int zuida(long long int n, long long int a[], long long int *p, long long int *q)//一维数组的最大子数组和 { long long int b[N] = { 0 }; long long int i, sum1 = 0, max1 = 0; for (i = 0; i<n; i++) { if (sum1<0) { sum1 = a[i]; } else { sum1 = sum1 + a[i]; } b[i] = sum1; } max1 = b[0]; for (i = 0; i<n; i++) { if (max1<b[i]) { max1 = b[i]; *q = i; //记录最大子数组的终点位置 } } for (i = *q; i >= 0; i--) { if (b[i] == a[i]) { *p = i;//记录最大子数组的起点 break; } }