首页 > 解决方案 > 为什么这个函数会产生“Inf”的值?

问题描述

我有以下函数,我需要将其翻译成 MATLAB 代码,我很确定我已经正确翻译了函数。但是我对代码有一个小问题。

翻译功能:

方程

当我尝试运行此函数时, phi 的值显示为inf我真的不确定为什么会这样?

另外,有人能告诉我这个函数的 sum 部分是否正确吗?在我看来,这告诉我将此函数应用于每个值,然后将该值添加到 phi 中,但我不确定这是否是我实际在做的事情。

function [exists] = detectHaarWatermark(watermarkedCoefs, watermark)

    coefsSize = size(watermarkedCoefs,1);

    phi = 0;
    numeratorTotal = 0;
    denomanatorTotal = 0;

    for i = 1 : coefsSize
        for j = 1 : coefsSize

            y = watermarkedCoefs(i,j) %Watermarked coefficient
            w = watermark(i,j) %Watermark

%             val = ((w * sign(y))^2) / (w^2)

            numerator = (w * sign(y))
            numeratorTotal = numeratorTotal + numerator;
            numeratorTotal = numeratorTotal^2;

            denomanator = (w^2)
            denomanatorTotal = denomanatorTotal + denomanator;


            val = numeratorTotal / denomanatorTotal;

            phi = val;

        end
    end

    phi

    stdDev = std2(watermarkedCoefs)

    if phi > (10*stdDev)
       exists = true; 
    else
        exists = false;
    end

end %end function

编辑:

numerator = (sum(sum(watermark.*(sign(watermarkedCoefs)))));    
numerator = power(numerator, 2);

denomanator = sum(sum(watermark.^2));

phi = numerator / denomanator

标签: matlab

解决方案


推荐阅读