【图像处理】代码优化技巧

在手机端的图像处理程序中,为了提升算法运行速度,需要对程序代码进行优化。而如何优化?需要在哪些地方进行优化?这些都是我们需要思考的问题。

因此,这篇文章主要对代码优化进行相关总结,并将不定期更新,作为长期的总结笔记。

for循环中,用”!=0”代替”小于N”进行条件判断。


图像算法实现的过程中,会利用for循环语句用重复的操作处理连续的数据。
而在for循环语句中,需要进行条件判断,用“!=0”代替“小于N” 进行条件判断,能够减少1个指令,这是因为转换为汇编指令时,与零比较跳转(CBZ/CBNZ)比跳转指令(B/BL/BX/BLX/BXJ)效率高,在进行N次循环的循环体内则可以减少N个指令的执行。

for(i=0;i<256;i++)

可以修改成:

for(i=256;i!=0i--)

用指针自增代替数组寻址来获取数据。


一般情况下,我们习惯用array[]来获取图像中某个像素点的数据。但是这种方式获取数据的过程需要涉及:
1、获取array的首地址;
2、首地址加上数据位置得到新的内存地址;
3、获取数据。

而指针自增的方式则是,
1、用ptr++指针指向待获取数据的地址;
2、获取数据时直接调用*ptr即可。

另外,在图像处理中,图像一般都比较大(即图像数据很多),这样的情况下,用指针自增的方式可以显著的提升代码运行速度。

如:

for(i=0;i<256;i++)
{
    array[i] ...  ;
}

可以修改为:

 for(i=256;i!=0;i--)
 {
     *ptr ... ;
     prt++;
 }

用查表法对三角函数进行优化


使用三角函数时,可以:
1、按照所需精度预先计算出需要覆盖的范围
2、根据范围内的角度算出三角函数值,在使用时进行查表即可得到相应值。

如,
需要计算到0.001的精度时,角度的取值范围为-90到90。
因此需要预先计算出:90-(-90)/0.001=180000+1个角度对应的三角函数值。

然后在取值时,如果要取sin(3°),则是 sinValue[(3+90)/0.0001].

另外,如果三角函数涉及到除法的计算,或者说需要应用到三角函数的倒数,也可以用查表法的方式进行优化。
即将“1/三角函数”如 1/sin(…) 预先计算好作为查表用。


判断是否为偶数


之前一直都用 y%2==0来判断是否为偶数,其实还可以通过判断 y&1==0 来判断是否为偶数。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值