两向量的夹角

怎么计算两个向量间的夹角呢?

这里主要分两种情况,对于二维向量和三维向量来分别讨论。

1. 二维向量

二维向量的情况相对简单,根据向量间的点乘关系

v1v2=||v1||||v2||cosθ

可以得到:
θ=acos(v1v2/||v1||||v2||)

如果调用C/C++数学库函数acos,计算得到的结果的取值范围在 [0,π]

这里得到的夹角并不在0到360度之间(或者-180到180度),也就是说得到的结果并不能告诉我们 v1 v2 前面或者 v1 v2 后面,考虑到atan2函数可以用来计算出角度准确处于哪一个象限,可以用atan2来计算夹角。
计算从v2到v1的夹角公式:

θ=atan2(v2.y,v2.x)atan2(v1.y,v1.x)

需要注意的是:atan2的取值范围是 [π,π] ,在进行相减之后得到的夹角是在 [2π,2π] ,因此当得到的结果大于 π 时,对结果减去 2π ,当结果小于 π 时,对结果加上 2π

2. 三维向量

2.1 使用旋转轴和旋转角的方式

旋转角可以使用上面讨论的方式得到:

θ=acos(v1v2/||v1||||v2||)

旋转轴是两个向量的叉乘向量,长度是 ||v1||||v2||sin(θ)
需要注意的是在acos取值在0度和180度这两个特殊值的时候,要注意一下,当两个向量夹角是0度或者180度的时候,它们是平行的关系(同向或者反向),当夹角是0度时,旋转轴可以是任意轴,因为根本就没有旋转。当夹角是180度的时候,旋转轴只要和向量呈90度夹角即可,可以有无穷多个可能的选择轴。

2.2 使用四元数的方式

使用四元数来旋转一个向量,使用下面的方式:
p2 = q * p1 * conj(q)
其中:
p2 是旋转之后的向量
p1是旋转之前的向量
q是用来旋转的四元数
在这里知道p2和p1,用来求解四元数还是相当麻烦的。因此一个比较好的思路仍然是使用上面旋转轴和旋转角的方式,不过将结论转换成四元数罢了。
关于转换的方式,可以参考我写的另外一篇文章《旋转变换(三)四元数》

参考文献:

  1. Maths - Angle between vectors
  2. Maths - Trigonometry - Inverse trig functions
  3. Maths - Issues with Relative Angles
### FPGA上的ISP图像信号处理 在FPGA上实现ISP(图像信号处理器)涉及多个模块的设计与集成,这些模块共同完成从原始图像数据到最终高质量图像的转换过程。具体来说,在FPGA平台上构建ISP主要包括以下几个方面: #### 1. 数据输入接口设计 为了接收来自CMOS/CCD传感器的数据流,通常会采用MIPI CSI-2、LVDS或Parallel等标准协议来作为输入接口。该部分负责将模拟电压水平转换为数字信号,并将其传输给后续处理单元。 #### 2. 基本预处理操作 进入FPGA后,首先要执行一些基础性的预处理任务,比如黑电平补偿和线性化调整。这一步骤旨在消除由于环境光照变化引起的固定模式噪声以及恢复真实场景亮度分布特性[^1]。 ```verilog module black_level_compensation ( input wire clk, input wire rst_n, input wire [9:0] raw_data_in, //假设10位RAW数据宽度 output reg [9:0] compensated_data_out ); always @(posedge clk or negedge rst_n) begin if (!rst_n) compensated_data_out <= 10'd0; else compensated_data_out <= (raw_data_in >= BLACK_LEVEL_OFFSET)?(raw_data_in - BLACK_LEVEL_OFFSET):10'b0; //BLACK_LEVEL_OFFSET定义为全局参数 end endmodule ``` #### 3. 高级图像增强算法实现 接下来是应用更复杂的图像优化技术,如降噪、锐度提升、色彩校正矩阵(CCM)计算、伽马校正等等。对于LSC(Lens Shading Correction),则是在此阶段被引入用于修正由镜头造成的暗角效应[^3]。 针对LSC的具体做法通常是预先测量不同位置处光强衰减值并存储在一个查找表(LUT)中;当实际拍摄时,则依据当前像素坐标查询对应权重因子w(x,y),再乘以原RGB分量从而达到均匀照明效果: \[ R'(x,y)=R(x,y)\times w(x,y), G'(x,y)=G(x,y)\times w(x,y), B'(x,y)=B(x,y)\times w(x,y). \] 其中\(w(x,y)\in[0,1]\),表示某一点相对于中心区域应增加多少倍率。 #### 4. 输出格式转换 最后经过一系列变换后的图像还需重新编码打包成适合显示或其他用途的形式输出。常见的有YUV/YCbCr颜色空间映射、JPEG压缩编码等功能都可以考虑加入到最后一个环节当中去。 综上所述,在FPGA上搭建完整的ISP流水线不仅考验硬件资源分配技巧同时也涉及到大量软件层面的知识积累。通过合理规划各个子系统的布局连接方式能够有效提高整体性能表现。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值