小写的希腊字母

小写LaTex命令
α\alpha
β\beta
γ\gamma
δ\delta
ε\varepsilon
η\eta
θ\theta
ι\iota
κ\kappa
λ\lambda
μ\mu
ν\nu
ξ\xi
ο\o
π\pi
ρ\rho
σ\sigma
τ\tau
υ\upsilon
φ\varphi
χ\chi
ψ\psi
ω\omega

大写的希腊字母

大写LaTex
Γ\Gamma
Δ\Delta
Θ\Theta
\Lambda
Ξ\Xi
\Pi
\Sigma
Υ\Upsilon
Φ\Phi
Ψ\Psi
Ω\Omega

图片版


[hide]

概念介绍

三类变换

  1. 透视变换:不能保证物体形状的“平行性”。仿射变换是透视变换的特殊形式。透视变换是将一个平面投影到另一个平面,简单理解就是把一张图片投影到另一张图片,求的是同一张图片到它的投影图片之间的变换。
  2. 仿射变换:保证物体形状的“平直性”和“平行性”,一般为平移、旋转等操作
  3. 单应性变换:由三维空间拍摄两张不同的图片来获取关键点,求的是该图片到另一个角度图片的变换,但是变换过后还是这张图片,没有变成另一个角度的图片,变换过后和另一张图片还是不同,因为三维空间得到的背景不同,所以变换过后并不能得到获取关键点对的另一张图片。

透视变换

将2D矩阵图像变换成3D的空间显示效果

公式推导:

因此,知道透视变换矩阵M后,变换顺序为:

x, y, z = np.dot(M, np.array([5, 10, 1]).reshape(3, -1))
x = x/z
y = y/z
z = z/z

单应性变换

$$s \left[ \begin{array} { l } { x ^ { \prime } } \\ { y^ { \prime } } \\ { 1 } \end{array} \right] = H \left[ \begin{array} { l } { x } \\ { y } \\ { 1 } \end{array} \right] = \left[ \begin{array} { l } { h _ { 11 } } & { h _ { 12 } } &{h_{13}} \\ { h _ { 21 } } & { h _ { 22 } } &{h_{23}}\\ { h _ { 31 } } & { h _ { 32 } }&{h_{33}} \end{array} \right] \left[ \begin{array} { l } { x } \\ { y } \\ { 1 } \end{array} \right]$$

单应矩阵H:

在坐标平面中看起来:

图像转换:

相机参数:

坐标转换


[/hide]

变换

IPM 逆透视变换

参考文献

1、Target location of unmanned aerial vehicles based on the electro-optical stabilization and tracking platform
2、https://juejin.cn/post/6990343357881352199


[TOC]


MATLAB R2022a和谐版安装可看:http://xfxuezhang.cn/index.php/archives/386/


系统要求

  • Win10(1803 +),WinServer 2016/2019,Win7 SP1
  • 处理器:具有SSE2支持
  • 磁盘空间:至少3G,平均5-10GB(最大29GB)
  • 内存:4GB,或更好的8GB或更多(取决于要解决的任务)

安装指南

  1. 将iso文件 Matlab910R2021a_Win64.iso 挂载到虚拟磁盘。

    • 对于Windows 8及更低版本,您可能需要Daemon Tools Lite(或类似版本)之类的软件
  2. 从该虚拟磁盘运行 setup.exe,如果看到登录名/密码/登录形式(您可以访问安装程序的Internet)

    • 然后在 “高级选项” 的左上角,选择设置模式 “使用文件安装密钥”
    • 如果没有互联网连接,则将自动选择所需的设置模式,而您无需设置设置模式
  3. 当系统询问您 “输入文件安装密钥” 时,请输入

    09806-07443-53955-64350-21751-41297
  4. 当系统提示您 “选择许可证文件” 时,选择 license.lic
  5. 然后选择要在其中安装Matlab的文件夹。当要求您 “选择要安装的产品” 时,取消选择组件“Matlab Parallel Server”,然后选择所需的组件。

    • 如果保留所有组件的选择,则matlab将需要32Gb的磁盘空间和更长的启动时间。
    • 如果仅留下“MATLAB” – 3Gb磁盘空间
    • 您最好在SSD磁盘上设置matlab,以缩短启动时间。
  6. 然后在“选择选项”中选择“向桌面添加快捷方式”
  7. 组件安装进度可能显示不正确(例如,始终显示0%)…请稍等。
  8. 安装完成后,将文件 “libmwlmgrimpl.dll” 复制到现有文件夹中“\bin\win64\matlab_startup_plugins\lmgrimpl”,
    覆盖现有文件(“” – Matlab的安装目录)
  9. 将 license.lic 文件复制到 \licenses 文件夹

    • 另外,您也可以启动Matlab。在这种情况下,您会看到一个窗口,要求您选择许可证
    • 首先选择 “在没有Internet的情况下手动激活”,然后
    • 然后在字段 “输入许可证文件的完整路径(包括文件名)” 中选择 “license.lic” 文件
  10. 使用 matlab,enjoy!:smiley:

