计算机视觉——Morphing and Carving

视觉github:https://github.com/g107904/Computer_Vision_task

Morphing:
Morphing是物体的平均,包括几何和外观的平均;
对于两幅图像image_s,image_t,中间结果image,有

    \[\left\{ \begin{array}{rcl} image = image_s,       &      & {t = 0}\\ image = image_t,    &      & {t = 1} \end{array} \right.\]

第一步:
image_simage_t三角剖分。
第二步:
对于三角形ABC而言,中间结果的三角形为

    \[\left\{ \begin{array}{rcl} A = (1-t)*A_s+t*A_t       \\ B = (1-t)*B_s+t*B_t          \\ C = (1-t)*C_s+t*C_t \end{array} \right.\]

第三步:
对于三角形内部的点,其相对于三个顶点有一个仿射不变的表示

    \[X = \alpha A_s + \beta B_s + \gamma C_s\]

    \[X_t = \alpha A_t + \beta B_t + \gamma C_t\]

    \[\alpha + \beta + \gamma = 1\]

证明:

    \[ \begin{split} \overrightarrow{OX} = \overrightarrow{OA}+ \beta \overrightarrow{AB} + \gamma \overrightarrow{AC} = \overrightarrow{OA}+ \beta (\overrightarrow{OB} - \overrightarrow{OA}) + \gamma (\overrightarrow{OC} - \overrightarrow{OA}) =  (1 - \beta - \gamma) \overrightarrow{OA} + \beta \overrightarrow{OB} + \gamma \overrightarrow{OC}  \end{split} \]

则有

    \[\begin{bmatrix} A_x & B_x  & C_x \\ A_y & B_y & C_y \\ 1 & 1 & 1 \end{bmatrix} \begin{bmatrix} \alpha \\ \beta \\  \gamma \end{bmatrix}  = \begin{bmatrix} x \\ y \\  1 \end{bmatrix}\]

从中间结果的每个点求得\alpha,\beta,\gamma,后向变换得到对应点,如果不是整数,插值
Carving:
Carving是依据图像内容的物体缩放;
Seam: S^y = {(i,y(i)) | i = 1,2,...,M} s.t.|y(i)-y(i-1)| \le k
Seam Cost: E(S^y) = \sum{i = 1}^{M} e(S^y(i))
Goal: S^{*} = argmin(E(S^y))
第一步:
准备能量函数,将彩色图像转化为灰度图像,Im = rgb2gray(Im)
• 计算图像的梯度值
• 采用梯度的L1或者L2范数来计算能量矩阵
第二步:
初始化两个矩阵
• 将值函数和路径矩阵设置成和能量矩阵的同样大小
• 将值矩阵的第一列初始化为能量矩阵的第一列
• 将路径矩阵的第一列均初始化为0
第三步:
从第二列开始,首先处理第二列的第一个元素
• 找到它在前一列的邻接节点,|y(i)-y(i-1)| \le 1
• 找到邻接节点中的最小值,并对应像素记录在路径矩阵中
• 将最小值和这个像素点的能量值相加
• 将最小的方向记录在路径矩阵中
第四步:
• 找到最后一列的最小元素
• 找到这个像素点在最短路径上的前一个节点

发表评论

电子邮件地址不会被公开。 必填项已用*标注