首页 > 其他分享 >9点拟合亚像素方法

9点拟合亚像素方法

时间:2023-05-11 15:24:11浏览次数:51  
标签:begin right end 0.166667 像素 pmatrix 拟合 方法 left

9点插图

本文方法取自硕士毕业论文《基于几何特征的快速模板匹配算法》,豆丁网链接:基于几何特征快速模板匹配算法 - 豆丁网 (docin.com)。仅供参考,由于拟合二次曲面耗时较大,工业应用一般不使用这种方法,而用拟合平面抛物线代替。本文思路是先用整数边缘点${ \left ( x,y \right ) }$周围9个点拟合一个二次曲面,然后计算这个二次曲面在整数边缘点梯度方向上的曲线的顶点作为拟合的亚像素点。整数边缘点${ \left ( x,y \right ) }$可以使用Canny算子得到。现在我们先拟合二次曲面,定义待求二次曲面函数如下:

$${ z=ax^{2}+by^{2}+cxy+dx+ey+f }$$

将整数坐标${ \left ( x,y \right ) }$周围9个点依次代入上式。为了计算方便将这9个点都减去${ \left ( x,y \right ) }$平移到原点处,计算完成后再平移回来,不影响效果。可得如下方程:

$${ \begin{pmatrix} 1 & 1 & 1 & -1 & -1 & 1 \\ 0 & 1 & 0 & 0 & -1 & 1 \\ 1 & 1 & -1 & 1 & -1 & 1 \\ 1 & 0 & 0 & -1 & 0 & 1 \\ 0 & 0 & 0 & 0 & 0 & 1 \\ 1 & 0 & 0 & 1 & 0 & 1 \\ 1 & 1 & -1 & -1 & 1 & 1 \\ 0 & 1 & 0 & 0 & 1 & 1 \\ 1 & 1 & 1 & 1 & 1 & 1 \end{pmatrix} \begin{pmatrix} a\\ b\\ c\\ d\\ e\\ f \end{pmatrix}=\begin{pmatrix} z\left ( -1,-1 \right ) \\ z\left ( 0,-1 \right ) \\ z\left ( 1,-1 \right ) \\ z\left ( -1,0 \right ) \\ z\left ( 0,0 \right ) \\ z\left ( 1,0 \right ) \\ z\left ( -1,1 \right ) \\ z\left ( 0,1 \right ) \\ z\left ( 1,1 \right ) \end{pmatrix} }$$

可以看出方程左侧系数全是常量,因此可以提前算好以节省时间。利用求解公式${ \mathbf{K}=\left ( \mathbf{X^{T}}\mathbf{X} \right )^{-1} \mathbf{X^{T}}\mathbf{Y} }$可得:

$${ \begin{pmatrix} a\\ b\\ c\\ d\\ e\\ f \end{pmatrix}=\begin{pmatrix} 0.166667 & -0.333333 & 0.166667 & 0.166667 & -0.333333 & 0.166667 & 0.166667 & -0.333333 & 0.166667 \\ 0.166667 & 0.166667 & 0.166667 & -0.333333 & -0.333333 & -0.333333 & 0.166667 & 0.166667 & 0.166667 \\ 0.25 & 0 & -0.25 & 0 & 0 & 0 & -0.25 & 0 & 0.25 \\ -0.166667 & 0 & 0.166667 & -0.166667 & 0 & 0.166667 & -0.166667 & 0 & 0.166667 \\ -0.166667 & -0.166667 & -0.166667 & 0 & 0 & 0 & 0.166667 & 0.166667 & 0.166667 \\ -0.111111 & 0.222222 & -0.111111 & 0.222222 & 0.555556 & 0.222222 & -0.111111 & 0.222222 & -0.111111 \end{pmatrix} \begin{pmatrix} z\left ( -1,-1 \right ) \\ z\left ( 0,-1 \right ) \\ z\left ( 1,-1 \right ) \\ z\left ( -1,0 \right ) \\ z\left ( 0,0 \right ) \\ z\left ( 1,0 \right ) \\ z\left ( -1,1 \right ) \\ z\left ( 0,1 \right ) \\ z\left ( 1,1 \right ) \end{pmatrix} }$$

然后就是计算整数坐标${ \left ( x,y \right ) }$的梯度。可以用Sobel算子的梯度${ \left ( G_{x},G_{y} \right ) }$,也可以用上述二次曲面函数在此处的偏导数${ \left ( \frac{\partial z}{\partial x}, \frac{\partial z}{\partial y} \right ) }$作为梯度(由于我们平移了坐标所以实际上就是${ z\left ( x,y \right ) }$在原点处的梯度)。这两种梯度经过对比效果差不多。最终就是求下式所表示的三维曲线的顶点。式中k是梯度直线的斜率${ \frac{G_{y}}{G_{x}} }$,当然在三维空间中它代表平面:

