基于移动最小二乘(MLS)的图像扭曲刚性变形python实现

基于移动最小二乘(MLS)的图像扭曲刚性变形python实现

简单介绍一下基于mls的图像变形

先假设我们的图片像素为h乘w,这个算法的一个流程是:先选择图像上面的一些控制点,比如我选中人脸五官的点,那我们现在就有了这几个控制点的坐标和一个包含h乘w个图片像素点坐标的矩阵,使用这些数据就可以预先计算出一系列的中间变量,之后就可以输入图像变形后控制点的坐标位置(换种说法就是通过改变控制点控制图像变形)计算得到另一个包含h乘以w个坐标的矩阵,这个矩阵每个元素对应原来的矩阵每个元素。最后把原图像坐标的信息一一对应地插值到现在这个矩阵的坐标位置完成图像变形。

直接上代码

import numpy as np
import cv2

class trans():

def __init__(self, img, pi):
    width, height = img.shape[:2]
    pcth = np.repeat(np.arange(height).reshape(height, 1), [width], axis=1)
    pctw = np.repeat(np.arange(width).reshape(width, 1), [height], axis=1).T

    self.img_coordinate = np.swapaxes(np.array([pcth, pctw]), 1, 2).T
    self.cita = compute_G(self.img_coordinate, pi, height, width)
    self.pi = pi
    self.W, self.A, self.Z = pre_compute_waz(self.pi, height, width, self.img_coordinate)
    self.height = height
    self.width = width

def deformation(self, img, qi):

    qi = self.pi * 2 - qi
    mapxy = np.swapaxes(np.float32(compute_fv(qi, self.W, self.A, self.Z, self.height, self.width, self.cita, self.img_coordinate)), 0, 1)
    img = cv2.remap(img, mapxy[:, :, 0], mapxy[:, :, 1], borderMode=cv2.BORDER_WRAP, interpolation=cv2.INTER_LINEAR)

    return img

def pre_compute_waz(pi, height, width, img_coordinate):

<
  • 6
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
移动最小二乘MLS)曲面重构是一种曲线曲面拟合的方法,它是在最小二乘法的基础上进行改进的。通过添加权函数等步骤,MLS可以更好地适应数据点的分布情况,从而实现更准确的曲面重构。\[3\] 在MLS曲面重构中,首先需要对数据点进行采样,并选择适当的权函数。然后,通过计算每个采样点周围的邻域点的权重,确定每个采样点的权重矩阵。接下来,使用最小二乘法来拟合曲面,通过求解线性方程组来确定曲面的系数。最后,根据拟合的曲面系数,可以对新的点进行曲面重构。\[2\] MLS曲面重构方法在计算机图形学、计算机辅助设计等领域有广泛的应用。它可以用于曲面重建、曲面平滑、曲面插值等任务,能够有效地处理不规则数据点集合,并生成平滑的曲面。\[1\] 总之,移动最小二乘MLS)曲面重构是一种基于最小二乘法的曲线曲面拟合方法,通过添加权函数等步骤,可以更好地适应数据点的分布情况,实现准确的曲面重构。它在计算机图形学和计算机辅助设计等领域有广泛的应用。 #### 引用[.reference_title] - *1* [基于移动最小二乘法的曲线曲面拟合(python语言实现)](https://blog.csdn.net/baidu_38127162/article/details/82380914)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* *3* [移动最小二乘法(MLS)曲线曲面拟合C++代码实现](https://blog.csdn.net/liumangmao1314/article/details/54179526)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值