0%

1. Why Company Sponsor

Make their product known by customers

Build opportunities between people and sponsor

  • In meaningful way
  • Interesting

1.1. How Sponsor

Type

  • Experience, make people feel the product
  • Media
  • Cash

2. Know the Audience

  • Demographic
  • Psychographic
  • Preferred brands
  • Coming purchases

The more data of audience, the better

Read more »

1. Intro

什么是SIFT?Scale Invariant Feature Transform

对下列变化不敏感

  • 尺度变换
  • 旋转
  • 光照
  • 视角

SIFT算法较为复杂,主要分为两个大的部分

  1. 找出特征点
  2. 目的是去掉一些不重要的细节。方法:高斯模糊
  3. 变化大的区域就是边缘、点、角
  4. 描述特征点
  5. HoG,在1.2中找出的特征点为中心选16x16的区域
  6. 又可以分为4x4个子区域,每个子区域都可以积算一个梯度,8个bin里
  7. 一共是4x4x8=128维的特征向量

2. Details

  1. 找出特征点

  2. 目的是去掉一些不重要的细节。方法:高斯模糊,不同的level

  3. 不断resize,变成金字塔形状,不同的octaves。每次resize之后都高斯模糊。

建议的值octave=4,level=5

  1. 生成Difference of Gaussians (DoG),变化大的区域就是边缘、点、角
Read more »

1. 流程

1.1. RGB Image

  1. 获取图像
  2. 利用传统的方式得到主体脉络
  3. 提取RGB关键点
  4. 判断抓取位置

1.2. RGB Image + 3D Model

  1. 如果有3D模型,则通过RGB关键点匹配模型,得到关键点的3D坐标

  2. 利用多组点,求解6D位姿

1.3. 疑惑

  • 什么是主体脉络
  • 2d特征点的3d坐标

2. 安排

基于模型的位姿估计

  • 提前在3D模型上选好特征点,确定特征点在模型坐标系下的坐标
  • 计算RGB图象中的特征点,
Read more »

1. 1 问题描述

为了给训练模型提供大量不同背景和姿态的训练数据,基于相机模型和Open3D的渲染生成数据,输入模型、背景和相机的姿态(或者模型的姿态),输出RGB图和深度图

2. 2 方法步骤

主要依赖两个库

  • Open3D:提供读取模型(.obj .mtl .jpg)以及渲染模型的作用,生成具有真实感的模型图片
  • 虚拟相机模型virtual_camera:提供生成mask的作用,也就是获取模型在图片中的位置

Pipeline:

  1. 读取模型
  2. 初始化相机模型,计算相机内参、外参
  3. 获取mask(起到抠图的作用)
  4. 读取模型的顶点和mesh信息
  5. 将顶点通过相机模型映射到像素平面
  6. 根据mesh信息将对应的三角形涂上颜色
  7. 最终根据颜色信息获取mask
  8. 渲染模型
  9. 初始化一个Open3D的render
  10. 定义render中的相机位置、模型材质、环境光照信息
  11. 渲染模型的深度图和RGB图
  12. 背景融合
  13. 读取背景图片
  14. 根据3中获取的mask信息读取4中RGB图相应位置的点,赋值给背景图图片,获得融合后的RGB图
  15. 根据4中获取的深度图,重新计算,映射到0-255范围,获得可视化良好的深度图

3. 3 代码实现

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import open3d as o3d
import open3d.visualization.rendering as rendering
import matplotlib.pyplot as plt
import numpy as np
from virtual_camera import VirtualCamera
import cv2

## Read the Data (From obj file)
bpa_mesh = o3d.io.read_triangle_mesh('BigConnecter.obj',True)
tri=np.asarray(bpa_mesh.triangles)
points_raw=np.asarray(bpa_mesh.vertices)
center_p=np.sum(points_raw,0)/len(points_raw)
rx=-np.pi/2
ry=0
rz=np.pi/2
R=o3d.geometry.get_rotation_matrix_from_xyz([rx,ry,rz])
bpa_mesh.rotate(R,center_p)
o3d.visualization.draw_geometries([bpa_mesh])