$${ \left\{\begin{matrix} z=ax^{2}+by^{2}+cxy+dx+ey+f \\ y=kx,需要k存在 \end{matrix}\right. }$$

消去y并对x求导数,使其为0,有:

$${ \frac{\mathrm{d} z}{\mathrm{d} x} = 2ax+2bk\left ( kx \right )+2c\left ( kx \right )+d+ek=0 }$$

解之可得亚像素量,为了区分整数坐标${ \left ( x,y \right ) }$,这里使用${ {x}',{y}' }$表示亚像素结果:

$${ \left\{\begin{matrix} {x}'=-\frac{ek+d}{2\left ( bk^{2}+ck+a \right )}\\ {y}'=kx \end{matrix}\right. }$$

当k不存在时:

$${ \left\{\begin{matrix} {x}'=\lim_{k \rightarrow \infty }-\frac{ek+d}{2\left ( bk^{2}+ck+a \right )}=0 \\ {y}'=\lim_{k \rightarrow \infty }kx=\frac{e}{2b} \end{matrix}\right. }$$

最终亚像素边缘为:

$${ \left\{\begin{matrix} x_{sub}=x+{x}' \\ y_{sub}=y+{y}' \end{matrix}\right. }$$

理论如上。实际撸代码时候可能不是区分k存不存在分别计算亚像素边缘,而是k<1和k>=1分别计算结果。

标签:begin,right,end,0.166667,像素,pmatrix,拟合,方法,left
From: https://www.cnblogs.com/mengxiangdu/p/17390552.html

相关文章

  • java代码中fastjson生成字符串和解析字符串的方法和javascript文件中字符串和json数组
    1.java代码中fastjson生成字符串和解析字符串的方法List<TemplateFull>templateFulls=newArrayList<TemplateFull>();JSONArrayjsonArr=newJSONArray();jsonArr.addAll(templateFulls);StringjsonStr=jsonArr.toJSONString();System.out.pr......
  • postman使用方法
    使用Postman测试URL,需要输入以下信息:请求方法(RequestMethod):请求方法指定HTTP/HTTPS请求中使用的动作类型,比如GET、POST、PUT、DELETE。URL(UniformResourceLocator):URL是识别资源在网络上位置的字串请求头部(Headers):请求头允许客户端向服务器传递请求的附加信息,例......
  • 无法加载文件或程序集“ Newtonsoft.Json”或其依赖项之一清单定义与程序集引用不匹配
    无法加载文件或程序集“Newtonsoft.Json”或其依赖项之一清单定义与程序集引用不匹配的解决方法当一个程序中引用了不同版本的 Newtonsoft.Json.dll,又无法更改时候,可能会报此类错误,那么解决的方法如下:1、把不同的版本的dll放在bin目录下的ref文件夹2、在app.config或者web.......
  • 虚拟机与主机互传文件方法分享
    现在虚拟机的使用已经非常普及,无论新手学习,还是运维工程师搭建虚拟化平台,都会使用到虚拟机。对个人用户来说,非常方便就能搭建很多操作系统进行学习;对企业用户来说更是降低了服务器的硬件成本。使用虚拟机的时候,当安装完成虚拟机以后,我们很多时候会使用到虚拟主机和主机之间互传文......
  • 谷歌扩展装不上,清单文件缺失或不可读取 无法加载清单。解决方法
    问题在装谷歌扩展的时候提示谷歌浏览器无法装扩展提示清单文件缺失或不可读取解决方法不要从左下角快捷启动栏启动,从桌面管理员权限启动谷歌浏览器即可错误原因快捷启动栏启动权限不够......
  • drf重写authenticate方法实现多条件登录(源码分析)
    drf重写authenticate方法实现多条件登录(源码分析)1.思路JWT拓展的登录视图中,在接受到用户名和密码时,调用的也是Django的认证系统中提供的authenticate()来检查用户名与密码是否正确.我们可以通过修改Django系统的认证后端来支持登录账号既可以是用户名也可以是手机号修......
  • 音频转文字/视频转文字的方法【免费】
    摘自:https://zhuanlan.zhihu.com/p/396228243如果想把音频(mp3)文件一键转成文字或视频文件一键转成文字的话就看看这篇文章,我整理了一下手头的方法,比较简单,而且适合新手。一.录音转文字助手(免费版,最大10M)可以配合mp3分割工具https://www.xunjiepdf.com/audio-to-text这是......
  • js基础---js操作dom元素节点的方法
    replaceWith():使用括号内元素替换当前元素remove():删除当前元素解决点击a标签不跳转页面的方法......
  • MybatisPuls条件构造器allEq方法详解
    用途当传入参数很多的时候,可以直接用map接受参数,然后用map构造条件构造器,大大加快了编程的速度。官网可以看见官网上说用allEq就可以传入Map参数进行条件查询,下面对allEq传入的每一个参数进行详细的解释paramsMapparams代表传入的参数列表,可以是接受的前台传过来的Map参数......
  • 主机服务器tmp目录报php病毒木马的解决方法
    Linux和Windows主机的tmp目录都是临时文件存放的目录,比如程序运行产生的临时文件和用户上传的临时文件都会在这个目录生成。有时候这个目录会产生病毒或木马程序,大部分都php病毒木马,这种情况一般是黑客利用网站程序漏洞上传了php病毒木马,或者是因为php.ini里面的upload_tmp_dir配......