【问题标题】:Image Parameters (Standard Deviation, Mean and Entropy) of an RGB ImageRGB 图像的图像参数(标准偏差、均值和熵)
【发布时间】:2015-01-30 15:35:34
【问题描述】:

我找不到 RGB 图像的答案。

如何使用 MATLAB 获得 RGB 图像的 SD、均值和熵值?

来自http://airccse.org/journal/ijdms/papers/4612ijdms05.pdf TABLE3,他似乎得到了一个答案,所以他得到了 RGB 值的平均值吗?

真的需要任何帮助。

【问题讨论】:

  • 您如何定义彩色图像的 SD、均值等?我的意思是,每个像素都有三个
  • 是的,这是问题的一部分,如果要从 RGB 平均值、SD 和熵中评估一个值。这是否意味着我们必须得到每个通道的值,然后得到它们的平均值?
  • 如何定义 SD,... 取决于您想用它做什么。那么为什么需要这些值呢?

标签: matlab image-processing rgb entropy standard-deviation


【解决方案1】:

阅读完论文后,由于您处理的是彩色图像,因此您可以访问三个信息渠道。这意味着您可以更改彩色图像的通道之一,它仍然可能影响它试图描绘的信息。作者不是很清楚他们是如何获得一个单一的值来表示整体平均值和标准差。坦率地说,因为这篇论文发表在一个不知名的期刊上,我并不惊讶他们是如何成功逃脱的。如果试图将其发表在更知名的期刊(IEEE、ACM 等)上,则可能会因为非常含糊而被彻底拒绝。

关于我如何解释此过程,对所有三个通道进行平均没有意义,因为您想要捕获所有通道的差异。进行这种平均会抹去该信息,并且这些差异会丢失。实际上,如果您对所有三个通道进行平均,如果一个通道将其强度改变 1,并且当您将通道一起平均时,报告的平均值会非常小,以至于它可能不会记录为有意义的差异。

在我看来,您或许应该将整个 RGB 图像视为一维信号,然后执行该图像的均值、标准差和熵。因此,给定存储在image_rgb 中的 RGB 图像,您可以将整个图像展开为一维数组,如下所示:

image_1D = double(image_rgb(:));

double 转换很重要,因为您希望在计算均值和标准差时保持浮点精度。图像可能是无符号整数类型,因此必须进行这种转换以保持浮点精度。如果您不这样做,您的计算可能会饱和或超出该数据类型的限制,您将无法得到正确的答案。因此,您可以像这样计算平均值、标准差和熵:

m = mean(image_1D);
s = std(image_1D);
e = entropy(image_1D);

entropy 是 MATLAB 中的一个函数,用于计算图像的熵,所以在这里应该没问题。正如@CitizenInsane 在他的回答中所指出的,entropy 将灰度图像展开为一维向量,并将熵的香农定义应用于该一维向量。类似地,您可以对 RGB 图像执行相同的操作,但无论如何我们已经将信号展开为一维向量,因此entropy 的输入肯定非常适合展开的 RGB 图像。

【讨论】:

  • 感谢您提供如此全面的回答。
  • @LuisMendo - 呵呵谢谢 :) 我稍微修饰了一下。我阅读了摘要,并略读了介绍和理论。我关注的是结果部分,我通读了它。我到处搜索,看看他们是如何处理彩色图像案例的。他们提到他们使用彩色图像,但没有谈论他们如何管理每个频道的信息。鉴于我在图像处理方面的经验以及我认为作者试图做的事情,我因此给出了我的答案。 IMO,这篇论文相当糟糕,如果我是审稿人,我会直接拒绝。
  • @rayryeng 我不喜欢图像处理,但定义多通道 2D 信号的平均值或标准并不明显,至少值得解释一下。如果他们真的混合所有三个通道,那听起来有点奇怪
  • @LuisMendo - 绝对!这篇论文谈论的是信息隐藏,以及一旦你将这些隐藏的信息放入图像中,就会看到图像是如何受到影响的。我的猜测是,他们使用平均值作为单个可量化值来查看是否存在任何差异。如果平均值或多或少相同,则信息成功隐藏...std 也是如此。对于图像,有多种方法可以做到这一点,但这可能是由于作者对如何评估图像质量缺乏了解。 FWIW,我不会以这种方式评估它。
【解决方案2】:

我不知道作者实际上是如何做到的。但是您可以做的是将图像视为大小为 WxHx3 的一维数组,然后简单地计算均值和标准差。

【讨论】:

    【解决方案3】:

    不知道表3是否以相同的方式获得,但至少在matlab的图像工具箱中查看entropy例程,RGB值被向量化为单个向量:

    I = imread('rgb'); % Read RGB values
    I = I(:); % Vectorization of RGB values
    
    p = imhist(I); % Histogram
    p(p == 0) = []; % remove zero entries in p 
    p = p ./ numel(I); % normalize p so that sum(p) is one.
    
    E = -sum(p.*log2(p));
    

    【讨论】:

      最近更新 更多