## Setup a camera
rx=0
ry=np.pi
rz=0
x=1
y=1
z=570
W,H=2048,2048
focal=1024
tic=time.time()
cam = VirtualCamera(rx, ry, rz,x, y, z, focal*3.45e-6, [W, H])

## Create Mask
# Get the triangle relationship
points=points_raw
print(points)
points=points.reshape(-1,3)
ans,cp = cam.project_world_to_pixel(points)
ans=ans.astype(int)
mask_bg=np.zeros((W,H,3))
mask_bg[:,:,:]=0
ans=ans[:,0:2]
for i in range(len(tri)):
pt1=ans[tri[i][0]]
pt2=ans[tri[i][1]]
pt3=ans[tri[i][2]]
tri_set=np.asarray([pt1,pt2,pt3])
tri_set=tri_set.astype(int)
tri_set=tri_set.reshape(-1,2)
cv2.fillPoly(mask_bg,[tri_set],(0,255,0))
# Calculate the mask
kernel = np.ones((3,3),np.uint8)
fushi = cv2.erode(mask_bg,kernel,iterations = 1)
mask=np.where(fushi[:,:,1]==255)

## Render model
camera_intrinsics=o3d.camera.PinholeCameraIntrinsic()
camera_intrinsics.set_intrinsics(W,H,focal,focal,W/2,H/2)
extrinsics=cam.RT_world_in_camera

render = rendering.OffscreenRenderer(2048, 2048)
material = rendering.Material()
material.base_color = [1, 1, 1, 1.0]
material.shader = "defaultLit"
material.albedo_img=o3d.io.read_image('BigConnectSilver.jpg')
material.base_metallic=1.0
render.scene.add_geometry("pcd",bpa_mesh,material)
render.setup_camera(camera_intrinsics,extrinsics)
render.scene.scene.set_sun_light([0, 0.0, -1], [1, 1,1],
3e6)
render.scene.scene.enable_sun_light(True)

## Read RGB and Depth image from open3d
img = np.asarray(render.render_to_image())
depth_img=np.asarray(render.render_to_depth_image())
depth_img=1-depth_img
depth_img=depth_img/np.amax(depth_img)*255
depth_img=depth_img.astype(int)
cv2.imwrite('render_depth.png',255-depth_img)

img= cv2.cvtColor(img,cv2.COLOR_RGB2BGR)
bg=cv2.imread('WechatIMG1313.jpeg')
bg=cv2.resize(bg,(2048,2048))
bg[mask[0],mask[1]]=img[mask[0],mask[1]]

cv2.imwrite('render_rgb.jpg',bg)
plt.imshow(cv2.cvtColor(bg,cv2.COLOR_BGR2RGB))

4. 4 实验结果

Read more »

1. 1 问题描述

在已经有了相机模型和已知圆的3个特征点的世界坐标及其像素坐标的情况下,我们可以用数值求解的方式求解出相机的位姿。

假设世界坐标系的圆点为圆心

2. 2 约束条件

