Gelsight Sensor 重建 height-map —— 使用 DST-II 算子的快速泊松求解
gelsight
gelsight传感器具有软弹性体的接触表面,可以精确的重建物体形状还可以从传感器的变形推断接触力和滑动.
使用 DST-II 算子的快速泊松求解 height
文章:GelSight: High-Resolution Robot Tactile Sensors for Estimating Geometry and Force
文章最后求解的方程其实是: p = ∂ 2 u ∂ x 2 + ∂ 2 u ∂ y 2 p=\frac{\partial^2 u}{\partial x^2}+\frac{\partial^2 u}{\partial y^2} p=∂x2∂2u+∂y2∂2u, u 是我们要重建的高度图. p是以知的,是u两个二阶导数的和.
在离散域下, 某个像素点处, ∂ 2 u ( i , j ) ∂ x 2 \frac{\partial^2 u(i,j)}{\partial x^2} ∂x2∂2u(i,j) 可以写成 u ( i + 1 , j ) − u ( i , j ) − [ u ( i , j ) − u ( i − 1 , j ) ] △ x 2 \frac{u(i+1,j)-u(i,j)-[u(i,j)-u(i-1,j)]}{\triangle x^2} △x2u(i+1,j)−u(i,j)−[u(i,j)−u(i−1,j)],同样 ∂ 2 u ( i , j ) ∂ y 2 \frac{\partial^2 u(i,j)}{\partial y^2} ∂y2∂2u(i,j) 可以写成 u ( i , j + 1 ) − u ( i , j ) − [ u ( i , j ) − u ( i , j − 1 ) ] △ y 2 \frac{u(i,j+1)-u(i,j)-[u(i,j)-u(i,j-1)]}{\triangle y^2} △y2u(i,j+1)−u(i,j)−[u(i,j)−u(i,j−1)] 。
故而可以有:
p
i
,
j
=
u
(
i
+
1
,
j
)
−
u
(
i
,
j
)
−
[
u
(
i
,
j
)
−
u
(
i
−
1
,
j
)
]
△
x
2
+
u
(
i
,
j
+
1
)
−
u
(
i
,
j
)
−
[
u
(
i
,
j
)
−
u
(
i
,
j
−
1
)
]
△
y
2
p_{i,j}=\frac{u(i+1,j)-u(i,j)-[u(i,j)-u(i-1,j)]}{\triangle x^2}+\frac{u(i,j+1)-u(i,j)-[u(i,j)-u(i,j-1)]}{\triangle y^2}
pi,j=△x2u(i+1,j)−u(i,j)−[u(i,j)−u(i−1,j)]+△y2u(i,j+1)−u(i,j)−[u(i,j)−u(i,j−1)]
引入DST-II: 单个方向的 DST 这样定义
Y
k
=
2
∑
i
=
0
N
−
1
x
i
s
i
n
(
π
(
i
+
1
/
2
)
(
k
+
1
)
N
)
Y_k=2\sum^{N-1}_{i=0}x_isin(\frac{\pi(i+1/2)(k+1)}{N})
Yk=2∑i=0N−1xisin(Nπ(i+1/2)(k+1))
将DST带入上一条式子可以有: u ~ \tilde u u~ 是 u u u 的DST
u ( i , j ) = 4 ∑ k i = 0 N x − 1 ∑ k j = 0 N y − 1 u ~ ( k i , k j ) s i n ( π ( i + 1 / 2 ) ( k i + 1 ) N x ) s i n ( π ( j + 1 / 2 ) ( k j + 1 ) N y ) u(i,j)=4\sum^{N_x-1}_{k_i=0}\sum^{N_y-1}_{k_j=0}\tilde u(k_i,k_j)sin(\frac{\pi(i+1/2)(k_i+1)}{N_x})sin(\frac{\pi(j+1/2)(k_j+1)}{N_y}) u(i,j)=4∑ki=0Nx−1∑kj=0Ny−1u~(ki,kj)sin(Nxπ(i+1/2)(ki+1))sin(Nyπ(j+1/2)(kj+1))
u ( i − 1 , j ) = 4 ∑ k i = 0 N x − 1 ∑ k j = 0 N y − 1 u ~ ( k i , k j ) s i n ( π ( i − 1 + 1 / 2 ) ( k i + 1 ) N x ) s i n ( π ( j + 1 / 2 ) ( k j + 1 ) N y ) u(i-1,j)=4\sum^{N_x-1}_{k_i=0}\sum^{N_y-1}_{k_j=0}\tilde u(k_i,k_j)sin(\frac{\pi(i-1+1/2)(k_i+1)}{N_x})sin(\frac{\pi(j+1/2)(k_j+1)}{N_y}) u(i−1,j)=4∑ki=0Nx−1∑kj=0Ny−1u~(ki,kj)sin(Nxπ(i−1+1/2)(ki+1))sin(Nyπ(j+1/2)(kj+1))
u ( i + 1 , j ) = 4 ∑ k i = 0 N x − 1 ∑ k j = 0 N y − 1 u ~ ( k i , k j ) s i n ( π ( i + 1 + 1 / 2 ) ( k i + 1 ) N x ) s i n ( π ( j + 1 / 2 ) ( k j + 1 ) N y ) u(i+1,j)=4\sum^{N_x-1}_{k_i=0}\sum^{N_y-1}_{k_j=0}\tilde u(k_i,k_j)sin(\frac{\pi(i+1+1/2)(k_i+1)}{N_x})sin(\frac{\pi(j+1/2)(k_j+1)}{N_y}) u(i+1,j)=4∑ki=0Nx−1∑kj=0Ny−1u~(ki,kj)sin(Nxπ(i+1+1/2)(ki+1))sin(Nyπ(j+1/2)(kj+1))
将上面三个结果代入 u ( i + 1 , j ) − u ( i , j ) − [ u ( i , j ) − u ( i − 1 , j ) ] △ x 2 \frac{u(i+1,j)-u(i,j)-[u(i,j)-u(i-1,j)]}{\triangle x^2} △x2u(i+1,j)−u(i,j)−[u(i,j)−u(i−1,j)], 得到:
4 △ x 2 ∑ k i = 0 N x − 1 ∑ k j = 0 N y − 1 u ~ ( k i , k j ) λ x i s i n ( π ( i + 1 / 2 ) ( k i + 1 ) N x ) s i n ( π ( j + 1 / 2 ) ( k j + 1 ) N y ) \frac{4}{\triangle x^2}\sum^{N_x-1}_{k_i=0}\sum^{N_y-1}_{k_j=0}\tilde u(k_i,k_j)\lambda_{x_i} sin(\frac{\pi(i+1/2)(k_i+1)}{N_x})sin(\frac{\pi(j+1/2)(k_j+1)}{N_y}) △x24∑ki=0Nx−1∑kj=0Ny−1u~(ki,kj)λxisin(Nxπ(i+1/2)(ki+1))sin(Nyπ(j+1/2)(kj+1)) (1)
其中
λ
x
i
=
2
∗
[
cos
(
π
(
k
i
+
1
)
N
x
)
−
1
]
\lambda_{x_i}=2*[\cos(\frac{\pi(k_i+1)}{N_x})-1]
λxi=2∗[cos(Nxπ(ki+1))−1]
注:
s
i
n
(
π
(
i
+
1
+
1
/
2
)
(
k
i
+
1
)
N
x
)
+
s
i
n
(
π
(
i
−
1
+
1
/
2
)
(
k
i
+
1
)
N
x
)
−
2
∗
s
i
n
(
π
(
i
+
1
/
2
)
(
k
i
+
1
)
N
x
)
=
sin
(
π
(
k
i
+
1
)
N
x
)
cos
(
π
(
i
+
1
/
2
)
(
k
i
+
1
)
N
x
)
+
cos
(
π
(
k
i
+
1
)
N
x
)
sin
(
π
(
i
+
1
/
2
)
(
k
i
+
1
)
N
x
)
−
sin
(
π
(
k
i
+
1
)
N
x
)
cos
(
π
(
i
+
1
/
2
)
(
k
i
+
1
)
N
x
)
+
cos
(
π
(
k
i
+
1
)
N
x
)
sin
(
π
(
i
+
1
/
2
)
(
k
i
+
1
)
N
x
)
−
2
∗
s
i
n
(
π
(
i
+
1
/
2
)
(
k
i
+
1
)
N
x
)
=
2
∗
[
cos
(
π
(
k
i
+
1
)
N
x
)
−
1
]
∗
sin
(
π
(
i
+
1
/
2
)
(
k
i
+
1
)
N
x
)
=
λ
x
i
∗
sin
(
π
(
i
+
1
/
2
)
(
k
i
+
1
)
N
x
)
sin(\frac{\pi(i+1+1/2)(k_i+1)}{N_x})+sin(\frac{\pi(i-1+1/2)(k_i+1)}{N_x})-2*sin(\frac{\pi(i+1/2)(k_i+1)}{N_x})\\ =\sin(\frac{\pi(k_i+1)}{N_x})\cos(\frac{\pi(i+1/2)(k_i+1)}{N_x})+\cos(\frac{\pi(k_i+1)}{N_x})\sin(\frac{\pi(i+1/2)(k_i+1)}{N_x})\\ -\sin(\frac{\pi(k_i+1)}{N_x})\cos(\frac{\pi(i+1/2)(k_i+1)}{N_x})+\cos(\frac{\pi(k_i+1)}{N_x})\sin(\frac{\pi(i+1/2)(k_i+1)}{N_x})\\ -2*sin(\frac{\pi(i+1/2)(k_i+1)}{N_x})\\ =2*[\cos(\frac{\pi(k_i+1)}{N_x})-1]*\sin(\frac{\pi(i+1/2)(k_i+1)}{N_x})\\ =\lambda_{x_i}*\sin(\frac{\pi(i+1/2)(k_i+1)}{N_x})
sin(Nxπ(i+1+1/2)(ki+1))+sin(Nxπ(i−1+1/2)(ki+1))−2∗sin(Nxπ(i+1/2)(ki+1))=sin(Nxπ(ki+1))cos(Nxπ(i+1/2)(ki+1))+cos(Nxπ(ki+1))sin(Nxπ(i+1/2)(ki+1))−sin(Nxπ(ki+1))cos(Nxπ(i+1/2)(ki+1))+cos(Nxπ(ki+1))sin(Nxπ(i+1/2)(ki+1))−2∗sin(Nxπ(i+1/2)(ki+1))=2∗[cos(Nxπ(ki+1))−1]∗sin(Nxπ(i+1/2)(ki+1))=λxi∗sin(Nxπ(i+1/2)(ki+1))
同样的可以得到 u ( i , j + 1 ) − u ( i , j ) − [ u ( i , j ) − u ( i , j − 1 ) ] △ y 2 \frac{u(i,j+1)-u(i,j)-[u(i,j)-u(i,j-1)]}{\triangle y^2} △y2u(i,j+1)−u(i,j)−[u(i,j)−u(i,j−1)] 对应的 4 △ y 2 ∑ k i = 0 N x − 1 ∑ k j = 0 N y − 1 u ~ ( k i , k j ) λ y j s i n ( π ( i + 1 / 2 ) ( k i + 1 ) N x ) s i n ( π ( j + 1 / 2 ) ( k j + 1 ) N y ) \frac{4}{\triangle y^2}\sum^{N_x-1}_{k_i=0}\sum^{N_y-1}_{k_j=0}\tilde u(k_i,k_j)\lambda_{y_j} sin(\frac{\pi(i+1/2)(k_i+1)}{N_x})sin(\frac{\pi(j+1/2)(k_j+1)}{N_y}) △y24∑ki=0Nx−1∑kj=0Ny−1u~(ki,kj)λyjsin(Nxπ(i+1/2)(ki+1))sin(Nyπ(j+1/2)(kj+1)) (2)
其中
λ
y
j
=
2
∗
[
cos
(
π
(
k
j
+
1
)
N
y
)
−
1
]
\lambda_{y_j}=2*[\cos(\frac{\pi(k_j+1)}{N_y})-1]
λyj=2∗[cos(Nyπ(kj+1))−1]
对于
p
i
,
j
p_{i,j}
pi,j ,也可以使用DST:
p
(
i
,
j
)
=
4
∑
k
i
=
0
N
x
−
1
∑
k
j
=
0
N
y
−
1
p
~
(
k
i
,
k
j
)
s
i
n
(
π
(
i
+
1
/
2
)
(
k
i
+
1
)
N
x
)
s
i
n
(
π
(
j
+
1
/
2
)
(
k
j
+
1
)
N
y
)
p(i,j)=4\sum^{N_x-1}_{k_i=0}\sum^{N_y-1}_{k_j=0}\tilde p(k_i,k_j)sin(\frac{\pi(i+1/2)(k_i+1)}{N_x})sin(\frac{\pi(j+1/2)(k_j+1)}{N_y})
p(i,j)=4∑ki=0Nx−1∑kj=0Ny−1p~(ki,kj)sin(Nxπ(i+1/2)(ki+1))sin(Nyπ(j+1/2)(kj+1)) (3)
由 (3)=(1)+(2) 可以有: p ~ ( k i , k j ) = [ λ x i △ x 2 + λ y j △ y 2 ] u ~ ( k i , k j ) \tilde p(k_i,k_j)=[\frac{\lambda_{x_i}}{\triangle x^2}+\frac{\lambda_{y_j}}{\triangle y^2}]\tilde u(k_i,k_j) p~(ki,kj)=[△x2λxi+△y2λyj]u~(ki,kj)
所以
u
~
(
k
i
,
k
j
)
=
p
~
(
k
i
,
k
j
)
/
[
λ
x
i
△
x
2
+
λ
y
j
△
y
2
]
\tilde u(k_i,k_j)=\tilde p(k_i,k_j) / [\frac{\lambda_{x_i}}{\triangle x^2}+\frac{\lambda_{y_j}}{\triangle y^2}]
u~(ki,kj)=p~(ki,kj)/[△x2λxi+△y2λyj], 得到
u
~
(
k
i
,
k
j
)
\tilde u(k_i,k_j)
u~(ki,kj) 后在反求 IDST 就可以得到
u
(
k
i
,
k
j
)
u(k_i,k_j)
u(ki,kj)
实际做法
文章求解高度时构建了像素强度I到放射率R的映射关系,称为lookup table,用于存放图像的两个一阶梯度 (还有一些其他的参数), 一阶梯度相减得到二阶梯度
% Laplacian
gyy(j+1,k) = gy(j+1,k) - gy(j,k);
gxx(j,k+1) = gx(j,k+1) - gx(j,k);
得到p
p = gxx + gyy;
p的DST-II
tt = dst(p2);
p2sin = dst(tt')';
p ~ ( k i , k j ) / [ λ x i △ x 2 + λ y j △ y 2 ] \tilde p(k_i,k_j) / [\frac{\lambda_{x_i}}{\triangle x^2}+\frac{\lambda_{y_j}}{\triangle y^2}] p~(ki,kj)/[△x2λxi+△y2λyj]
denom = (2*cos(pi*x/(xdim-1))-2) + (2*cos(pi*y/(ydim-1)) - 2);
p3 = p2sin./denom;
反求 IDST 就可以得到 u ( k i , k j ) u(k_i,k_j) u(ki,kj)
hh = idst(p3); img_tt = idst(hh')';