Mojette Transform 是由Polytech Nantes的IRCCYyN实验室的Jeanpierre Guédon首先提出的一种离散的几何转换,它来源于Radon transform,是Radon transform的离散的更准确的表达。

Radon Transform:

Radon transform 是将在一个坐标系中的几何形状以一定的角度映射到一个新的坐标上,如上图所示,在笛卡尔坐标系中的椭圆以角度θ映射到了一个新的坐标系中,其公式如下:

proj(t,θ)=∫∫f(x,y)δ(t-x.cosθ+y.sinθ)dxdy

符号δ表示面积相等

Mojette Transform:

Radon是连续的,Mojette则是离散的。

其转换公式为

proj(p,q,b)=∑∑f(k,l)Δ(b-pl+qk)

其中,q、p为投影的方向,k、l为坐标,b=pl-qk。 可以证明,在(p,q)方向上,共有nbins=(H-1)|q|+(W-1)|p|+1个新的坐标值(如上图,在4*4的矩形中,在(1,0)方向上有4个新的坐标值,在(1,1)方向上有7个新的坐标值)

任意大小的矩形的mojette变换的算法如下:

Begin

rectangle's height and width is H and W, the projection angle is p and q

nbins=(H-1)|q|+(W-1)|p|+1

//为了方便,我们从0开始计算的新的坐标值,即从0到nbins-1

//计算补偿值,每个坐标的投影后的新的坐标减去这个补偿值即可

HL=p(H-1)

HR=p(H-1)-q(W-1)

LR=-q(W-1)

LL=0

if HL<HR then offset=HL else offset=HR

if LR<offset then offset=LR

if LL<offset then offset=LL

//开始计算每个坐标对应的投影的值

for k=0:W-1

for l=0:H-1

b=pl-qk

proj(b-offset)+=f(k,l)

end for

end for

end

例:

如上图,假设为5*4的矩阵,横坐标k,纵坐标l,投影方向为(2,1),首先对四个角计算其b值,将最小的设为offset,以(0,0)这一列为例计算其投影之后的值,在这一列上,共有(0,0),(2,1),(5,3)三个坐标,其b(b=pl-qk)值都为0,但是我们是从0开始索引,所以b-offset=4即为我们新的投影的坐标,而在新投影上的值为这三个值的和。

通过以上算法即可计算在任意大小的矩阵中任意投影方向的Mojette变换,但在实际应用中,反mojette变换才是最有用的,inverse-mojette将在下一篇博客中具体介绍。

如果有兴趣,可以登录http://www.mojette.net/ 查看关于Mojette的一个小游戏,其正是inverse-mojette变换的具体实例。

Mojette的更多相关文章

  1. {ICIP2014}{收录论文列表}

    This article come from HEREARS-L1: Learning Tuesday 10:30–12:30; Oral Session; Room: Leonard de Vinc ...

随机推荐

  1. css ul li 横向排列

    因为li是块级元素,默认占一行的,要想实现横向排列,一般通过以下两个方法:float:left这样设置有一个问题,li浮动以后则脱离了文本流,即不占位置,如果它的父级元素有具体的样式且没有固定宽高,建 ...

  2. ios枚举规范

  3. python 调用封装好的模块

    有些时候,我们写了些通用的模块,想调用的时候,该怎么操作呢? 以下是我写的一个简单的登录作为例子: 在cla.py中定义了一个Login_gues.pyt(带参数的实例):在cc.py下调用这个; 1 ...

  4. 汽车ABS系统-第一周作业

    ABS系统也成防抱死系统(Anti-lock Braking System),由罗伯特·博世有限公司所开发的一种在摩托车和汽车中使用,它会根据各车轮角速度信号,计算得到车速.车轮角减速度.车轮滑移率: ...

  5. leetcode 165

    才一周没刷leetcode,手就生了,这个题目不难,但是完全AC还是挺费劲的. 题目描述: Compare two version numbers version1 and version2.If v ...

  6. C语言第三次作业

    #include<stdio.h>//1.三角形 int main() { printf("*\n"); printf("**\n"); print ...

  7. STM32 assert_param

    在STM32的固件库和提供的例程中,到处都可以见到assert_param()的使用.如果打开任何一个例程中的stm32f10x_conf.h文件,就可以看到实际上assert_param是一个宏定义 ...

  8. Leetcode: Convex Polygon

    Given a list of points that form a polygon when joined sequentially, find if this polygon is convex ...

  9. ADT(Android Developer Tools) GIT功能不全,远程提交的时候账户密码不能保存账户和密码解决方式

    需要安装Eclipse的GIT插件EGIT http://download.eclipse.org/egit/updates/

  10. Javascript模块化编程(三):require.js的用法(转)

    这个系列的第一部分和第二部分,介绍了Javascript模块原型和理论概念,今天介绍如何将它们用于实战. 我采用的是一个非常流行的库require.js. 一.为什么要用require.js? 最早的 ...