已知相机模型
$$
Z_{c}\left[\begin{array}{l}
u \
v \
1
\end{array}\right]=\left[\begin{array}{ccc}
\frac{f}{\mu_x} & 0 & c_{x} \
0 & \frac{f}{\mu_ y} & c_{y} \
0 & 0 & 1
\end{array}\right]\left[\begin{array}{cccc}
1 & 0 & 0 & 0 \
0 & 1 & 0 & 0 \
0 & 0 & 1 & 0
\end{array}\right]\left[\begin{array}{cc}
R & T \
\overrightarrow{0} & 1
\end{array}\right]\left[\begin{array}{c}
X_{w} \
Y_{w} \
Z_{w} \
1
\end{array}\right]
$$
其中
$$
S=\left[\begin{array}{ccc}
\frac{f}{\mu_x} & 0 & c_{x} \
0 & \frac{f}{\mu_ y} & c_{y} \
0 & 0 & 1
\end{array}\right]
$$
是相机的内参矩阵,是一个固定的矩阵,因此可以放到等式左边,化简方程
$$
Z_{c}S^{-1}\left[\begin{array}{l}
u \
v \
1
\end{array}\right]=\left[\begin{array}{cccc}
1 & 0 & 0 & 0 \
0 & 1 & 0 & 0 \
0 & 0 & 1 & 0
\end{array}\right]\left[\begin{array}{cc}
R & T \
\overrightarrow{0} & 1
\end{array}\right]\left[\begin{array}{c}
X_{w} \
Y_{w} \
Z_{w} \
1
\end{array}\right]
$$
其中
$$
S^{-1}=\displaystyle \left[\begin{matrix}\frac{\mu}{f} & 0 & - \frac{C_{x} \mu}{f}\0 & \frac{\mu}{f} & - \frac{C_{y} \mu}{f}\0 & 0 & 1\end{matrix}\right]
$$
(4)中的RT矩阵用四元数的表达方式可以写成
$$
\displaystyle \left[\begin{matrix}- 2 y^{2} - 2 z^{2} + 1 & - 2 w z + 2 x y & 2 w y + 2 x z & - T_{x} \left(- 2 y^{2} - 2 z^{2} + 1\right) - T_{y} \left(- 2 w z + 2 x y\right) - T_{z} \left(2 w y + 2 x z\right)\2 w z + 2 x y & - 2 x^{2} - 2 z^{2} + 1 & - 2 w x + 2 y z & - T_{x} \left(2 w z + 2 x y\right) - T_{y} \left(- 2 x^{2} - 2 z^{2} + 1\right) - T_{z} \left(- 2 w x + 2 y z\right)\- 2 w y + 2 x z & 2 w x + 2 y z & - 2 x^{2} - 2 y^{2} + 1 & - T_{x} \left(- 2 w y + 2 x z\right) - T_{y} \left(2 w x + 2 y z\right) - T_{z} \left(- 2 x^{2} - 2 y^{2} + 1\right)\0 & 0 & 0 & 1\end{matrix}\right]
$$
四元数的各个数值约束为
$$
w^2+x^2+y^2+z^2=1
$$

2.1. 2.1 圆心特征点

考虑世界坐标系圆心坐标 $P(0,0,0)$,像素坐标$p_0$

对应缩放
$$
Zc=\displaystyle - T_{x} \left(- 2 w y + 2 x z\right) - T_{y} \left(2 w x + 2 y z\right) - T_{z} \left(- 2 x^{2} - 2 y^{2} + 1\right)
$$
像素坐标
$$
Z_cS^{-1}p_0=\left[\begin{array}{l}
-T_{x}\left(-2 y^{2}-2 z^{2}+1\right)-T_{y}(-2 w z+2 x y)-T_{z}(2 w y+2 x z) \
-T_{x}(2 w z+2 x y)-T_{y}\left(-2 x^{2}-2 z^{2}+1\right)-T_{z}(-2 w x+2 y z)
\end{array}\right]
$$

2.2. 2.2 X方向直径端点

考虑世界坐标系X方向直径端点 $P(L,0,0)$,像素坐标$p_x$

Read more »

1. 人生目标?

人这一生到底要做什么

为什么

目前情况怎么样

怎么做

2. What really matters

快乐主义:Hedonism

Pleasure is the only direct good, Pain is the only direct bad

萨特:

  • 对人类来说,先有存在,然后再有目的
  • 我们的目的由自己定义
  • 对于物品来说,先有目的,然后再存在
Read more »

1. 1 问题描述

在利用2d图像进行相机位姿估计时需要进行实验验证,因此根据相机模型编写仿真代码,将3维空间点映射到最终的像素平面。

2. 2 相机模型

