如何计算MATLAB中像素的变化率

时间:2010-09-24 15:27:51

标签: matlab image-processing

我发现有两个公式很难在MATLAB中表示。假设有两个RGB图像,AB,大小相同,mn表示行和列,第三维d = 3。如果Formula1是原始图片且A是失真版本,B基本上会计算像素的变化率。 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 = double(总和(A-B,3)); r =重塑(100 *(C / 255)/(m * n),[1 3])

  2. 但是有一个错误,说维度应该相同,重塑不起作用。

2 个答案:

答案 0 :(得分:5)

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)对颜色平面求和,留下具有原始图像尺寸的2D矩阵。有几种矩阵规范,您可以在documentation for NORM中找到您的选择。

答案 1 :(得分:0)

(A ~= B)将生成一个逻辑数组,等于元素不同的true。然后你可以把它投射到例如double,因此它将等于元素不同的1