在Matlab中优化一个简单的函数(直方图距离)

时间:2013-02-28 13:24:34

标签: image matlab optimization image-processing histogram

我描述了我的代码并发现这个特定的功能花费了太多时间。关于如何改进此代码的任何建议?

function s = compute_distance_hist(h1,h2)
    s = sum(sum(sum(sqrt(h1).*sqrt(h2))));

此函数计算直方图距离。

2 个答案:

答案 0 :(得分:5)

您可以通过在最内部括号中执行sqrt(h1.*h2)来保存一个平方根。

答案 1 :(得分:2)

更优雅的方式是

sum( sqrt( h1(:).*h2(:) ) )

我不确定它是否更快......

还有一件事,如果麻烦的来源是compute_distance_hist被调用多次,你可能想尝试将其转换为函数句柄而不是显式调用它。

例如,而不是

while someCondition
    % computations...
    s = compute_distance_hist( a, b );
    % more computations
end

怎么样

compute_distance_hist = @( h1, h2 ) sum( sqrt( h1(:).*h2(:) ) );
while someCondition
   % computation
    s = compute_distance_hist( a, b );
    % more computations
end