总体过程可以分位3部分:

  1. 将世界坐标系下的三维点用相机坐标系坐标表示
  2. 将相机坐标系下的点映射到成像平面,这个过程中深度信息丢失
  3. 将成像平面的点映射到像素坐标系,也就是最终相机拍摄到的照片上的像素坐标

2.1. 2.1 世界坐标系-相机坐标系

2.2. 2.1.1 欧拉角表示

这是一个单纯的旋转平移过程

  1. 现在世界坐标系下平移$[T_x,T_y,T_z]$
    $$
    T\left(T_{x}, T_{y}, T_{z}\right)=\left[\begin{array}{cccc}
    1 & 0 & 0 & T_{x} \
    0 & 1 & 0 & T_{y} \
    0 & 0 & 1 & T_{z} \
    0 & 0 & 0 & 1
    \end{array}\right]
    $$

  2. 先绕世界坐标系的x轴旋转$\alpha$
    $$
    \mathbf{R}_{x}(\alpha)=\left[\begin{array}{cccc}
    1 & 0 & 0 & 0 \
    0 & \cos \alpha & -\sin \alpha & 0 \
    0 & \sin \alpha & \cos \alpha & 0 \
    0 & 0 & 0 & 1
    \end{array}\right]
    $$

  3. 再绕世界坐标系的y轴旋转$\beta$
    $$
    \mathbf{R}_{y}(\beta)=\left[\begin{array}{cccc}
    \cos \beta & 0 & \sin \beta & 0 \
    0 & 1 & 0 & 0 \
    -\sin \beta & 0 & \cos \beta & 0 \
    0 & 0 & 0 & 1
    \end{array}\right]
    $$

  4. 最后绕世界坐标系的z轴旋转$\gamma$
    $$
    \mathbf{R}_{z}(\gamma)=\left[\begin{array}{cccc}
    \cos \gamma & -\sin \gamma & 0 & 0 \
    \sin \gamma & \cos \gamma & 0 & 0 \
    0 & 0 & 1 & 0 \
    0 & 0 & 0 & 1
    \end{array}\right]
    $$

因为是对坐标系的变换,因此按照顺序左乘各个矩阵可以描述为一个总体的变换矩阵

Read more »

1. 1 问题描述

在利用2d图像进行相机位姿估计时需要进行实验验证,因此根据相机模型编写仿真代码,将3维空间点映射到最终的像素平面。

2. 2 相机模型

总体过程可以分位3部分:

  1. 将世界坐标系下的三维点用相机坐标系坐标表示
  2. 将相机坐标系下的点映射到成像平面,这个过程中深度信息丢失
  3. 将成像平面的点映射到像素坐标系,也就是最终相机拍摄到的照片上的像素坐标

2.1. 2.1 世界坐标系-相机坐标系

这是一个单纯的旋转平移过程

  1. 现在世界坐标系下平移$[T_x,T_y,T_z]$
    $$
    T\left(T_{x}, T_{y}, T_{z}\right)=\left[\begin{array}{cccc}
    1 & 0 & 0 & T_{x} \
    0 & 1 & 0 & T_{y} \
    0 & 0 & 1 & T_{z} \
    0 & 0 & 0 & 1
    \end{array}\right]
    $$

  2. 先绕世界坐标系的x轴旋转$\alpha$
    $$
    \mathbf{R}_{x}(\alpha)=\left[\begin{array}{cccc}
    1 & 0 & 0 & 0 \
    0 & \cos \alpha & -\sin \alpha & 0 \
    0 & \sin \alpha & \cos \alpha & 0 \
    0 & 0 & 0 & 1
    \end{array}\right]
    $$

  3. 再绕世界坐标系的y轴旋转$\beta$
    $$
    \mathbf{R}_{y}(\beta)=\left[\begin{array}{cccc}
    \cos \beta & 0 & \sin \beta & 0 \
    0 & 1 & 0 & 0 \
    -\sin \beta & 0 & \cos \beta & 0 \
    0 & 0 & 0 & 1
    \end{array}\right]
    $$

  4. 最后绕世界坐标系的z轴旋转$\gamma$
    $$
    \mathbf{R}_{z}(\gamma)=\left[\begin{array}{cccc}
    \cos \gamma & -\sin \gamma & 0 & 0 \
    \sin \gamma & \cos \gamma & 0 & 0 \
    0 & 0 & 1 & 0 \
    0 & 0 & 0 & 1
    \end{array}\right]
    $$

