代码之家  ›  专栏  ›  技术社区  ›  SKM

如何在matlab中计算像素的变化率

  •  3
  • SKM  · 技术社区  · 14 年前

    我发现有两个公式很难用 MATLAB . 假设有两个RGB图像, A B ,大小与 m , n 表示行和列以及第三维度d=3。 Formula1 基本上计算像素的变化率,如果 是原始图像 是失真的版本。 Formula2 计算像素的平均变化率。

    1。 Formula1= { sum(C(m,n,d)) / (m * n)} * 100

      where `C(m,n) = 0`, if `A(m,n) = B(m,n)`
                    `=1`, if `A(m,n) != B(m,n)`
    

    包括第三维度在内的所有行和列的总和。

    我试过这样的方法:

    Formula1 = sum(sum(abs(double(A)-double(B))./(m*n), 1), 2);
    

    但这并没有给出任何错误。但是,这不是正确的表示方法,因为 if 不包含条件。问题区域是如何通过检查 A == B 或者没有,如果 A != B .

    2。 Formula2 ={ 1/ (m*n)} * sum { norm (A - B) / 255} * 100 同样,这里也将是所有维度的总和。我不知道如何形成矩阵的范数。

    1. Formula3 is ={ 1/ (m*n)} * sum {(A - B) / 255} * 100 我像这样试过了

      C=双(和(A-B,3)); R=整形(100*(C/255)/(M*N),[1 3])

    但有一个错误,即维度应该是相同的,而重塑不起作用。

    2 回复  |  直到 12 年前
        1
  •  5
  •   mtrw    14 年前

    为了 Formula1 :

    function r = Formula1(A,B)
    [m,n,d] = size(A); %# A and B must have the same dimension
    C = A ~= B; %# C has a 1 in every pixel that's different
    r = double(sum(C(:)))/(m*n);
    r = r/d; %# normalize by number of color planes
    

    这个 ~= 运算符检查不等式。 (:) 将矩阵矢量化,允许我们计算所有维度的和。

    为了 Formula2 :

    function r = Formula2(A,B)
    [m,n,d] = size(A);
    C = double(sum(A-B, 3)); %# sum over the color planes
    C = C/d; %# normalize by number of color planes
    K = norm(C); %# or norm(C,1), norm(C,inf) etc.
    r = 100*(K/255)/(m*n);
    

    在这里, sum(A-B, 3) 对颜色平面求和,留下与原始图像尺寸相同的二维矩阵。有几个矩阵规范,您可以在 documentation for NORM .

        2
  •  0
  •   Oliver Charlesworth    14 年前

    (A ~= B) 将生成一个逻辑数组,等于 true 元素不同的地方。然后您可以将此强制转换为例如 double ,这样它就等于 1 元素不同的地方。