磁力下载链接:
[hide]

magnet:?xt=urn:btih:83327AFAC3DE2C28EA22A04FBF533D90541DEF83&tr=http%3A%2F%2Fbt3.t-ru.org%2Fann%3Fmagnet&dn=Mathworks%20Matlab%20R2021a%20(9.10)%20Windows%20x64

[/hide]


一 安装ownCloud

  在Ubuntu的默认软件库里面是没有ownCloud的,我们需要手动将软件安装源加入到它的sourcelist中去。首先,先使用curl命令下载ownCloudrelease key,然后通过add命令导入到apt-key中。具体命令如下:

curl https://attic.owncloud.org/download/repositories/10.0/Ubuntu_18.04/Release.key | sudo apt-key add -

echo 'deb http://download.owncloud.org/download/repositories/10.0/Ubuntu_18.04/ /' | sudo tee /etc/apt/sources.list.d/owncloud.list

sudo apt update && sudo apt install php-bz2 php-curl php-gd php-imagick php-intl php-mbstring php-xml php-zip owncloud-files -y

  安装完成后,目录在/var/www/owncloud
  可以移动到apache2网站目录下,并更改权限:

sudo mv owncloud/ html/
sudo chmod -R 755 /var/www/html/owncloud/

二 设置默认目录

  上面提到,ownCloud的默认安装目录是/var/www/owncloud,而在apache默认的配置文件/etc/apache2/sites-enabled/000-default.conf中,定义了网站的源码目录DocumentRoot/var/www/html。为了保证owncloud工作正常,这两个路径必须一致。推荐做法是修改apache默认的配置文件DocumentRoot的值为/var/www/owncloud。(如果不需要80端口,也可以跳过此步)具体方法为:

  修改apache默认的配置文件/etc/apache2/sites-enabled/000-default.conf中的相应配置如下:

sudo vim /etc/apache2/sites-enabled/000-default.conf
DocumentRoot /var/www/owncloud

重启apache服务,使上述配置生效:

sudo service apache2 restart

  这是重启之后,在浏览器中输入服务器对应的ip地址,就会看到下图,证明owncloud 安装成功:

http://server-IP/owncloud

三 为ownCloud建立数据库

  在服务器的终端中输入以下命令,登录数据库:

sudo mysql -u root -p
# 为owncloud创建一个数据库
CREATE DATABASE owncloud_DB;
# 创建单独的MySQL用户来管理owncloud的数据库。这里,我们假设新创建用户名为ocuser,密码为OCuser666#。
GRANT ALL ON owncloud_DB.* to 'ocuser'@'localhost' IDENTIFIED BY 'OCuser666#';
# 更新设置并退出数据库:
FLUSH PRIVILEGES;
exit;

四 配置ownCloud

  在建立数据库之后,我们就可以来配置owncloud了。回到上图浏览器中显示的owncloud主页。

4.1 创建管理员帐号

  在“创建管理员帐号”下面用来设置owncloud所有用户的管理员的登陆帐号和密码。可以按照自己习惯随意设置。这里,我们假设管理员帐号为:OCadmin,密码为:OCuser888*

4.2 数据目录

  “数据目录”是指ownCloud产生的数据保存在哪里,这里我们选择默认配置/var/www/owncloud/data