因为是对坐标系的变换,因此按照顺序左乘各个矩阵可以描述为一个总体的变换矩阵
$$
T=T(T_x,T_y,T_z)R_z(\gamma)R_y(\beta)R_x(\alpha)
$$
假设$P_w:(X_w,Y_w,Z_w)$是世界坐标系下的坐标,$P_c:(X_c,Y_c,Z_c)$是相机坐标系下的坐标


$$
\begin{array}{}
P_1=TP_2 \
P_2=T^{-1}P_1
\end{array}
$$

Read more »

1. 1 问题描述

根据射影几何,真实世界中的圆在理想相机模型中的投影是一个椭圆。本文就是根据圆的半径和相机拍摄到的椭圆方程推导求解相机相对于圆心的位姿关系。为了简化问题,目前只考虑相机在一个角度的旋转$\beta$和位移$\Delta_l$

2. 2 关系图

关系图

如图所示,符号规定:

$d$: 正圆圆心到相机平面的距离

$f$: 相机的焦距

$Δc_2$: 圆心在成像平面的位移距离

$L_1$: 成像平面的椭圆的半径(与旋转平面垂直)

  • 成像平面椭圆的半径可以看成是世界中正圆半径的缩放,缩放的比例只和到圆的距离有关。在距离不变的情况下,$L_1$是所对应的半径没有变化的那条半径
Read more »

1. Intro

我在初中时第一次阅读了《人性的弱点》一书,给当时的我带来了极为深刻的影响。在读此书之前,我觉得我在人际关系处理是处于一个相当原始的阶段,我应该如何说话,如何评估自己所说的话对别人的影响几乎没有任何常识,完全凭借直觉。虽然说阅读此书之后依然没有太大长进,但起码知道了一些最基本的规则,比如说不要随意批评他人。

从初中到大学,单纯的人际(同学)关系和『不和别人打好交道也没关系』的社交环境让我凭借原始的社交技能也生活得很不错,但是逐渐步入社会,我发现我所储备的技能逐渐不够用了。如何与同事、上级沟通,如何达成自己想要的目标,我不知道,我需要新的知识。

重新了解这本书,才发现这本书的英文名是『Win Friends and Influence People』,交朋友与影响他人,或许这就是我想要的,虽然当时第一次读这本书确实是因为『人性的弱点』这个标题。

2. 概览

我已经基本忘记了原文的内容,这10年来,我的阅读方式也改变了许多。因此这次先将原文的目录来看一看。现在看这些标题,仿佛是一堆标题党、营销号的内容合集。那么为什么我对营销号不屑一顾,却要看这本书呢?我觉得主要原因是,首先这是一本经过了时间和他人检验的经验集合,从可信度上来说,比营销号要略微好一些。其次,这些内容基本上都是由一个人输出的,那就可以基本保证这些内容是自洽的,参考一个自洽的行为方式对于自身三观的构建也是很有帮助的

突然想起来,我的三观是否已经建立了呢?能否自洽了呢?需要找个时间好好反思一下

  1. 为人处事的基本技巧
  2. 平安快乐的14项法则
  3. 获取信服的12种方法
  4. 说服别人的9种方法
  5. 让你处处受欢迎的6项法则
  6. 创造奇迹的信
  7. 9种打造幸福快乐的家庭
  8. 如何把自己修炼成成熟有魅力的人
  9. 8步走出孤独忧虑的人生
  10. 抛却名利带来的烦恼
  11. 高记忆力的3个自然技巧

3. 为人处事的基本技巧

  • 不要批评、责怪和抱怨

  • 发自内心地赞赏别人

  • 知悉对方的想法

Read more »