分类目录归档:布道

IEEE 754 的 inf 比较问题

首先上结论: 当涉及浮点数比较时,一定要考虑比较符号两侧都是inf的情况.

原因: inf==inf,inf<=inf,inf=inf 这三个比较都为真(-inf同理),而这种结果可能与我们的期望不符.

解决方法:
1. 如果为真是可以接受的,那么直接使用比较运算符,例如a<=b
2. 如果为真是不可以接受的,那么应当使用作差,例如(a-b)<=0, 这种情况下,当a和b都为inf时,inf之间的运算会输出NaN,从而导致比较结果为false

例如,我有这样一个应用场景:

有射线R和两个平面S0及S1,我们需要求射线R与平面S0的交点p0,以及射线R与平面S1的交点P1. 且要求p0不能比p1离射线起点更远(可以重合)

假如我们用直线的参数方程来描述交点,显然,上面的目标很容易用 t0<=t1 … Read More

Python for C++ Programner

这里谈一下个人的学习建议.

首先可以阅读官方的入门教程, 看完这一部分, 对于一个熟练的C++程序员, 应该可以凑合写出可堪一用的代码了. 对于大部分不以Python为主要工作语言的开发者,到此基本就足够了.

如果有时间,我建议直接阅读Python in a Nutshell第七章之前的内容(不含第七章),并不用完全看懂,大部分细节也不用去记忆,只需要看完即可,至此,你就能基本了解Python的运行机制, 写出质量稳定可控(不会存在低级错误)的代码了.

上面两步完成后, 对一个熟悉C++的程序员而言, 基本任何Level的Python资料都可以看了. 你可以继续看Python in

Read More

字符集与编码

近义名词

  • 多字节字符(Multibyte char) ~ 变长编码, 一个字符可能由多个字节(字节数不定)表示, 因此每个需要按一定规则添加额外的信息,以分割字符.
  • 宽字节字符(Wide char) ~ 定长编码, 使用定长的字节表示字符,因此字符之间没有额外的分割信息.

字符绘制基础

  • 假设有函数drawChar(charSet,code_point), drawChar将根据(charSet,code_point)两个参数在
Read More

图像的简单相位配准 with MATLAB

相位配准概述
相位配准是一种非常经典的理论,理论论述互联网上有很多,我直接给出一个流程图,简述重点。

算法流程图

  • 相位配准的原始理论互联网上已经很多,我不过多赘述,使用完全相同的两个图像在空间内平移进行推导。只强调一下,在实际使用时,可以证明,只要两个图像有完全相同的部分,那么就可以使用相位配准
    结论图像
  • 带有旋转/缩放的相位配准不要看普通教材,普通教材愚蠢的试图先绕图像中心旋转缩放,再进行平移。事实上,只要有空间变换(或刚体运动学)知识,就可以知道如果刚体可以仅通过缩放和旋转从A变为B,那么必然可以确定一个空间点O,使刚体A仅绕O进行一次缩放和一次旋转到达B,也就是说,只要我们确定了点O,那么进行对数极换元就可以直接确定旋转和缩放参数。
  • 如果只是绕中心旋转的图片,那么做对数极换元,再做平移的相位配准即可,我必须说,这毫无意义,这里面的工作最大头为对数极换元,which和图像处理没有什么关系。
  • MATLAB 2014a后自带了一个 imregcor 函数,它对重合区域较大(目测至少20%)的两个图像进行相位配准非常高效,平移,旋转 缩放都OK。本文末尾附带的是一个我的实现,它的重难点在于附带了一个图像拼接程序,要比相位配准中求出坐标更复杂。

function runrun()
PhCorrelationRotation('cameraman.png','cameraman_part_rotate_scaling.png',0)
end

function PhCorrelationRotation(baseimgpath,sampleimgpath,deltaH)
if 
Read More