4.3 配置数据库

  这里需要我们在“3. 为owncloud建立数据库”中为owncloud创建的数据库名称(owncloud_DB),用户帐号(ocuser)和密码(OCuser666#)。

  因此,这里的具体配置如下:

  然后,点击“安装完成”。如果一切顺利的话,ownCloud就配置成功了,并且会自动跳转到如下图的登录页面:

  输入在“4.1 创建管理员帐号”中,我们创建的管理员帐号(OCadmin)和密码(OCuser888*)就可以进入我们刚刚搭建好的ownCloud网盘了。

4.4 为 OwnCloud设置Apache配置文件

在此步骤中,我们将配置Apache以提供OwnCloud的文件。为此,我们将为Owncloud创建一个配置文件,如下所示。

sudo vim /etc/apache2/conf-available/owncloud.conf
Alias /owncloud "/var/www/owncloud/"

<Directory /var/www/owncloud/>
  Options +FollowSymlinks
  AllowOverride All

 <IfModule mod_dav.c>
  Dav off
 </IfModule>

 SetEnv HOME /var/www/owncloud
 SetEnv HTTP_HOME /var/www/owncloud

</Directory>

保存并关闭该文件。

接下来,您需要通过运行以下命令来启用所有必需的Apache模块和新添加的配置:

sudo a2enconf owncloud
sudo a2enmod rewrite
sudo a2enmod headers
sudo a2enmod env
sudo a2enmod dir
sudo a2enmod mime

要使更改生效,请重新启动 Apache Web 服务器。

sudo systemctl restart apache2

五 为ownCloud安装ssl证书

  在完成上述配置之后,为了保证传输数据的安全性,最好再为ownCloud网盘安装ssl证书,其安装方法和我们之前为博客安装ssl证书的方法一模一样,这里就不重复介绍了。


[hide]

绘制二维散点图

import numpy as np
import matplotlib.pyplot as plt

x = np.array([1,2,3])
y = np.array([1,2,3])

plt.figure()
plt.scatter(x, y, c='r', marker='^', label='point')

# 绘制图例
plt.legend(loc=1, bbox_to_anchor=(1.0, 1.0))
# 限制x轴坐标长度
plt.xlim(right=5)

# 展示
plt.show()

绘制三维散点图

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D  # 空间三维画图

x = np.array([1,2,3])
y = np.array([1,2,3])
z = np.array([1,2,3])

# 绘制散点图
fig = plt.figure()
ax = Axes3D(fig)
ax.scatter(x, y, z, c='r', marker='^', label='坐标点')

# 绘制图例,调整图例位置
ax.legend(loc='best', bbox_to_anchor=(1.2, 1.0))

# 添加坐标轴(顺序是Z, Y, X)
ax.set_zlabel('Z', fontdict={'size': 8, 'color': 'red'})
ax.set_ylabel('Y', fontdict={'size': 8, 'color': 'green'})
ax.set_xlabel('X', fontdict={'size': 8, 'color': 'blue'})

# 展示
plt.show()

scatter参数说明:


参数c 可以等于:['c', 'b', 'g', 'r', 'm', 'y', 'k', 'w']
  • b——blue
  • c——cyan
  • g——green
  • k——black
  • m——magenta
  • r——red
  • w——white
  • y——yellow
    图例位置(对应参数loc)


    还想再调整,可以使用参数bbox_to_anchor=(1.3, 1.0)

每个点加标签

两种方式可以实现:

  • text: 称为无指向型标注,标注仅仅包含注释的文本内容;
  • annotate: 称为指向型注释,标注不仅包含注释的文本内容还包含箭头指向,能够突显细节;

text方式:

import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(-np.pi, np.pi, 300)
y = np.cos(x)
plt.plot(x, y)
plt.text(0, 0.75, r'max', fontdict = {
'family': 'Times New Roman', # 标注文本字体
'fontsize': 20, # 文本大小
'fontweight': 'bold', # 字体粗细
'fontstyle': 'italic', # 字体风格
'color': 'red',  # 文本颜色
'backgroundcolor': 'blue', # 背景颜色
'bbox': {'boxstyle':'round'} # 椭圆外框
})

plt.text(-3, 0.75, r'$cos(x)$',
family = 'Times New Roman', # 标注文本字体
fontsize = 18, # 文本大小
fontweight = 'bold', # 字体粗细
color = 'green' # 文本颜色
)
plt.plot(-3, 0.75, 'x', color = 'r')
plt.show()

annotate方式:

import numpy as np
import matplotlib.pyplot as plt

x = np.linspace(-np.pi, np.pi, 300)
y = np.cos(x)
plt.plot(x, y)
plt.annotate(r'$max$', xy = (0, 1), xytext = (0, 0.75),
arrowprops = {
'headwidth': 10, # 箭头头部的宽度
'headlength': 5, # 箭头头部的长度
'width': 4, # 箭头尾部的宽度
'facecolor': 'r', # 箭头的颜色
'shrink': 0.1, # 从箭尾到标注文本内容开始两端空隙长度
},
family='Times New Roman',  # 标注文本字体为Times New Roman
fontsize=18,  # 文本大小为18
fontweight='bold',  # 文本为粗体
color='green',  # 文本颜色为红色
# ha = 'center' # 水平居中
)

plt.plot(0, 1, 'x', color = 'r')
plt.plot(0, 0.75, 'x', color = 'r')

plt.show()

坐标取消科学计数法

matplotlib.rcParams["axes.formatter.useoffset"] = False

以下尝试都无效:

x_formatter = matplotlib.ticker.ScalarFormatter(useOffset=False)
x_formatter.set_scientific(False)
ax.xaxis.set_major_formatter(x_formatter)
ax.yaxis.set_major_formatter(x_formatter)
# --------------------------------- #
ax.get_xaxis().get_major_formatter().set_scientific(False)
ax.get_yaxis().get_major_formatter().set_scientific(False)
# --------------------------------- #
ax.ticklabel_format(style='plain')

[/hide]