CUDA编程实例:图像处理的归一化相关系数计算

在图像处理中,我们可以通过计算两个相同大小、灰度图像的归一化相关系数判断图像的相关性大小。其取值范围在[-1,1]之间,-1表示图像不相关,1表示图像完美相关。

该方法在模板匹配中经常使用,通过计算模板图像与输入图像子集的相关性信息,判断图像中是否包含该模板,如果在某个位置处强相关,则返回匹配位置。只适合图像内容未发生旋转,形变,缩小放大等情况。即只有平移。

归一化互相关的流行源于其幅度的独立性(amplitude independence),这就意味着即使两幅图像的亮度不同,但对于其统计信息也是稳定的。

来看看公式:

\gamma(s,t) = \frac{\sum_x \sum_y[I(x,y)-\bar{I}(x,y)][T(x-s,y-t)-\bar{T}] }{\sqrt{\sum_x \sum_y[I(x,y)-\bar{I}(x,y)]^2 \sum_x \sum_y[T(x,y)-\bar{T}(x,y)]^2}}

 其中I和T,表示图像和模板,\bar{T}为模板像素的品均值,\bar{I}为图像中对应模板范围的像素的平均值。

归一化互相关计算的优化方案,为了避免平均值计算,采用加和手法预先求出统计量,一下是计算公式。

\frac{N\sum{IT}-\sum{I}\sum{T}}{\sqrt{(N\sum{I^2-(\sum{I})^2})( N\sum{T}^2-(\sum{T})^2)}}

这里使用sum(T)/N 和sum(I)/N 代替\bar{T}和\bar{I},并在分子分母同时乘N,产生一个完全使用加和来表示的系数。

所以预先要求的就是图像和模板的统计量SumI,SumT,SumIT,sumI^2,sumT^2

使用上述值计算分子分母即可。

一般情况下模板是固定的,所以可以预先计算模板的统计量和分母的子表达式。

一般采用双精度计算,此外乘以平方根的倒数,比除以平方根运算更快。

这样算法只需要计算3个值即可,SumI,SumIT,SumI^2。

在CUDA流处理器中,整数乘加运算通常使用FMA(Fused Multiply-Add)指令。FMA指令执行一个乘法操作,然后将结果与一个累加操作相结合,以单一的指令完成这两个操作。这有助于提高性能,减少指令的数量。

浮点数乘加运算也可以通过FMA指令来实现,其中操作数是浮点数。这使得在单个指令中执行乘法和加法,从而提高了执行效率。

cuda中提供了以下几种将数据复制到gpu中的方法。

1.使用全局内存或纹理内存存储图像或者模板,(较大一些)

2.使用常量内存存储模板或者其他可能的特定模板参数(可达64kb)

3.使用共享内存来保存图像和或模板值以备重用(较小)。

未完结--等后续

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值