【问题标题】:How to calculate the rate of change of pixels in MATLAB如何在MATLAB中计算像素的变化率
【发布时间】:2011-04-16 20:32:57
【问题描述】:

有两个公式我发现在MATLAB 中难以表示。假设有两个 RGB 图像,AB,大小相同,m,n 代表行和列,第三维 d=3。如果A 是原始图像,B 是失真版本,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 = double(sum(A-B,3)); r = reshape(100*(C/255)/(m*n),[1 3])

但是有一个错误说尺寸应该相同并且重塑不起作用。

【问题讨论】:

    标签: matlab image-processing


    【解决方案1】:

    对于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 中选择。

    【讨论】:

    • @mtrw,这些公式要放在脚本(m文件)中,所以出现错误“提示或脚本中不允许函数定义。”另外,只要调用函数 r = Formula1(A,B) 我会得到 r 的输出吗?
    • Matlab 只允许每个 m 文件定义一个函数。因此,要么 (a) 将它们中的每一个放在自己的 m 文件中,然后从主脚本或提示符中调用它们,要么 (b) 删除行 r = Formula... 并将它们直接复制到您的脚本中或在提示符处。对于第二个问题,是的,结果将在r 中。有关函数文件的详细信息,请参阅mathworks.com/help/techdoc/ref/function.html
    • 如果您正在分析 RGB 图像,则有三个颜色平面。如果AB 完全不同,则sum(C(:)) 将是3*m*n,而不是m*n。您有两个选择:您可以除以颜色平面的数量,或者您可以在求和之前使用any(C,3) 创建一个新矩阵,其中逻辑 1 表示一个像素在至少一个颜色平面上存在差异。请参阅任何文档:mathworks.com/help/techdoc/ref/any.html
    • @如果你能更新你的答案将会很有帮助。确实会有三个这样的值,每个颜色平面一个。
    • 我认为独立获得每个颜色平面结果的最简单方法是执行squeeze(sum(sum(C)))。最里面的 sum 跨列运算以生成 (1,n,d) 矩阵,下一个 sum 跨结果行运算以生成 (1,1,d) 矩阵,squeeze 摆脱了领先的单维。见mathworks.com/help/techdoc/ref/squeeze.html
    【解决方案2】:

    (A ~= B) 将生成一个逻辑数组,等于元素不同的true。然后,您可以将其转换为例如double,因此它将等于 1,其中元素不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-07
      • 2021-10-10
      • 1970-01-01
      • 2011-01-24
      • 2017-12-15
      • 1970-01-01
      相关资源
      最近更新 更多