我发现有两个公式很难在MATLAB中表示。假设有两个RGB图像,A
和B
,大小相同,m
,n
表示行和列,第三维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
同样,这里也将是所有维度的总和。我不知道如何形成矩阵的范数。
Formula3 is ={ 1/ (m*n)} * sum {(A - B) / 255} * 100
我试过这样的
C = double(总和(A-B,3)); r =重塑(100 *(C / 255)/(m * n),[1 3])
但是有一个错误,说维度应该相同,重塑不起作用。
答案 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
。